前言
在大多数情况下,分词(Word Segmentation)是中文自然语言处理下游任务(情感分析、文本分类、翻译、阅读理解等)的第一个步骤,或者说文本预处理步骤。通常,分词也是新手入门中文NLP时接触的第一个任务。由于早期中文NLP研究的固有思路,我们或者说大部分人养成了碰见文本必先分词的“思维惯性”,却很少有人去探究为什么要分词,分词的必要性。这次碰巧看见香侬科技在ACL2019发表的论文“Is Word Segmentation Necessary for Deep Learning of Chinese Representations?”,其针对深度学习中的中文NLP是否需要分词进行了初步的探索。拜读之后,心血来潮,分享一下自己对中文分词必要性的看法,以及简单聊一下这篇论文的实验和结论。有兴趣的朋友也可以看看香侬官方对这篇论文的解读(https://zhuanlan.zhihu.com/p/65865071)。
背景
上面提到,早期中文NLP研究的固有思路,让我们产生了碰见文本必先分词的“迷思”。这里的固有思路,通常是我们接触到的各种相关教科书和网络上的各类教程传输给我们的。比如:
“由于词是最小的能够独立运用的语言单位,而很多孤立语和黏着语(如汉语、日语、越南语、藏语等)的文本不像西方屈折语的文本,词与词之间没有任何空格之类的显式标志指示词的边界,因此,自动分词问题就成了计算机处理孤立语和黏着语文本时面临的首要基础性工作,是诸多应用系统不可或缺的一个重要环节。”
《统计自然语言处理》(宗成庆 著)
“词是语言中最小的能独立运用的单位,利用计算机把汉语的一个句子、一篇文章、一部著作中的单词,逐一地切分出来,才有可能对汉语进行进一步的分析。因此,书面汉语的自动切词,是汉外机器翻译、书面汉语文献自动标引、书面汉语的自动检索、书面汉语的搜索引擎、书面汉语自然语言理解等研究工作的基础和前提。”
《自然语言处理简明教程》(冯志伟 著)
“在汉语的自然语言处理中,凡是涉及句法、语义的研究项目,都要以词为基本单位来进行。句法研究组词成句的规律,没有词就无所谓组词成句,因而也就无所谓句法。语义是语言中的概念与概念之间的关系,而词是表达概念的,没有词也就无所谓语义研究。因此,词是汉语语法和语义研究的中心问题,也是汉语自然语言处理的关键问题”
《自然语言处理简明教程》(冯志伟 著)
“迷思”不是指分词这件事对错,而是我们可能对分词的深层动机缺乏了解。从语言学角度而言,上面引用的三段话概括地解释了为何我们需要分词;从应用、实用或者工程角度而言,针对当时中文NLP技术的发展状况,我们的确也需要分词。
香侬科技这篇论文有个很强的限定语,“Deep Learning of Chinese Representations”,脱离深度学习这个场景,分词与否这个话题我们就很难讨论了。至少在技术层面,要从传统机器学习和深度学习两个角度来进行分析。
下面讨论分词在传统机器学习场景下和深度学习场景下的必要性。
讨论
分词在传统机器学习中的必要性
分词是个预处理过程,同时也是中文NLP中一项特别重要的特征工程。上面提到,词是语言中最小的能独立运用的单位,分词的过程其实就是人为地把先验知识添加到数据当中。通过分词,给模型减轻了捕获语义信息的压力。好的分词方法给模型带来的语义信息越多、越正确,而较差的方法可能还会引入一些噪音。模型最终的效果,是看分词给模型带来的语义信息多还是噪音多。
我分别用五种不同的分词工具(默认分词方法)对论文使用的Ifeng数据集(原始数据集有80W条,我只用了27W条用于训练,测试集相同)进行处理,然后用LR训练分类模型。输入特征采用TFIDF,过滤掉了document frequency低于100的token(不然词表太大了),没有做去除停用词,文本归一化,降维等其他操作。结果如下表所示,首先,不论选用何种分词方法,最后准确率都比基于字的高两个百分点左右;其次,不同的分词工具最后得到的结果上下浮动范围在千分之五之内,就单从这个实验而言并不能判断不同的分词方法(模型)会给该任务结果带来怎样的影响。至于背后的原因,我猜测,这些工具的分词模型主要还是基于新闻语料训练的,而Ifeng数据集也是新闻内容,得到近似的结果也在情理之中。因为只要各分词工具的训练语料保持标注标准的一致性,那么在同领域的文本上最终还是能得到不错的分词效果(也能为下游任务引入有价值的知识)。
我一开始的猜测是,在不同分词工具处理的语料上训练分类模型,准确率会有明显差异(最好有的结果比基于字的结果更差),那么就可以在一定程度上证实上述观点:模型最终的效果,是看分词给模型带来的语义信息多还是噪音多。实验前忽略了训练分词模型的语料和分类任务数据集同属新闻领域的事实,没有得到我想要的结果。后面补上京东和大众点评用户评论数据集上的对比实验(Ifeng训练数据集规模80W,JD 300W,Dianping 200W,一开始选Ifeng做实验就嫌其他语料太大,我的拖拉机实在带不动。。),或者有兴趣的朋友也可以自己试试。
不过最终还是初步证实了一个观点,在传统机器学习NLP中,分词还是很有必要的(前提是,分词模型和下游任务数据集是同领域的情况下;不同领域的效果还需要额外实验佐证)。
分词在深度学习中的必要性
香侬科技这篇论文从数据稀疏、未登录词和过拟合三个角度来说明基于字的模型为什么比基于词的好,详细的实验和讨论请参考论文。下面谈谈我认为这篇论文存在的小问题。
首先,按照论文作者叙述的本意和正常逻辑,论文表格8的数据是存在错误的,如下图。截止目前,arxiv论文预印版和官方解读均采用的这一数据。
其次,除了语言建模作者有说明用了其他分词工具做了对比,其他任务都没有直接说明,且在实验结果中没有表明不同分词工具给下游任务带来的影响。单用一个分词工具的结果来证实word-based模型不如char-based的,我个人认为实验还是不够comprehensive。下面两个链接对一些常见分词工具的效果进行了评测,可以发现,jieba分词F值和其他分词工具还是有很大的gap(论文默认是用jieba分词来测试word-based模型)。
中文分词工具评估(https://github.com/tiandiweizun/chinese-segmentation-evaluation)
干货 | 史上最全中文分词工具整理(https://zhuanlan.zhihu.com/p/42044315)
分词本身就是一个令人头疼的问题。首先,需要考虑不同分词工具给下游任务带来的影响,即哪款分词工具更适合目标任务;其次,找到了合适的工具,还需要考虑是否适用目标任务的语料领域,比如用通用分词工具去处理金融、法律文本,这时候要考虑word-based模型相对char-based模型是否存在一个明显的性能优势;现在预训练模型很流行(ULMFiT、GPT、ELMo、BERT),如果预训练模型是基于字的,我们会省很多事,至少这个标准很容易统一。如果是基于词的,我们还需要考虑预训练模型的分词工具和我们目标语料采用的分词工具不一致的问题(比如,上面实验结果显示,上面不同分词工具在Ifeng语料得到的词表规模是不同的,同时它们的切分标准也不一定统一;如果目标语料是属于比较专业的领域,这个问题会更严重)。
事实上,由于这篇论文提到的三个原因,加上团队小伙伴的影响(之前我对中文文本分词的执念还是相当大的),在用深度学习来解决NLP问题时,我已基本放弃了分词。因此,总体而言我还是很喜欢这篇论文,其进一步破除了我在中文分词上的“迷思”。但正如论文所说的(下图),我们还需要进一步评估分词的必要性,最好是能总结出一些经验法则,在什么情况下用word-based模型可能会更好(虽然这种情况发生的前提条件比较苛刻,比如手上有一个几乎能完美handle目标领域文本的分词器;加上预训练模型的广泛使用,word-based的市场可能会更小)。最后,在考虑放弃分词的时候,追本溯源,重新回顾一下分词这个任务的来源、定义、目的,也能加深我们对中文自然语言处理的理解。
结论
1. 在用传统机器学习方法处理中文NLP问题时:
训练分词模型的语料和目标任务的语料同属一个领域时,对文本进行分词,模型性能会有显著提升。
训练分词模型的语料和目标任务的语料不同属一个领域时,由于没有指标能较好地衡量两个领域语言用词差异,分词后的效果不能保证(到底是引入的语义信息多,还是噪音多),这时候请审慎使用分词工具。
2. 在用深度学习方法处理中文NLP问题时:由于神经网络模型能够很好地捕获语义特征,而且如果语料充足或者有预训练的模型,学习到的语义完全能够弥补甚至超出未分词语料所丢失的信息(分词还伴随着引入噪音),因此建议不分词,直接使用char-based模型。
以上只是个人针对中文NLP任务分词与否的浅略之见,欢迎大家分享自己在实践中的经验。
推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