汉语多音字注音研究
准确率
计算准确率的方法:
某个数据集上的准确率 = 该数据集中所有标注正确的多音字数 / 数据集中含有的多音字总数
4.10 更新
之前的准确率计算有些问题,将 <unk>
和 <pad>
也算作多音字了,改正之后准确率变为 85% - 88%。
我们试着增加了 LSTM 的层数,发现在当前情况下,随着层数增加,准确率有所降低。
调研阶段
汉语多音字注音研究
在开始阶段,通过查阅资料,以下是对这个问题的一些认识。
- 多音字个数是有限的,要根据其在不同情况下的读音来建立规则,以后再遇到新词时就去匹配这些规则,无法匹配时就更新规则。应该是通过机器学习实现的。
- 对这个问题的研究经历了几个过程
-
- 早期是对多音字统计不同读音下的使用频率,以频率最高的读音来标注新词。准确率低
- 统计法。通过构建词库,建立规则来进行注音,是以词语为单位,准确率有所提升,但仍无法解决多音字前后的字一样但读音不同的情况。
- 规则法。语言学家建立规则,再输入到计算机,但无法指定一个很完备的规则集
- 论文中的解决方案
《中文文语转换系统中多音字问题研究》
[1]李清. 中文文—语转换系统中多音字问题研究[D].河北大学,2010.
-
- 对于低频多音字,即某个出现频率很低的多音字,它在绝大多数情况下都读一个音,只在少部分情况下读另一个音时,通过对每个字建立一个读音表,将相应词条和读音输入,注音时进行匹配即可。如果遇到没有收入的词语,就按高频音来注音。
- 对于中高频多音字又有三种情况
-
-
- 某个音只出现在特定的词语或者语境中,则通过分词之后进行匹配。
- 某个音覆盖率百分之99以上,采用和低频多音字一样的解决方法。
- 某个字低频读音和高频读音的频率差不多一样时,需要人工建立规则
-
《一种新的基于规则的多音字自动注音方法》[1]郑敏. 一种新的基于规则的多音字自动注音方法[A]. 中国中文信息学会.第二届全国学生计算语言学研讨会论文集[C].中国中文信息学会:中国中文信息学会,2004:6.
通过对多音字进行特征提取,总结出八条特征,对一些高频常见的多音字根据其不同音的使用场景利用总结出的特征建立规则。
在统计时首先对句子进行分词,得到含有多音字的词语,根据该字所在的词语以及上下文的特征去检索规则,得到读音。
《统计与规则相结合的多音字自动注音方法研究与实现》利用决策树对多音字中高频音和低频音相差不多的情况进行判别。
《汉语字音转换中的多层面多音字读音消歧》采用决策树和人工建立规则相结合的方法。
《基于规则及SVM权值训练的汉语多音字自动消歧研究》胡国平. 基于规则及SVM权值训练的汉语多音字自动消歧研究[A]. Northeastern University、Tsinghua University、Chinese Information Processing Society of China、Chinese Languages Computer Society, USA.Advances in Computation of Oriental Languages--Proceedings of the 20th International Conference on Computer Processing of Oriental Languages[C].Northeastern University、Tsinghua University、Chinese Information Processing Society of China、Chinese Languages Computer Society, USA:中国中文信息学会,2003:7.
《解决多音字字-音转换的一种统计学习方法》1]张子荣,初敏.解决多音字字-音转换的一种统计学习方法[J].中文信息学报,2002(03):39-45.
基于扩展的随机复杂度的随机决策列表方法
《基于最大熵模型的多音字消歧》[1]刘方舟. 基于最大熵模型的多音字消歧[A]. 中文信息学会语音信息专业委员会、中国声学学会语言、听觉和音乐声学分会、中国语言学会语音学分会.第九届全国人机语音通讯学术会议论文集[C].中文信息学会语音信息专业委员会、中国声学学会语言、听觉和音乐声学分会、中国语言学会语音学分会:清华信息科学与技术国家实验室(筹),2007:6.
使用最大熵增模型和决策树的方法。
**《A Comparative Study of Diverse Knowledge Sources and Smoothing
Techniques via Maximum Entropy for Polyphone Disambiguation in
Mandarin TTS Systems 》**
采用多种算法比较。最大熵增模型
《A Method of Part of Speech Based on the Algorithm of C4.5 for Polyphone》使用C4.5算法,一种产生决策树的算法
**《A Bi-directional LSTM Approach for Polyphone Disambiguation in Mandarin
Chinese》**
采用LSTM(长短期记忆),一种神经网络
数据统计
用到的数据见 Code 里的 data 目录。
pinyindata.txt
:汉字拼音库,使用《现代汉语词典》中的拼音数据,汉字数:11017,多音字个数:1217。
polyphones.txt
:将汉字拼音库中的多音字全部提取出来,存入该文件中统计了一下多音字的读音个数。
读音个数 | 多音字个数 |
2 | 1072 |
3 | 124 |
4 | 13 |
5 | 4 |
6 | 3 |
7 | 1 |
polyphones.json
:将所有多音字和读音存储成 JSON 文件
198801.txt
:人民日报 1988 年一月的新闻语料,一共有 19374 条新闻,包含 5593 个多音字,其中有 85 种不同的多音字。
198801output.txt
:存储每个多音字出现的次数,按出现频次从多到少排序
news.txt
:将所有包含多音字的新闻全部提取出来,存入该文件
phrase.txt
:带注音的中文短语,一共有 96809 条
poly_phrase.txt
:将所有含多音字的短语输出到该文件中,共有 47289 条含多音字的短语。每条短语前面的数字是多音字在短语中的位置(从 0 开始计算)。
对该文件中的所有句子按多音字出现次数的多少排序,并对每个句子中多音字的个数进行了统计。结果如下。
句子中包含的多音字个数 | 句子数量 |
1 | 35072 |
2 | 10201 |
3 | 1686 |
4 | 265 |
5 | 50 |
6 | 12 |
7 | 3 |
phrase_frequency.txt
:输出包含多音字的短语中所有多音字出现的次数,按出现次数从多到少排序。
phrase.csv
:将短语和读音转换成特定格式 (text, label)
,text 为句子,label 为读音,非多音字编码为'NA',多音字编码为其读音。
correct.csv
:标注正确的语句(只包含一句话中所有多音字均标注正确的句子)
wrong.csv
:标注错误的语句(一句话中只要有一个多音字标注错误,就输出到该文件中)
语料处理
主要是将语料划分为训练集、验证集与测试集,并将句子和读音做 tokenize,建立词典,设定 batchsize 与生成迭代器,使数据能送入模型进行训练。
在进行处理时使用了 torchtext 库,能方便的对文本进行处理,并且支持 CSV、tsv 等格式的读取。
最终生成的数据集:
train.csv
:训练集,有 29928 条短语,包含 30041 个多音字。
valid.csv
:验证集,有 8723 条短语,包含 12696 个多音字。
test.csv
:有 8638 条短语,包含 19198 个多音字。
模型搭建
目前想到用两种方法搭建模型。
两种方法模型大体一致,但在将 lstm 的输出喂进全连接层时的输入不一样。
说明:代码中的各种参数并不是最优的参数,只是一个示例。
按照多音字的读音的分类方法
这种方法将训练数据按照其中某个多音字的读音进行分类,如训练数据中含有多音字“都”的句子将分为以下两类:
- 句子中“都”的读音为
dū
的数据 - 句子中“都”的读音为
dōu
的数据
此方法最大的弊端就是需要对每个多音字单独训练一个模型并测试,另外当一句话中含有两个及以上的多音字时,该方法并不能完成所有多音字的注音。
仿照词性标注问题的分类方法
代码:code/PolyphoneDisambiguation/disambiguation_pos.py
这种方法仿照了词性标注的处理思路,将训练数据编码为如下格式:
('在古都西安', '都', ['NA', 'NA', 'dū', 'NA', 'NA'])
其中“NA”代表非多音字,多音字则使用读音来编码。
目前主要使用该方法进行注音,已将短语数据送入模型并进行训练,然后使用测试集计算准确率,将标注正确的语句和标注错误的语句输出到相应文件中。