如何在jieba分词中加自定义词典_中文到底需要分词嘛?
本文是香侬科技在ACL 2019发表的论文Is Word Segmentation Necessary for Deep Learning of Chinese Representations? 的介绍,探讨中文分词在神经网络时代的必要性,得出了“字”的表现几乎总是优于“词”的表现。欢迎大家多多提问、交流~
本文Yuxian Meng,Xiaoya Li并列为第一作者。
文章链接:
https://arxiv.org/pdf/1905.05526.pdfarxiv.org
概述
长期以来,中文分词(Chinese Word Segmentation, CWS)在NLP的研究中一直受到广泛关注,无论在深度学习兴起之前,还是深度学习兴起以来,对CWS的研究都从未间断。尽管从形式上看中文的“字”是最小的音义结合体,但是在现代汉语中,“词”才具有表达完整语义的功能,而大部分的“词”都是又多个“字”组合而成。因此,中文分词成为了许多中文NLP任务的第一步。然而,随着深度学习的发展和计算机算力的提高,对许多中文NLP任务而言,中文分词的必要性似乎在逐渐下降。那么我们就会问,在基于深度学习神经网络框架下的NLP任务中,到底是“字”好还是“词”好?分词是否还有存在的必要?我们是只需要“字”,还是将“字”与“词”结合使用?其中的道理又是什么呢?在当下,这些问题都缺乏系统性的研究。
本文通过在四个中文NLP任务上的实验和分析,对以上问题得出了初步的结论:
- 在神经网络框架下进行中文NLP任务,“字”级别的表现几乎总是优于“词”级别的表现。
- 对大部分中文NLP任务而言,我们不需要进行额外分词(一些必须进行分词的任务除外)。
- 对部分任务而言,单用“字”可以达到最佳表现,加入“词”反而可能有负作用。
- 原因可以部分归结为“词”级别的数据稀疏问题、OOV(out-of-vocabulary)问题和过拟合问题。
我们希望可以通过我们的研究抛砖引玉,对未来有关中文分词及其必要性、最佳中文表示单元的研究提供借鉴和启发。
“词”级别单元的不足
尽管“词”级别的模型在很多任务上得到广泛应用,但是“词”级别单元有着以下显著不足:
- 首先,词数据稀疏问题不可避免地导致过拟合,而且大量的OOV限制了模型的学习能力。根据Zipf定律,大多数中文词的出现频率都非常小,在数据集中的占比非常有限,这使得模型不能充分习得数据中的语法、语义知识。比如,在CTB数据集中,在经过Jieba分词后,不同的词有50266个,其中24458个词仅出现一次,但它们仅占整个数据集的4.0%;有38889个词出现不多于四次,但是它们仅占数据集的10.1%。这说明,词级别的数据是非常稀疏的,而这容易导致过拟合。另一方面,过多的词会增加大量的OOV,这又限制了模型的学习能力。
- 分词方法不统一与分词效果欠佳。实际上,中文分词在语言学上也是一件困难的事情,存在着不同的分词标准。对于NLP上的中文分词而言,不同的数据集也有不同的分词标准。比如,对同一句话“姚明进入总决赛”,CTB数据集将其分为“姚明 进入 总决赛”,而PKU数据集将其分为“姚 明 进入 总 决赛”,而根据我们的知识,“姚明”显然是不能分开的。于是,这种错误的分词可能会对下游的任务产生错误的引导,从而影响模型的效果。
- 分词所带来的收益尚未明确。尽管从直觉上看,“词”所携带的语义信息是比“字”更丰富的,但是这只是站在人的角度,那么对于神经网络而言又如何呢。我们目前还不清楚对计算机而言,词是否就一定有利于提高表现。
基于以上几点,我们将在四个中文NLP任务上探究“词”级别和“字”级别的表现。
实验
本节在四个中文NLP任务(语言建模、机器翻译、文本分类和句子匹配)上分别对“词”级别和“字”级别的模型进行实验。
语言建模(Language Modeling)
我们首先在语言建模上进行实验。我们使用CTB6数据集,按照标准的8-1-1进行数据集划分。对于词,我们使用Jieba进行分词。模型是基础的LSTM模型,对同一个模型,我们对学习率、dropout和batch size进行了grid search,使得ppl达到最优。
实验结果如下表:
从表中可以看到,在同维度下(512d与2048d),字级别的模型显著优于词级别的模型。而且在维度为2048的时候,ppl呈现巨大差距。
此外,我们还对“字”+“词”的混合模型(hybrid)进行了实验。对于混合模型,我们不仅使用了“词”表示,还对每个词内部的“字”表示,通过CNN得到一个综合的“字”表示,然后把这两者组合起来。表中的“char only”表示我们只使用后者。
可以看到,“char only”的模型优于其他带有“词”表示的模型,而“word+char”的模型都优于单个“词”模型。这表明了“字”级别的模型已经编码了语言建模任务所需要的语言信息,额外增加“词”表示反而会损害表现。
机器翻译(Machine Translation)
对于MT,我们使用标准的中英互译的设置。我们在LDC语料库中选取了1.25M个句子,在NIST2002上进行验证,在NIST2003/2004/2005/2006/2008上进行测评。模型使用标准的seq2seq+attention,同时,我们也列出了Mixed RNN、Bi-Tree-LSTM和PKI模型的结果作为比较。此外,我们还使用了(Ma et al. 2018)中的BOW方法。词和字的表示维度都设置为512。具体的参数及其他设置详见论文。
实验结果如下:
可以看到,在中->英翻译中,简单的seq2seq+attention模型,“字”级别已经显著超过“词”级别,平均有0.83的BLEU值的提升。再加上(Ma et al. 2018)的BOW方法,“字”级别的模型也比“词”级别的模型平均高0.63,而且也是其中的最好结果。
在英->翻译中,“字”模型比“词”模型有更大的提升,平均达到3.13。我们认为这是因为:
- 在中->英翻译中,“字”和“词”的区别仅体现在编码端;而在英->中翻译中,在编码端和解码端都有表现。
- 在英->中翻译中,解码端的UNK对于词影响更大。
为此,我们在英->中翻译的解码端使用了BPE方法,在seq2seq+att中得到了41.44,在seq2seq+att+bow中得到了44.35的得分,显著超过“词”级别模型,但依旧比“字”级别模型较低。
句子匹配(Sentence Matching)
对句子匹配任务,我们使用BQ和LCQMC两个数据集。这两个数据集都是给定一对句子,需要我们去判断它们在某些方面的相似性(两分类,相同或不相同)。BQ是需要去判断语义等价,LCQMC是需要去判断意图等价。这两个数据集都非常适合去检验模型的语义捕捉能力。
我们使用当前在这两个数据集上的SOTA模型:BiMPM,参数设置保持不变,即200维的字及词表示。
实验结果如下:
可以看到,“字”级别的模型在验证集和测试集上都显著优于“词”级别模型。这表明,“字”级别的模型更能捕捉单元之间的语义联系。
文本分类(Text Classification)
对于文本分类,我们使用下面的数据集(Zhang and LeCun 2017):
- ChinaNews:中文新闻文章,七分类。
- Ifeng:中文新闻文章的第一段,五分类。
- JD_full:京东上的商品点评,五分类。
- JD_binary:京东上的商品点评,二分类,是在JD_full中,将1星和2星归为负类,将4星和5星归为正类,忽略3星。
- Dianping:大众点评的评价,五分类,作为二分类时,将1星、2星和3星归为负类,将4星和5星归为正类。
我们使用BiLSTM模型,结果如下:
可以看到,只有在Chinanews数据集上,“词”级别模型才略高于“字”级别模型,在其他数据集上都是“字”优于“词”。
额外地,我们还在Dianping和JD两个数据集上进行了数据集迁移(Domain Adaptation)实验。我们首先在Dianping上训练,然后在JD_binary上测试;然后反过来检验。结果如下:
可以看到,在两个方向上都是“字”优于“词”,而且OOV也有显著优势。
分析
在本节中,我们将从数据稀疏、OOV和过拟合三个方面去分析“字”优于“词”的原因。
数据稀疏
由于空间限制,我们不可能把所有出现的字/词都纳入词典,常见的方法是设置一个“频率界限”,低于这个界限的都设置为一个特殊的UNK标记。下图是不同的频率界限和词典大小、模型表现在“字”级别和“词”级别上的曲线图:
可以看到,当bar=0的时候,两种模型都表现得很差。而对于“字”级别模型,提高bar对表现影响不大,当bar=5时表现最佳;对于“词”级别模型,提高bar可以显著提升表现。这说明,为了充分学习语言信息,模型必须对词典中的单元有充分的“接触”(或者说足够多的数据量),而对于“词”级别模型而言,这点更加难以满足。
OOV问题
另一方面,“词”模型也有更多的OOV。如果是因为OOV问题导致的“词”模型效果欠佳,那么我们期望可以通过减少OOV来缩小与“字”模型的差距。但是正如上面所讲的,减少OOV就意味着降低频率界限,这样就会加剧数据稀疏问题。因此我们使用另一种方法:对不同的词频率界限,我们在数据集(包括验证机和测试集)中除去那些包含OOV词的句子。如下图所示:
显然,“字”和“词”的差距随着bar的增加在逐渐缩小,“字”模型表现下降,而“词”模型表现上升。这说明, 对于“字”模型而言,OOV不是一个突出的问题,缩小数据集会导致效果下降;对于“词”模型,OOV的确会严重阻碍模型的表现,减少数据集中的OOV有利于效果提升。这启示我们未来的工作可以考虑如何解决OOV上。
过拟合
数据稀疏问题使得模型参数增多,从而更容易过拟合。我们在BQ上进行实验,发现对于“词”模型,dropout为0.5时效果最佳,而对“字”模型而言,dropout为0.3时效果最佳。这说明过拟合在“词”模型上更容易发生。另一方面,尽管我们设置了更大的dropout,但“词”模型仍然不及“字”模型,这表明单纯的dropout不能解决过拟合问题。
可视化
我们在BQ数据集中选取句对“利息费用是多少”和“下一个月还款要扣多少利息”并画出其heatmap:
可以看到,对于“词”模型而言,“利息费用”不能和“利息”匹配,而“字”模型可以做到。
小结
在本文中,我们通过四个中文NLP任务实验,验证了在效果上“字”级别模型普遍优于“词”级别模型。通过分析,我们认为“词”级别模型的欠佳表现可以归结为数据稀疏、OOV问题、过拟合与数据集迁移能力缺乏等原因。我们希望通过本文,可以启发未来更多更细致的关于中文分词、最佳中文表示单元的研究。
标题:Is Word Segmentation Necessary for Deep Learning of Chinese Representations?
作者:Yuxian Meng, Xiaoya Li, Xiaofei Sun, Qinghong Han, Arianna Yuan, and Jiwei Li
了解更多NLP干货、前沿研究请关注知乎香侬慧语科技及微信公众号香侬科技。
如何在jieba分词中加自定义词典_中文到底需要分词嘛?相关推荐
- 如何在jieba分词中加自定义词典_R-数据挖掘 | jiebaR 分词
一.jiebaR主要函数 1.worker():加载jiebaR库的分词引擎 worker(type = "mix", dict = DICTPATH, hmm = HMMPATH ...
- 如何在jieba分词中加自定义词典_常见中文分词包比较
1 jieba jieba.cut 方法接受三个输入参数: 需要分词的字符串:cut_all 参数用来控制是否采用全模式:HMM 参数用来控制是否使用 HMM 模型 jieba.cut_for_sea ...
- 如何在jieba分词中加自定义词典_Pyspark Word2Vec + jieba 训练词向量流程
摘要:用商品描述为语料库训练商品词向量为例,分享一下用pyspark自带word2vec+jieba分词训练词向量的流程. 工具:python,pyspark,jieba,pandas,numpy 数 ...
- 如何在jieba分词中加自定义词典_Python实践129-jieba分词和pkuseg分词
jieba分词 jieba是非常有名的Python中文分词组件 jieba分词的特点是:支持3种分词模式:精确模式.全模式.搜索引擎模式.支持繁体分词.支持自定义词典. 安装: pip install ...
- jieba使用自定义词典_如何在Word 2013中使用自定义词典
jieba使用自定义词典 If you have the option on for checking spelling as you type in Word 2013, you can easil ...
- 如何在Angular Material中制作自定义主题
by Charlee Li 通过李李 如何在Angular Material中制作自定义主题 (How to make a custom theme in Angular Material) Angu ...
- 微软word开机自启动_如何在Microsoft Word中创建自定义封面
微软word开机自启动 A great cover page draws in readers. If you use Microsoft Word, you're in luck, because ...
- android 浏览器打开本地html文件,如何在Android浏览器中加载本地HTML文件
我试图在设备浏览器中加载本地html文件.我尝试过使用WebView,但它不适用于所有设备.如何在Android浏览器中加载本地HTML文件 //WebView method that didnt w ...
- Luminar Neo 教程,如何在 Luminar Neo 中共享自定义预设?
欢迎观看 Luminar Neo 中文版教程,小编带大家学习 Luminar Neo 的基本工具和使用技巧,了解如何在 Luminar Neo 中创建预设. 您制作的任何Luminar Neo预设都可 ...
最新文章
- 兼容超大图片的处理_动态图适用性调研与兼容性方案
- 2018.3.6 11周1次课
- 计算几个数相加和为16
- gitlab 更新文件_GitLab任意文件读取漏洞公告
- 40款用于简洁网页设计的光滑英文字体【下】
- 【生活乐园】深圳技能培训补贴申请流程
- 微信企业号第三方应用开发[二]——创建应用
- [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...
- php 持久化对象,php-对类持久化的引用
- 服务器哪个位置插网线,服务器网线接线图
- 信念就是一种观念对不对_思路决定出路 观念决定方向 性格决定命运 要改变命运 先确立信念...
- TQ2440之内核3.15.6移植
- iOS 299美元企业账号申请流程及注意事项
- 时间序列分类算法之时间序列森林(TSF)
- WSL Ubuntu 20.04 LTS 升级 22.04 LTS
- iOS中CFUUIDRef,CFUUIDCreate声称唯一字符串
- 如何在IIS中配置https
- STM32开源代码——光敏传感器
- SCCB协议学习笔记
- 梦想加:联合办公智能化之路