文本和音频代码的小结

Posted mengnan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本和音频代码的小结相关的知识,希望对你有一定的参考价值。

文本

文本预处理

  1. 中文分词:分词工具:jieba/snownlp/...,是否需要去除停用词?

  2. word embedding:工具:word2vec/ doc2vec/ TF-IDF/ CountVectorizer/ HashVectorizer/ ....作为模型输入

    word2vec: CBOW/Skip? negative sampling?

文本特征抽取

  1. 统计特征:句子长度,关键词/名词?
  2. 模型学习到的输出特征:利用其它比如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_ au)}{sum_{ au}^Texp(u^Ty_ au)} ]
其中,(Z=sum_{ au}^T alpha_ au y_T)

神经网络提取到的高层特征经加权池化后送入softmax层获取情感分类的后验概率。

整个网络如图

技术分享图片

代码地址:speech_emotion

paper: Automatic speech emotion recognition using recurrent neural networks with local attention



以上是关于文本和音频代码的小结的主要内容,如果未能解决你的问题,请参考以下文章

Unity音频资源小结

Unity音频资源小结

音频算法之小黄人变声 附完整C代码

如何使用 python 和音频文件创建自定义文本到语音?

Keras深度学习实战(10)——音频分类

向上滚动文本并在使用 html5 音频读取文本时将其隐藏