【www.arisingsemi.com--语言培训】

牛拼音
语音识别很牛吗。来试试《施氏食狮史》和《季姬击鸡记》
语音识别如何处理汉字中的「同音字」现象。lambert Fan,Rokid A-lab,语音识别,机器学习,深度学习
outline:


1、背景


2、通俗易懂版


3、进阶版


4、多音字的处理能力



1、背景
GB 2312 标准共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个。对于人名、古汉语等方面出现的罕用字,GB 2312 不能处理,这导致了后来 GBK 及 GB 18030 汉字字符集的出现。
汉语的声母共有 23 个,韵母 24 个。普通话的读音共有 420 个左右,即使考虑声调,总数也远小于汉字的个数。

汉字中的同音字现象这里也无需多费口舌来介绍,直接呈上我国著名语言学家、“现代语言学之父”赵元任先生的两篇文章。
《施氏食狮史》
石室诗士施氏,嗜狮,誓食十狮。施氏时时适市视狮。
十时,适十狮市。是时,适施氏适市。施氏视十狮,恃矢势,使是十狮逝世。
氏拾是十狮尸,适石室。石室湿,施氏使侍拭石室。石室拭,施氏始试食十狮尸。
食时,始识十狮实十石狮尸。
试释是事。
《季姬击鸡记》
季姬寂,集鸡,鸡即棘鸡。棘鸡饥叽,季姬及箕稷济鸡。鸡既济,跻姬笈,季姬忌,急咭鸡,鸡急,继圾几,季姬急,即籍箕击鸡,箕疾击几伎,伎即齑,鸡叽集几基,季姬急极屐击鸡,鸡既殛,季姬激,即记《季姬击鸡记》。

(网图,侵删)
这两篇文章通篇都是同音字,尽管只有声调的差异,但是想通畅的读下来,还是需要认真练习几遍。下面我们就来聊聊这样的同音字文章,语音识别是否可以搞定。


2、通俗易懂版
语音识别处理同音字的方法,一句话来概括就是根据上下文关系。
下面举例来说明这个过程。
比如有一段语音,共有四个字,我们依次来看每个字的发音。
a)首先我们听到第一个音“wǔ”。人来判断的话,这个字的可能性也是很多的,可以是{五、午、舞、武、吾、捂}等等等等,实在不好做出选择。
b)听到第二个音之后,语音变成“wǔ·rén”的时候,选择就发生了变化。
有些字开头从来没见过这种组合,所以就被排除了。现在组合可能是{五人、武人、舞人、五仁}等等等等。
这个时候如果非要给出一个选择,我们可能会选择一个最常见的,比如“五人”。
c)当这段语音的第三个音出现的时候,语音变成了“wǔ·rén·yuè”。
这时候选择又发生了变化,一些不大可能的组合被排除掉,一些可能性更大的组合被放到了前面。现在组合可能是{舞人月、无人月、无人约、武人月、伍仁月}等等。
有些组合可能声调不对却仍然被列在了候选中,这是因为识别的时候其它声调也有一些可能性,不能完全排除,万一是人发错了音呢。
d) 这段语音所有的字都给出之后,语音变成“wǔ·rén·yuè·bìng”。
这时候,大多数人的第一反应大概就是“五仁月饼”。当然其它的可能性也不是没有,但要比这个汉字组合的可能性小。
如果用拼音输入法,依次输入上述拼音的时候,可以看到候选项的变化如下。
当然每个人的候选是不相同的,它会根据个人的习惯改变候选排序。

使用语音输入法,通常给出的都是可能性最大的一个结果,所以看不到候选。但可以通过输入的语音,观察随着语音长度变化,识别结果的变化。


3、进阶版
先祭出公式:
上式中 W 表示汉字序列,Y 表示语音输入。公式 1 表示语音识别的目标是在给定语音输入的情况下,找到可能性最大的汉字序列。
根据 Baye’ Rule,可以得到公式 2,其中分母表示出现这条语音的概率,它同要求解的汉字序列没有参数关系,可以在求解时忽略,进而得到公式 3。公式 3 中第一部分表示给定一个汉字序列出现这条音频的概率,它就是语音识别中的声学模型;第二部分表示出现这个汉字序列的概率,它就是语音识别中的语言模型。
声学模型可以理解为是对发声的建模,因此它能够把语音输入转换成声学表示的输出,或者简单的理解成拼音的输出。如果给定了唯一的拼音序列,要求解汉字序列,那么这个问题就简化成了同拼音输入法类似的问题。
当然声学模型的输出不是唯一的拼音序列,而是很多种拼音序列组成的网格(lattice),所以声学模型的解码要比输入法的设计复杂。
抛开声学模型,我们假定已经知道了唯一的拼音序列,现在只需求解汉字序列,问题简化成了通俗易懂版本。
下面我们来看语言模型如何在发挥作用,排除多音字的干扰。
关于语言模型,目前最常见的是 N-Gram 语言模型和基于 RNN 的语言模型,这里先介绍下 N-gram 的语言模型。

