中文分词_简单有效的多标准中文分词

本文介绍了一种通过联合多个不同标准的语料库,使用简洁方法训练单一模型并输出多标准分词的方案。通过迁移学习,模型在10个语料库上的表现优于单独训练,且参数共享,复杂度稳定。实验结果显示在SIGHAN数据集上性能提升明显,适用于资源有限的团队。
摘要由CSDN通过智能技术生成
本文介绍一种简洁优雅的多标准中文分词方案,可联合多个不同标准的语料库训练单个模型,同时输出多标准的分词结果。通过不同语料库之间的迁移学习提升模型的性能,在 10 个语料库上的联合试验结果优于绝大部分单独训练的模型。模型参数和超参数全部共享,复杂度不随语料库种类增长。

(论文:https://arxiv.org/pdf/1712.02856.pdf  

代码和语料:https://github.com/hankcs/multi-criteria-cws ) 自然语言处理,特别是中文处理中,语料库往往珍稀且珍贵。具体到中文分词,也是如此。为了做出一个实用的系统,不光需要高效的算法,大规模语料库也必不可少。然而对于缺乏经费的研究团队和个人,却往往只能得到sighan2005 等屈指可数的几个小型语料库。即便如此,这些语料库的标注规范还互不兼容,无法混合起来训练(我们试验验证了这一点):

2e6ff3acb95b826ab9b79e09c7b7e7ee.png

比如 PKU 的最大特点就是姓名拆分为“姓”+“名”,MSR 的标志则是命名实体构成大量长单词,而港台地区的语言习惯本来就与大陆不同。这些差异导致无法简单合并各方语料形成一个更大量级的语料库,只能在某一个语料库上训练,浪费了其他标注数据。 已经有工作开始研究如何利用多方语料库来联合学习中文分词,比如 Chen 20171 精心设计的对抗神经网络,针对每个语料库提取分词标准相关或无关的特征。然而该工作并没有达到前沿的准确率,甚至联合训练的成绩还比不上以前单独训练的分数,无法体现联合学习的本意与优势。 事实上,这些标注风格迥异的分词语料像极了机器翻译中的多国语言:表达类似的意思,却采用了不同的方式。以前的多语种互译系统也是需要针对每个语种 pair 设计一对 encoder-decoder:

775de01226e06f2303b3bd43930cf8fd.png

(图片来源:斯坦福大学 CS224n 讲义) 对 n 种语言来讲,就需要 n x (n-1) 对 encoder-decoder。 类似地,针对每个分词语料库设计网络层的话,对 n 种分词标准,就需要n个私有层。这样的系统臃肿不堪,过度复杂,也无法应对 Zero-Shot Translation 问题(缺乏某两个语言之间的平行语料)。 谷歌的解决方案说来简单,却不失优雅。聪明之处在于不修改网络架构,而是在输入数据上做文章。只需在输入平行语料 pair 中人工加入目标语种的标识符,就可以把所有语种的平行语料混合在一起训练了:

ebc0684de74c40feb504b9f7d48ccc97.png

(图片来源:斯坦福大学 CS224n 讲义) 这的确是长期跟工业生产线打交道的人才能想出来的实用方法。 受谷歌的多语种翻译系统启发,我们发现只需在句子首尾添加一对标识符,即可平滑无缝地将多标准语料库混合起来训练。具体做法是用一对闭合的 将每个句子包裹起来:

9519cde134dd0a64009addcb47497a5d.png

接下来就可以通过大家熟悉的 Bi-LSTM-CRF 等序列标注模型联合训练了。在具体联合训练中,将这两个人工标识符视作普通字符即可,也不必人工区分句子的来源。这两个人工标识符会提示 RNN 这个句子属于哪种分词标准,使其为每个字符生成的 contexual representation 都受到该分词标准的影响。 在测试的时候,这两个人工标识符起到指定所需分词标准的作用。当然,公平起见标识符并不计入准确率的计算。

代码

连同语料库一起开源在 GitHub 上:https://github.com/hankcs/multi-criteria-cws 。 调用脚本只需一两句话,请参考 GitHub 上的说明。 更多细节,请参考论文。

结果

我们在标准的 sighan2005 和 sighan2008 上做了实验,在没有针对性调参的情况下依然取得了更高的成绩(当时设备条件简陋,所以在所有数据集上都用了同一套超参数)。所有分值都通过了官方评测脚本的验算。

sighan2005

下图的 baseline 是在各个语料库上单独训练的结果,+naive 是合并语料却不加标识符的结果,+multi 是我们提出的联合训练方案的结果。 a34a36730134bac26a6cbedf22409f1f.png 我们使用的特征是极小的,仅仅是字符和 bigram。如果像最近流行的做法那样加入 12 个 ngram、词典特征(word embedding),可能还会有进一步提升。但我们的论文中心是一个简单的多标准分词方案,主打精简高效,并非追求高分胜过效率,所以没有采用这些特征工程的手段。

sighan2008

我们也在标准的 sighan2008 上做了相同的试验,结果是: a747c8a28a7d2b8ec2ecf6ee2451500b.png 值得一提的是,我们并没有针对 sighan2005 和 sighan2008 分别调参,而是放弃调参、在所有数据集上沿用了 PKU 的超参数。 这是由于我们简陋的设备条件限制;欢迎计算力充裕的朋友自行调参,或许能有更好的结果。

10in1

由于 sighan2008 语料库是收费的,难以获取,没有授权的情况下也无法二次发布。同时我们不希望收费语料库成为阻碍小团队与个人研究者的壁垒,所以我们在10 个公开的语料库上做了额外的试验。 这10个语料库分别是来自 sighan2005 的4份语料库以及 e9ab9452ae20b00a55300f7f098bb416.png 语料库的授权信息如下(如有错误,欢迎反馈): 15c3bc96f3d77dc834c4a4333ee7ae8a.png 虽然部分语料库不常见于文献,但它们所属领域不同(新闻、微博、小说、港台)、数据规模迥异,恰好可以用来检验多标准分词模型的泛用性。我们的测试结果是: 3d6c1486850d27232b1ef039c507f73c.png (备注:此处与 Chen 2017 无法构成直接比较) 由于RNN训练很慢,为了方便复现结果,我们提供包含随机数在内的命令行:

./script/train.sh joint-10in1 --dynet-seed 10364 --python-seed 840868838938890892

除非依赖类库版本变迁,否则应该能够保证复现我们的结果。

我们还考察了这些人工标识符所起的作用,将它们的embedding通过t-SNE可视化出来后,发现几乎没有显著的相似性:

2a6a052e6b988e3edf6eb3d2a08a0cfd.png

它们似乎起的作用都不相同。

结论

这是一种简单的多标注中文分词解决方案,可以在不增加模型复杂度的情况下联合多个语料库训练单个模型。该方案虽然简单,但的确带来了显著的性能提升(特别是对于小数据集如WTB)。同时我们也注意到特别大的数据集受益很小或无法从中受益(MSR),留作未来研究。我们希望该方法成为多标准中文分词的一个 baseline,或生产系统中的一个物美价廉的拓展。 这是我的第一篇 NLP 论文,肯定有不少错误,欢迎指出。任何语法、拼写、行文上的错误和建议,欢迎留言,我会及时更正。谢谢!

鸣谢

  • 感谢在试验器材不足时伸出援手的朋友们,以及对论文和试验施以援手的同学!

  • 感谢那些慷慨地公开了标注语料库的老师与研究者们,这对没有研究经费的小团队而言无疑是雪中送炭!

  • Bi-LSTM-CRF 模型的实现参考了 rguthrie3 的 Dynet1.x 版本。

References

  1. X. Chen, Z. Shi, X. Qiu, and X. Huang, “Adversarial Multi-Criteria Learning for Chinese Word Segmentation.,” vol. 1704, p. arXiv:1704.07556, 2017. ↑

  2. William Yang Wang, Lingpeng Kong, Kathryn Mazaitis, and William W Cohen. 2014. Dependency Parsing for Weibo - An Efficient Probabilistic Logic Programming Approach. EMNLP . ↑

  3. Meishan Zhang, Yue Zhang, Wanxiang Che, and Ting Liu. 2014. Type-Supervised Domain Adaptation for Joint Segmentation and POS-Tagging. EACL . ↑

45933be671cd8347b8f47a67afa4e8ae.png 原文链接: http://www.hankcs.com/nlp/segment/multi-criteria-cws.html

自然语言处理入门指南:

b18f7f1d8330aef83c0b818d7e6e106c.png Java 与 Python 双实现

助你零起点上手自然语言处理

50be3d242a923dd0139a4c3f577cca08.png

(扫一扫,抢先拥有)

本书作者是自然语言处理类库 HanLP 作者何晗。截至 2019 年 10 月初,该项的 GitHub Star 数已达 15 K,超过了宾夕法尼亚大学的 NLTK、斯坦福大学的 CoreNLP、哈尔滨工业大学的 LTP。作者汇集多年经验,从基本概念出发,逐步介绍中文分词、词性标注、命名实体识别、信息抽取、文本聚类、文本分类、句法分析这几个热门问题的算法原理与工程实现。书中通过对多种算法的讲解,比较了它们的优缺点和适用场景,同时详细演示生产级成熟代码,助你真正将自然语言处理应用在生产环境中。

本文由作者原创授权 AINLP 首发于公众号平台,图灵教育授权转载。 8a6ff1c41fdafbd08fde625b5113a98f.png

☟ 更多深度学习好书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值