首先是语言模型和序列生成。什么是语言模型呢? 当你听到一句话的时候,例如
很明显第二个的可能性更高,如果系统能识别为第二句话就说明这是一个好的语音识别系统。语言模型就是计算两句话各自的概率。它由两部分组成:语音识别系统以及机器翻译系统。语言模型就是输入一个序列,计算这个序列中每个单词出现的概率。
如何得到一个语言模型呢? --首先需要一个语料库(可以是中文或者英文),将这些语料组成一个字典,将每个单词转化为字典索引,在每一个句子末尾加上EOS(分割标志),如果在新的句子中出现语料库中没有的单词,应该将这个陌生的单词替换为“UNK”(未知词的标志)然后根据UNK建立一个概率模型。例如,
是语料库预测第一个单词可能是什么的概率。
当训练过序列模型后,如果想要知道到底学到了什么,吴老师介绍的一种非正式的方法就是对序列模型进行下采样。就是说首先初始化
,
经过**函数(常用sigmoid函数)后,得到第一个输出
,对该输出进行下采样,并将下采样的结果(如the)作为第二层的输出,并经过**后得到第二个输出......直到达到所设置的时间步。
但是在该过程中会出现一些未知的标识,如果你需要确保算法不输出这些标识,那么就需要在采样的过程中拒绝产生的未知标识。如果采样得到未知标识的单词,可以忽略不计该单词,对输出进行重采样,直到输出的是语料库的单词。如果并不介意未知标识的单词,就不需要这样做。
作者也提出可以根据字符建立语料库,这样就不会出现未知的标识,但是这样做有好有坏。基于字符的与语言模型不能捕捉较长的语料关系,并且基于字符的语言模型训练起来计算成本也十分昂贵。所以自然语言处理的趋势就是基于单词的语言模型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络—-语音处理 - Python技术站