毕业设计
毕业设计-汉语多音字注音研究
准确率
计算准确率的方法:
某个数据集上的准确率 = 该数据集中所有标注正确的多音字数 / 数据集中含有的多音字总数
4.10更新
之前的准确率计算有些问题,将<unk>
和<pad>
也算作多音字了,改正之后准确率变为85% - 88%。
我们试着增加了LSTM的层数,发现在当前情况下,随着层数增加,准确率有所降低。
调研阶段
查了一些国内外的论文,总结了一下其中用到的方法
见《问题认识》
数据统计
用到的数据见Code里的data目录。
pinyindata.txt
:汉字拼音库,使用《现代汉语词典》中的拼音数据,汉字数:11017,多音字个数:1217,来自pinyin-data
polyphones.txt
:将汉字拼音库中的多音字全部提取出来,存入该文件中
统计了一下多音字的读音个数。
读音个数 |
多音字个数 |
2 |
1072 |
3 |
124 |
4 |
13 |
5 |
4 |
6 |
3 |
7 |
1 |
polyphones.json
:将所有多音字和读音存储成json文件
198801.txt
:人民日报1988年一月的新闻语料,一共有19374条新闻,包含5593个多音字,其中有85种不同的多音字,来自pkuopendata
198801output.txt
:存储每个多音字出现的次数,按出现频次从多到少排序
news.txt
:将所有包含多音字的新闻全部提取出来,存入该文件
phrase.txt
:带注音的中文短语,一共有96809条,来自ChineseTone
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”代表非多音字,多音字则使用读音来编码。
目前主要使用该方法进行注音,已将短语数据送入模型并进行训练,然后使用测试集计算准确率,将标注正确的语句和标注错误的语句输出到相应文件中。
毕业设计
毕业设计-汉语多音字注音研究
准确率
计算准确率的方法:
4.10更新
之前的准确率计算有些问题,将
<unk>
和<pad>
也算作多音字了,改正之后准确率变为85% - 88%。我们试着增加了LSTM的层数,发现在当前情况下,随着层数增加,准确率有所降低。
调研阶段
查了一些国内外的论文,总结了一下其中用到的方法
见《问题认识》
数据统计
用到的数据见Code里的data目录。
pinyindata.txt
:汉字拼音库,使用《现代汉语词典》中的拼音数据,汉字数:11017,多音字个数:1217,来自pinyin-datapolyphones.txt
:将汉字拼音库中的多音字全部提取出来,存入该文件中统计了一下多音字的读音个数。
polyphones.json
:将所有多音字和读音存储成json文件198801.txt
:人民日报1988年一月的新闻语料,一共有19374条新闻,包含5593个多音字,其中有85种不同的多音字,来自pkuopendata198801output.txt
:存储每个多音字出现的次数,按出现频次从多到少排序news.txt
:将所有包含多音字的新闻全部提取出来,存入该文件phrase.txt
:带注音的中文短语,一共有96809条,来自ChineseTonepoly_phrase.txt
:将所有含多音字的短语输出到该文件中,共有47289条含多音字的短语。每条短语前面的数字是多音字在短语中的位置(从0开始计算)。对该文件中的所有句子按多音字出现次数的多少排序,并对每个句子中多音字的个数进行了统计。结果如下。
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”代表非多音字,多音字则使用读音来编码。
目前主要使用该方法进行注音,已将短语数据送入模型并进行训练,然后使用测试集计算准确率,将标注正确的语句和标注错误的语句输出到相应文件中。