【转载】日语分词器的介绍与比较

【转载】日语分词器的介绍与比较

Dec 29, 2023 ·
9 分钟阅读

【编者按】此文转载自 https://avnpc.com/。由于原网站链接已经失效,但此文内容非常有价值,故本博客对此文及其相关链接全文转载。本文著作权由 AlloVince 所有。

对于搜索引擎来说,分词器的质量是对搜索结果影响最大的一个环节,日语分词(形態素解析)经过多年的发展也有了一些比较成熟的分词系统,下面介绍并比较目前主流的开源日语分词系统

日语分词词典

在介绍分词器之前,有必要先介绍词典,因为词典是分词的基础,词典的质量直接决定了分词器的质量,而分词系统内部采用哪个词典,也是对分词器效果评估的重要参考。

说到日文词典,可能首先想到是知名的商业词典,如「広辞苑」、「大辞林」等,然而由于商业词典等存在版权和授权问题,一般都无法用于开源项目。其次这类商业词典一般以词义解释为主,而对于分词来说,词汇的释义并不是最重要的,而是词性、词根等,所以也并不是所有的商业词典都适用于分词。

因此开源项目一般都采用具备开源许可证的免费词典,目前使用比较多的有:

可以通过这个网页比较几个日语分词词典的差异

在对日语分词词典有了一定了解后,下面逐一介绍日语分词器

MeCab

MeCab 是京都大学信息专业和日本电信电话株式会社通讯研究所共同研究的项目,模型基于 CRF(条件随机场) ,基于 C++实现,主要作者是「工藤 拓」,是日本自然语言研究领域大拿,就职于 Google 负责日语输入法相关项目。

MeCab 主要特点有:

MeCab 无论在学术方面,还是工程方面,都是非常优秀的,可以看到其他很多日语分词相关的项目,或多或少都受到了 MeCab 的影响或使用了 MeCab 的算法、词典等。

Kuromoji

Kuromoji 由位于东京的 Atilika 公司开发,基于 Java 实现。目前已经捐赠给了 Apache 软件基金会,并内置在 Lucene 和 Solr 中作为默认的日文分词器。

Kuromoji 基本支持前文提到的所有词典,如果未指定的话,默认使用 ipadic。

Kuromoji 的分词算法基于 Viterbi Algorithm,因此可以看做是基于 HMM (隐马尔科夫模型) 的分词。

由于 Atilika 是一个纯商业公司,因此 Kuromoji 也更偏向作为日语分词的工程实现,作为 Java 开源项目,与主流的 Java 搜索项目如 Lucene,Elastic 有很好的匹配,工程方面比较规范,容易上手。而在学术方面的贡献就比较少了。

Juman++

JumanJuman++ 都是京都大学信息专业在 NLP 方面的研究成果,分词模型使用了 RNNLM(递归神经网络语言模型),即采用了深度学习技术。开发采用 C++ 实现,Github 页面也给出了已经训练好的模型。

Juman 除了采用自己整理的词典外,还引入了来自 Wikipedia 的词汇。 Juman 的输出除了标准的分词结果外,还可以输出词汇的分类,从而可以对句子做更好的标签和归类。

不过由于文档较少,想要使用 Juman 训练自己的模型或者更换自己的词典还是比较困难的,整体是一个比较偏学术的项目。

KyTea

KyTea 是由卡内基·梅隆大学的 Graham Neubig 主导研究的项目,实现语言是 C++, 算法方面融合了 SVM 和逻辑回归等多个模型,默认使用的词典是 UniDic。

作者的方向偏学术,因此 KyTea 更多也只是作为研究成果的展示,版本早已停止更新,实际应用的项目也较少。

Sudachi

Sudachi 由 Works Applications 公司开发,和 Kuromoji 非常类似,都是 Java 实现的商业开源项目,对比 Kuromoji, Sudachi 可以调整的参数更细致一些,默认词典同时包括了 UniDic 和 NEologd,算法使用的应该是 Lattice LSTM。

项目开源仅 2 年,更新维护比较勤快,官方提供了 Elasticsearch 插件,对开发者比较友好。

nagisa

nagisa 是 NTT DOCOMO 的「池田 大志」 个人开发的基于 RNN 的项目,训练好的模型可以直接使用 pip 安装后使用,不过由于是 Python 开发,运行效率上就远远比不了上述的 C++项目了。

nagisa 整体代码较少,并给出了完整的训练代码和语料库,如果是以学习日语 NLP 为目的的话,是一个不错的选择。

其他

日语分词器的横向比较

将以上所有介绍的日语分词器做一个横向比较,可以根据实际需要自行选择。

| | 算法/模型 | 实现语言 | 词典 | 处理速度 | ES 插件 | Lisence |
|—|—|—|—|—|—|—|—|
| MeCab | CRF | C++ | 可选 | 最高 | | GPL/LGPL/BSD |
| Kuromoji | Viterbi | Java | 可选, 默认 ipadic | 中 | 内置 | Apache License v2.0 | | Juman++ | RNNLM | C++ | 自制 | 高 | 无 | Apache License v2.0 | | KyTea | SVM 等 | C++ | UniDic | 中 | | Apache License v2.0 | | Sudachi | Lattice LSTM | Java | UniDic + NEologd | 中 | | Apache License v2.0 | | nagisa | Bi-LSTM | Python | ipadic | 低 | 无 | MIT |

References

编辑于 Aug 08