一。sphinx安装 (已做博客记录)
二. 语音的基本原理
http://cmusphinx.sourceforge.net/wiki/tutorialconcepts,翻译参照:http://blog.youkuaiyun.com/zouxy09/article/details/7941055
Structure of speech
语音是由一组相对稳定的状态和一些动态变化的状态组成的连续信号流。在这些状态中,一个状态或多或少能确定相同类型的声音,或者phone单元。由phone再构建出word单元。一组语音信号对应于哪个phone单元,与很多因素有关:phone内容,说话方式,说话人等。coarticulation(协同发音)使得phone的发音与它本身规定发音内容有很大不同。此外,由于单词之间有很多信息,人们考虑了diphonese这个知识,两个phone单元之间的部分就是diphone,triphone中,第一个phone叫做前置phone,中间phone是稳定的,剩下的部分依赖于下一个phone。所以三状态常常被用于语音识别中。
很多时候phone的考虑依赖上下文,bad中的a和ban中的a发音是不同的。
为了计算方便,检测出triphone的边缘,而不是把triphone当做一个整体。例如,为了确定一个triphone的开始状态是什么,需要经过很多triphone的探测。我们通常使用4000个可区分的短时声音探测器来组成triphone的探测。我们把这个叫做多元音素。一个多元音素的上下文依赖关系比左右依赖关系复杂的多。可以用决策树或者别的形式来描述。
音素构成音节,音节通常被认为是稳定的,因为当语速很快说话,音素会发生变化,但音节不会。音节也与语调的轮廓有关。建立音节的方式有两种:基于形态学,基于语音学。音节识别在大词汇量识别中有用。
独立字构成了单词,单词在语音识别中很重要。好在哪怕一个受过丰富教育的人,他的常用词汇也是不超过2w个,所以根据单词的组合形成句子做识别这件事是可行的。单词,和其他停顿,呼吸等特性形成了一个人的话语。
三,识别过程
Recognition process
识别的一般流程是:我们处理声音波形,将它根据静音,切分成一段一段的波,然后试图识别出每段波中说的内容是什么。
其中有三个要点:1.特征。我们取了39维的特征来表征声音。2.模型,实践中使用的是三状态的高斯混合模型。在语音交流方面。用的最广泛的是hmm模型。这个模型, 将语音交互过程,表示为一组序列,其中从一个状态转向另一个状态,是依据不同的概率值。3.识别过程。如何根据所有模型搜索出最佳的结果。
Models
根据语音的结构,需要三个模型:
声学模型:代表了声学参数,分为上下文依赖的模型, 和独立于上下文的模型
词典: 指出了单词到发音的映射。
语言模型:定义了识别出的句子中最可能的单词组合。为了识别名字(因为名字的组合各种可能都有),单元可以是音素或者单个字。只是这样的话性能会更差。.
Other concepts used
网格:有时候识别出的最佳结果并不明确是一个,可以有个候选词串或者词网络。
语音库,文本库。
What is optimized-结果衡量参数
1.单词错误率Word error rate.
Let we have original text and recognition text of length of N words. From them the I words were inserted D words were deleted and S words were substituted Word error rate is
I:插入单词,D:删除单词,S:误识别单词。错误率=(误插入+误删除+误识别)/总数
WER = (I + D + S) / N
WER is usually measured in percent.
2.Accuracy. 准确率
It is almost the same thing as word error rate, but it doesn't count insertions.
Accuracy = (N - D - S) / N 准确率,灭有考虑误插入的结果
3.识别速度Speed.
4.ROC curves. When we talk about detection tasks, there are false alarms and hits/misses; ROC curves are used. A curve is a graphic that describes the number of false alarms vs number of hits, and tries to find optimal point where the number of false alarms is small and number of hits matches 100%.
四:语言模型训练
有多种语言模型用于识别:关键词列表,语法和统计语言模型,语音的统计语言模型。可以按需选择或者相互切换。
Keyword lists(关键词列表):
PocketSphinx支持的关键词列表。每个词组可以给出一个阈值。
Grammars(语法):
语法描述可以用于简单的语言类型,比如命令,控制等。它要求输入要非常精确,当说话时候跳过某个词,就会有误差。
Language models
统计语言摸性,可以表现出每个单词出现的可能以及单词之间的关联。这个模型方便建立,即使你不能列出该语言的语法信息,只用一些简单的句子,他可以自动生成模型。推荐的方法有cmu。语言模型的格式有arpa,bin,dmp。arpa可以编辑,但是占用内存大。bin是二进制,占用内存小。dmp是不值得推荐的旧模式。
语言模型的训练
1)Text preparation
文本的准备,需要的是干净的文本,需要将各种缩略词,数字都展开。
【重点】中文的语言模型训练方法和英语想死,只有额外的一点考虑,中文需要分词。一个分词工具和单词列表是需要的。
2)语言模型训练
其他资料:先放几个链接,方便大家入门:
wiki: http://en.wikipedia.org/wiki/Language_model (中文版的就不要看了,基本没啥内容)
Coursera:
哥伦比亚大学:https://www.coursera.org/course/nlangp
斯坦福:https://www.coursera.org/course/nlp
推荐哥伦比亚大学的Natural Language Processing 比较简单适合入门,斯坦福的更深入一些内容也过多
3)cmusphinx语言模型训练的流程
http://www.speech.cs.cmu.edu/SLM/toolkit_documentation.html:内附语言模型流程,每个步骤的含义,以及各个参数含义
3)中文语言模型训练
1.短词汇,不用分词的词组做语言模型训练
2,包含长词串,需要经过分词后做语言模型训练
中文分词工具: http://www.360doc.com/content/13/0909/16/13491968_313290574.shtml
可下载的分词工具:
(1)中科院计算机所分词工具:http://ictclas.nlpir.org/newsdownloads?DocId=389
(2)百度在线分词工具