首先考虑给定一句话:
其中  是统计基元,可以是字、词、短语等。这个句子的概率有下面的公式来计算:
从公式中可以看到  的概率由  决定,由特定的一组  构成的序列,称为  的历史。
随着历史基元数量的增加,不同的“历史”(路径)按指数级增长。对于第 i ( i >1 ) 个统计基元,历史基元的个数 , i-1,如果共有 L 个不同的基元,如词汇表,理论上每一个单词都有可能出现在 1 到 i-1 的每一个位置上,那么, i 基元就有  种不同的历史情况。
我们必须考虑在所有的  种不同历史情况下产生第 i 个基元的概率。那么中有  个自由参数。 如果 L=5000, m = 3, 自由参数的数目为 1250 亿。这个参数量显然是无法接受的。

为了减少参数,我们考虑 n 阶马尔科夫链,即认为当前词只跟它之前出现的 n 个词有关系,那么对于单个词的概率则由  变成 。
a)当 n=1 时,即出现在第 i 位上的基元 wi 独立于历史, n-gram 被称为一阶马尔柯夫链(uni-gram 或 monogram)
b)当 n=2 时, n-gram 被称为 2 阶马尔柯夫链(bi-gram)
c)当 n=3 时, n-gram 被称为 3 阶马尔柯夫链(tri-gram)
。。

。。。
为了保证条件概率在 i=1 时有意义,同时为了保证句子内所有字符串的概率和为 1,可以在句子首尾两端增加两个标志: w1 w2 … wm 。据此,对于 n>2 的 n-gram,上述整句的概率就简化成了如下面的形式:
利用 bi-gram 来计算前面例子中“五仁月饼”的概率:
P(五仁月饼)=P(五|)×P(仁|五)×P(月|仁)×P(饼|月)×P(|饼)
同理,其他汉字序列的概率也可以由此公式计算得到。最终在输入法的列表中给出概率最大的几个选项即可。对于识别也是一样,如果识别结果只有一个,那么就给出概率最大的一个结果;如果识别结果是 N-best 那么就根据概率给出可能性最大的 N 个识别结果。
对于 RNN 的语言模型,参数量并不会随着句子序列长度的增加而发生变化,因此不需要马尔柯夫链的前提假设。因此它是对整句进行的概率计算:
其中每一次概率计算
都是一次 RNN 的前向计算。
对于如何计算 P(仁|五)就是语言模型的构建的问题了,这里就不再详细介绍,感兴趣的同学可以自行学习。对 N-gram 语言模型感兴趣的同学,可以参考宗成庆老师的《统计自然语言处理》;对 RNN 语言模型感兴趣的同学可以阅读这篇文章[Rafal Jozefowicz, 2016]。



4、多音字的处理能力
最后我们回到背景介绍中的问题。现在的语音识别系统能否识别汉字中的多音字问题呢。答案是在一定程度上可以,比如正常的说话通常可以正确识别。但结果是依据统计学给出的概率上最可能的结果。
对于赵元任老先生的这 2 篇文章是否可以识别呢。
还是直接来看讯飞手机输入法的识别结果。普通话好的各位同学自行尝试。
参考文献:


1、信息交换用汉字编码字符集:
/item/ 信息交换用汉字编码字符集 /8074272


2、普通话音节表:
/Lexis/lexi-mf/mandarin_


3、《统计自然语言处理》宗成庆


4、Rafal Jozefowicz, Oriol Vinyals, Mike Schuster, Noam Shazeer, Yonghui Wu, Exploring the Limits of Language Modeling, 2016
想知道更多关于语音识别、机器学习的研究成果应用,欢迎关注 Rokid 知乎机构号:知乎 - 知乎
未经允许,请勿转载
查看知乎原文(5 条讨论)。

本文来源:http://www.arisingsemi.com/yuyanliuxue/58427/