文本
文本预处理
中文分词:分词工具:jieba/snownlp/...,是否需要去除停用词?
word embedding:工具:word2vec/ doc2vec/ TF-IDF/ CountVectorizer/ HashVectorizer/ ....作为模型输入
word2vec: CBOW/Skip? negative sampling?
文本特征抽取
- 统计特征:句子长度,关键词/名词?
- 模型学习到的输出特征:利用其它比如LSTM等从句子中捕获的特征
完成后,到这里两大部分的特征都拿到了,可以使用特征选择,比如方差选择,相关系数法,卡方检测等过滤掉一些特征,可以使用PCA主成分分析,LDA线性判别等降维。
模型
lightgbm/ linear model/ nn...
在模型输入上,对于上述两大部分特征:原句的embedding和后续的文本特征提取,关于两者结合,有两种处理方式:两者拼接成一个长向量作为模型输入;两个各自训练模型并预测,将预测结果加权平均...
在模型的ensemble上,可以使用stacking。比如5个模型作为第一层,每个模型每次取出4/5训练,1/5验证,最后会得到1个和原训练集样本数相等的验证的预测集(nx1),5个在测试集上的预测结果,这5个在测试集上的预测结果可以取平均使之与原测试集样本数相同(n‘x1)。第一层每个模型都这么做,最后会得到5个与训练集样本数相等,5个和测试集样本数相同的数据集,各自拼接起来,形成新的训练集(nx5+1)和测试集(n‘x5)。注意,新训练集的标签仍是原训练集的标签。上面括号里标注的shape里训练集"+1"是表示标签。第一层完成之后,放入第二层用另外的模型对这训练集(nx5+1)和测试集(n‘x5)训练和预测。
在评估模型性能上(调参),可以选择K折交叉验证。每次取(k-1)/k训练,1/k预测,最后输出k次预测loss的平均值。
代码地址:public_praise_prediction_yunyi
语音情感识别
传统方法:
第一阶段:提取低级表示符
从20~50ms的短帧中提取的升学特征,通常被称作低层标识符(Low-Level Discriptor, LLD).
第二阶段:高层统计函数
将传统的统计聚合函数比如平均、最大、方差等应用到字词层次间隔的LLD上,然后将他们按字词层次拼接成长向量。这基于”情绪取决于时间变化而非短期的静态的低级表示符LLD值“
该文使用了注意力机制和双向LSTM,构造了”加权池“,处理与情感无关的语音帧。使用了注意力的加权池比平均池的准确率提高1%~2%。
静默的帧被分配了一个很小的权值,有效的将其在池化操作中过滤掉了。同样,根据人的情感,有语音的帧,其权值也各不相同。注意力模型不仅仅关注语音能量,同时关注不同部分语言的情感内容。注意力机制使用简单的逻辑回归(softmax)实现:
\[ \alpha_T=\frac{exp(u^Ty_\tau)}{\sum_{\tau}^Texp(u^Ty_\tau)} \]
其中,\(Z=\sum_{\tau}^T \alpha_\tau y_T\)
神经网络提取到的高层特征经加权池化后送入softmax层获取情感分类的后验概率。
整个网络如图
代码地址:speech_emotion
paper: Automatic speech emotion recognition using recurrent neural networks with local attention