【sphinx】sphinx阶梯式学习笔记

本文介绍了语音识别的基础原理,包括语音的基本结构、识别过程及语言模型训练方法。详细阐述了声学模型、词典和语言模型的作用,并针对中文语言模型的训练提供了具体指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一。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)百度在线分词工具

 

转载于:https://www.cnblogs.com/lijieqiong/p/4801627.html

本文档介绍Sphinx4在Windows下的中文训练过程及注意事项,与本文档配套的是我自己的训练实例bergtrain和用到的软件。 本文档编写日期 2013-04-23 1、为什么要训练? sphinx4目前的版本中仅提供了英文等语音识别库。中文的库是PTM或semi类型的,在java版sphinx中无法使用。 2、Sphinx的训练指哪些内容? 在Sphinx中有语言模型、声学模型等概念,如果你不想了解这些,请参考以下内容: a1、中文每个字的标准发音已经有一个较为全面的文件进行了标注 这个文件就是zh_broadcastnews_utf8.dic(下称这类文件为发音字典),在sphinx网站上可以下载,我们也包含了它。 下面是该文件的片断,它用类似拼音的方式标注了每个字或词的发音。 昌 ch ang 昌北 ch ang b ei 昌必 ch ang b i 昌都 ch ang d u 昌赫 ch ang h e a2、需要告诉sphinx我们经常使用的字、词是哪些,它们出现的频率如何 由于开放式语音识别尚难实现,所以sphinx实际上只能较好的处理相对小的语言集合。 因此,针对特定的领域,告诉sphinx该领域的词汇和各词出现的频率将极大提高识别率。 a3、需要告诉sphinx每个字、词的真正读音 发音字典告诉sphinx每个字的标准读音,但面对的说话人往往不会以标准读音来朗读。 因此sphinx需要学习说话人的“口音”。 如果训练时的读者发音比较标准,则sphinx能“举一反三”,识别其他不那么标准的读者的语音。 推荐的做法是训练一些典型的口音:标准男、女声,童音,最后再考虑特定用户的口音。 3、如何准备训练内容所需的原料? 需要准备两大内容:1)文本语料文件,2)语料录音文件。 文本语料文件给出2.a2中需要的内容,在bergtrain的etc文件下的berginput.txt文件就是一个预料文件。 它以行为单位,给出了150个中文句子。 语料录音文件是根据文本语料文件,朗读它的每行/句话,保存到每一个语音文件即可。 语料文件中的语句应该尽量选择领域相关的,在覆盖领域内名词的前提下,覆盖尽可能多的通用词汇。 4、训练环境及注意事项 本文的训练软硬件如下: 硬件:T60P笔记本,机器自带录音设备;操作系统为Win7 32位。 软件:Sphinx cmuclmtk-0.7-win32.zip pocketsphinx-0.8-win32.zip sphinxbase-0.8-win32.zip sphinxtrain-1.0.8-win32.zip sphinx4-1.0beta6-bin.zip,用于编写java版的识别软件所需的库 脚本执行软件 ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi ActivePython-2.7.2.5-win32-x86.msi 录音和处理软件 audacity-win-2.0.3rc1.zip,可进行录音和声音文件处理(如降噪),免费软件 FairStars.zip,可进行批量录音(V3.5绿色版) 文本编辑软件UltraEdit,UltraEdit-32.rar绿色版 注意: 文件格式 语料文件必须使用UltraEdit进行编辑, 在编辑后,使用 文件-转换-ASCII转UTF-8(UNICODE编辑),指定文件中的中文使用utf8编码。 在保存前,设置格式如下: 换行符:UNIX终束符 - LF 指定文件中的回车/换行符为编码0A的换行符 格式:UTF-8 - 无BOM 每个文件的末尾必须有一个回车! 这个回车将在保存时被替换为编码0A的换行符,训练脚本需要这个符号来确认文件的结束。 录音文件 如果你不希望去编辑训练中的配置文件,则在使用FairStars录音时作如下设定: 进入菜单和对话框 选项-显示录音选项-编码-WMA, 设定:采样率(16000Hz)、通道(单声道)、比特率(16Kbps) 5、训练步骤 下面逐步从零开始进行训练 5.1 软件环境的安装 将本文档所在的文件夹解压或拷贝到d:\,即本文档路径是d:\sphinxtrain\Sphinx中文训练教程.txt 1)点击安装ActivePerl-5.16.3.1603-MSWin32-x86-296746.msi和ActivePython-2.7.2.5-win32-x86.msi; 2)解压Sphinx中除sphinx4-1.0beta6-bin.zip外的压缩文件到d:\sphinxtrain下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值