因工作需要,准备开始做语音问答系统,之前对语音和自然语言处理(NLP)没接触过,所以开头还是很难的,历时两周做了一个大概的了解,适合像我这样的新手入门,里边借鉴了n多大神的内容,并给出了讲得比较好的网页、课程等等,如侵权请联系删除。。。
在语音识别和问答系统中,必不可少的就是循环神经网络(RNN)了,这里不对算法做详细介绍,只给出基本类型及应该学习了解的网络结构及其较好的学习资源。
上图是RNN的基本类型,下边对其输入输出及其作用做一个大概的说明
需要提前了解的网络结构有RNN、 LSTM、 Attention机制,推荐李宏毅老师的课程:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLSD15_2.html
从1990年到2010年,语音识别多采取上述框架,下边对上述框架的部分做一简要解析
预处理:
1. 首尾端的静音切除,降低对后续步骤造成的干扰,静音切除的操作一般称为VAD(语音激活检测);
2. 声音分帧,也就是把声音切开成一小段一小段,每小段称为一帧,使用移动窗函数来实现,不是简单的切开,各帧之间一般是有交叠的;
特征提取:
主要算法有线性预测倒谱系数( LPCC)和Mel 倒谱系数( MFCC),目的是把每一帧波形变成一个包含声音信息的多维向量;
声学模型( AM):
通过对语音数据进行训练获得,输入是特征向量,输出为音素信息;常用算法为GMM+HMM;
字典:
字或者词与音素的对应, 简单来说, 中文就是拼音和汉字的对应,英文就是音标与单词的对应;
语言模型( LM) :
通过对大量文本信息进行训练,得到单个字或者词相互关联的概率;常用算法为: n-gram模型;
解码:
就是通过声学模型、字典、 语言模型对提取特征后的音频数据进行文字输出;
上述模块中涉及到很多知识,在此列出本人觉得比较好的链接,部分内容我也已经转载,但是为了尊重原创,还是给出原文链接:
https://blog.csdn.net/xueyingxue001/article/details/53183757
今生主要得益于神经网络,主要思想就是用DNN取待原有模块,或做最后的大融合
上述涉及到的知识如果想要详细了解请参考以下链接:
在闲聊型问答系统介绍之前不得不先请出该系统的明星:Seq2Seq
其模型结果如下所示:
说明: 上上一个模型为训练模式,即decoder的输入为ground truth,上个模型为部署模式,在测试时, decoder的输入为其上一时刻的输出
分词
概念
a) 中文分词指的是将一个汉字序列切分成一个一个单独的词。 分词就是将连续的字序
列按照一定的规范重新组合成词序列的过程。
中文分词方法
a) 基于字符串匹配的分词方法
b) 基于理解的分词方法 ( 处于试验阶段)
c) 基于统计的分词方法
d) 实际使用时结合a)和c)
中文分词工具
jieba分词、 SnowNLP、 THULAC、 NLPIR
词嵌入( Word Embedding)
概念
a) 是一种词的类型表示, 具有相似意义的词具有相似的表示, 是将词汇映射到实数向
量的方法总称。
独热码( one-hot encoding)
a) 将词表示为很长的向量, 词的维度是词表大小, 绝大多数维度为0, 只有一个维度为
1
b) “ 可爱” [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ……]
常用算法
a) word2vec:详细算法请参看http://www.dataguru.cn/article-13488-1.html Skip-gram及CBOW算法详解及训练过程请参看cs224d视频的第2节课的内容
Seq2Seq
工具
a) Tensorflow embedding_attention_seq2seq的API接口
b) 接口参数请参看http://www.shareditor.com/blogshow?blogId=136
c) 该接口融合了word embedding 和attention机制
d) seq2seq详细算法讲解请参看 https://blog.csdn.net/Irving_zhang/article/details/78889364
自然语言生成( Word Embedding)
算法
a) 贪婪搜索:输出序列的每一步中输出最有可能的单词
b) 集束搜索( beam search) :返回可能性最大的输出序列列表
c) 详细讲解请参看: https://www.sohu.com/a/159397046_206784
给定自然语言问题,通过对问题进行语义理解和解析,进而利用知识库进行查询、推理得出答案。
适合回答when,what等事实性问题,回答的答案是知识库中的实体或实体关系
利用三元组存储(实体entity, 实体关系relation, 实体entity),如(姚明,出生地,上海)
语义解析
思想在于将人类使用的自然语言句子转化为机器可以理解的逻辑形式,通过数据库得出答案。
信息抽取
思想在于通过抽取句子中的特征信息和知识库中相关实体的特征信息,用以上特征训练分类器对候选答案排序得出答案。
向量建模
思想在于将知识库的实体和自然语言句子都映射到同一个向量空间中,通过比较相似度寻找答案。
深度学习
应用于语义解析、向量建模;采用记忆网络、 Attention机制
动态模型
思想在于预定义一些网络模块,通过对问题进行解析,针对问题使用不同的
模块组合出动态模型进行回答。
参考资料
知乎专栏 https://zhuanlan.zhihu.com/p/27141786
对话系统
基于检索的对话系统 (面向具体任务的问答新系统)
模式: s1,s2->R, 即字符串s1和s2符合一定的规则
将回复使用的数据预先存储, 优点为回复的内容不会有语
法和语义的错误;
缺点:不会创造新的回答, 无法对未训练的问题作出回答
模式: s1->s2, 即由字符串s1得到s2
具有上述两种功能的混合对话系统