前言
中文分词在汉语机器翻译系统中是一个关键部分,我最近深有感触。本博客旨在对中文分词算法进行初步研究,并对现存的中文分词工具进行多方面的对比(注:已发现优秀的轮子,这个部分就不做了)
1 问题发现
前阵子遇到了一个很奇怪的事情,自己的Transformer可以成功翻译“我不爱你”,“我喜欢你”,却总是把“我爱你”翻译错。一开始怀疑是训练数据不匹配、或者模型没有学到这句话的知识,当时并没有在意。
Please input a sentence(zh): 我喜欢你。
I like you .
Please input a sentence(zh): 我不爱你。
I don 't love you .
Please input a sentence(zh): 我爱你。
consider .
直到自己又实现并训练了基于LSTM的模型,发现依然无法翻译“我爱你”,才觉得这应该不是数据或模型的问题。偶然发现是分词这一步出错了。下面是我用jieba的分词情况:
In [1]: import jieba
In [2]: print(list(jieba.cut('我喜欢你。')))
['我', '喜欢', '你', '。']
In [3]: print(list(jieba.cut('我不爱你。')))
['我', '不', '爱', '你', '。']
In [4]: print(list(jieba.cut('我爱你。')))
['我爱你', '。']
罪魁祸首jieba分词把“我爱你”这句话分成了一整个词。由于源语言词表中只有 我、爱、喜欢、你 这样的词,而 我爱你 直接被当成一个UNK,所以模型才无法进行正确翻译。
2 分词算法
2.1 基于词典的方法
2.2 基于统计的方法
2.3 基于深度学习的方法
3 分词工具及对比
这个事情已经有人做过了,感谢:中文分词器分词效果评估对比