文档库 最新最全的文档下载
当前位置:文档库 › 语音识别很牛吗来试试《施氏食狮史》和《季姬击鸡记》

语音识别很牛吗来试试《施氏食狮史》和《季姬击鸡记》

语音识别很牛吗?来试试《施氏食狮史》和《季姬击鸡记》

语音识别如何处理汉字中的「同音字」现象?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、信息交换用汉字编码字符集:

https://www.wendangku.net/doc/af18693700.html,/item/ 信息交换用汉字编码字符集

/8074272

2、普通话音节表:

https://www.wendangku.net/doc/af18693700.html,.hk/Lexis/lexi-mf/mandarin_syllab les.php

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

4、Rafal Jozefowicz, Oriol Vinyals, Mike Schuster, Noam Shazeer, Yonghui Wu, Exploring the Limits of Language Modeling, 2016

想知道更多关于语音识别、机器学习的研究成果应用,欢迎关注Rokid 知乎机构号:知乎- 知乎

未经允许,请勿转载

查看知乎原文(5 条讨论)

相关文档