发信人: heavenet (攻城狮), 信区: AI, 标 题: 语音识别(2) 发信站: BBS 水木清华站 (Mon Jan 11 11:57:17 1999) 先改个错误。在采样时,采样频率应当是选取 频段的最高值的两倍,上次说反了,不好意思。:) 反正语音识别也不是什么高深的东西,想必大家都知道, 我就大致说一说了,主要讲自己的理解。 第二阶段,语音处理。 采样进入计算机后,成为一段段的数据,表明各个时刻的 声音能量。 处理时,第一步就是消除噪音,消不了这个 东西,下面怎么都不好搞。可消除的主要是电器噪音,方法 是完全静音时,录下电路信号,反相回到声音上去就成了。 再下面就是断字了。人类语言是分音节的,音节之间是有一 个停顿的,特别是汉语就更明显了。我主要讲的是汉语,在 输入的数据中舍去能量低于一定值的部分,余下次的一段段 的就对应各个字了。这需要解决两个问题,第一,舍去的标准, 显然人说话声音有高有低,不能硬来。我的建议是取波形,不管 说话声音高低,声音总是有形状的,不妨先取几个完整的波形, 算出平均能量,取它的几分之一作为标准即可。而且这个过程似乎 应该是动态的。第二是舍去一部分后,余下的部分可能不太整齐, 由于噪音等原因,该舍的可能没舍,这就会有问题。解决这个问题 大概可以在舍去时,不仅根据值的大小,还要根据两边的情况。这关系 到舍去函数了,不是很难。 断开各个字之后,就可以进行匹配了。原来的样本经过处理后,变成 时间的函数,以时间为顺序取得一组值,成为N维向量。待处理的数据 也同样进行,采用波形插值法从采样中取出N维向量,与样本进行匹配。 这关键是一个匹配函数的问题,即由两个向量在空间的相互位置得到一个 匹配度,与样本依次比较,得出各自的匹配度。 由于各个样本都要匹配, 所以速度很重要。 通常的改进方法是进行多次匹配,即只把某些坐标进行 对比,值大于某个标准才进行二次匹配。 这个标准可以是动态的,比如已 进行过的对比的第M大的值。 为什么不到最大值,主要是需要保留多个结果。 同时M可调,也便于在处理特殊情况时进行智能应变。 匹配时,相应的计算 函数相当重要,样本要相当的标准,同时以此样本为中心,扩张出多层区域, 每层内的向量得到各层的匹配度,由此只要划定相应的匹配区域,给出值就可以了。 这里要多说一点,一般来说,匹配时都采用统一的函数,我却不这么认为, 特别是汉语, 语音的种类很少,不如将它们分组,每个组函数都不一样。也就是在匹配时, 跟据要操作的目标,可以得到相应的匹配函数,进行匹配。 我觉得这要比用 同一个匹配函数有效的多。 而且,在调节对具体某个字的识别时,也很容易,同时在让它自动学习的 时候,也很容易搞。 你可以自己设计一个软件,把样本显示在二维坐标上(X:时间,Y:能量), 输入一个声音时,把相应的量也显示在坐标系上。这是两条曲线。一方面, 你可以反复地读样本,让软件把各条曲线求出来,然后取个中间值更新样本。 另一方面,你也可以人脑辅助,根据自己反复读样本得出的曲线,对坐标空间 进行分割,得出相应的匹配函数。也就是说,样本可以通过学习自动升级, 匹配函数也可以由人脑加入进行升级。我认为这样会更高效一点。 分组还有一个好处就是把相近的音归到一组,如果输入的数据和其中一个相差 太远,其他的就可以跳过去了。这样可以提高速度。 匹配这后,就把结果送入下一模块,其结果应该是这样: X:概率X0,Y:概率Y0。。。 如此等等,要送入概率最大的M个字,同时附上各字的概率。 to be continued. -- 看看吧,都有些啥. ※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.120.240.10]