
为什么要分词?
说到分词,大部分人最容易想到的是中文分词。作为一种没有自然空格之分的语言,切分有助于计算机对句子进行索引,方便信息检索等。也就是说,减少搜索引擎的性能消耗。经常使用的汉字有5000多个,常用区有数十万个。如果在颠倒的索引中索引每个词,与每个词对应的拉链可能会很长。所以通常用词组而不是汉字来编制索引。此外,分词的一个更重要的功能是帮助计算机理解单词,在这个层面上,分词不管是语言,任何语言,计算机都与“理解”相关,首先要做的是先分词,然后消除一定程度的模糊性。因为知道电脑本身擅长的事情与计算是一致的。假设每个词都可以指一个意思。输入句子时,每个词相应意义的累积要比语法意义的累积弱。(因为单独积累单词意思时,词和词之间可能会有独立。)现在引入区分的目的是画出词和词之间的关系,使计算机更好地理解。
分词的难点在哪里?
简单地说,评价分词效果可以从三个层面来判断。也就是说,可以划分界限,划分碎片,对整个句子进行细分,来判断结果是否正确。划分界限是不是要在相邻的token(在中文分词中,token可以被认为是汉字,在英语中可以被认为是单词)之间截断。句子等级是指整个句子的分词结果是否完全正确。分段分词是两者之间的评估策略。1.分词结果段中需要修剪的片段(recall)是否被召回。2 .分词结果是否有错误的结果(precision)。接下来说明分词算法的两个重要考虑标准:新词识别和模糊性处理。
新词:召回方向的分词算法的问题主要是模糊现象和新词的出现。如果分词算法不能识别新词而不召回,最终可能会影响计算机对切分句子的理解。之前说过词对词的过程可以让电脑“假装”这个词的意思。例如,最近一个人的名字“史菊华”被分词算法切分后,计算机很难理解这个片段的意思,因此无法在机器翻译等应用中正确处理。
模糊性:分词算法需要解决片段模糊性,分词结果合理。汉字作为表示中文信息的载体,假设每个词/词所代表的信息有上限,各语言的总信息量接近,常用字数有限,因此,这些汉字之间需要有更多的组合形式才能形成单词,表达不同的意思。如果汉字可以同时成为两个词的一部分,那么当这两个词依次出现时,可能会包含歧义。目前模糊性主要分为两种。交叉型,即相邻片段之间有一些Token重复。例如,“长春市长春药店”、“长春市”、“市长/市场”、“长春”和“春药”都是交叉型歧义。这种存在于英语、“new York times square”、“new York times”和“times square”等所有语言的分词过程中。另一个模糊性是覆盖型。也就是说,token序列必须从不同的意思(如“他马上就来”和“他从马上下来”)中分词或结合。后一种情况下,如果除以“立即”,则“在言语等”的意思被“立即”的意思所覆盖。另外,分词算法在应用程序中也要有良好的性能,在引入统计学习算法时要考虑语言标记成本。随着时间的推移,语言也会随之变化,但不同领域的进化速度不同。因此,分词算法也需要与时俱进的优化。例如,在词典中添加更多词、更新语言模型(Language Model)、根据CRFs等判别式(Discriminative model)进行分词的一些方法中,需要不时更新人工标注语料,以使分词算法符合当前的语料处理。
分词算法是基础的研究方向,是很多研究人员奋斗的方向,产生了大量优秀的算法。简要介绍几种主流、工程上有特定应用的分词方法。
介绍细分的主流方法
在介绍分词方法之前,将从基于规则的分词方法和部分统计分词模型两个方面简要介绍现有的主流分词算法。
基于规则的分词方法
基于规则的分词方法主要表现为基于词典的匹配,如前向最大匹配(Forward Maximum Matching,FMM)、反向最大匹配、最小分词(最大限度地减少每个句子中截断的字数)等。
以正向最大匹配为例,基本思想是,对于待决文本,从左到右,尽可能匹配词典中最长的词。匹配的词是相应处理文本的分词片段。假设词典中有{seo,seo技术,中文,分词,算法}一词,那么“seo技术的中文分词算法”这句话的准确细分结果是“seo技术|的|中文|分词|算法”。
基于规则匹配的分词算法,缺点主要是(1)。不能很好地解决分词模糊性问题。上述三种方法都试图从不同角度解决问题,但对消除模糊性的效果不大。特别是,随着词典词的增加,词和词之间的交叉现象会加深,该方法的模糊性处理能力会相应减弱。(2)。这个方法不能识别新词。这样,在直线上挖到很多新词,并在词典中添加的好处和总体效果不是线性关系,词典会扩大,分词模糊性会更严重。
此方法简单快捷,因此也有将上述缺点的统计方法用于FMM的工作。这种方法主要利用贝叶斯(Na?Ve Bayes)、Mutual Information和t-test chi-2等测试工具可消除具有分词模糊性的相邻碎片。
统计分词模型
统计分词算法主要利用语言模型、标记数据等资源,根据分词假设建立模型,利用该资源优化参数,用模型代替规则完成分词。
语言模型,基于马尔可夫的分词方法
处理的每个token(t_i,在中文分词中可以被认为是汉字,在英文中可以被认为是单词等)构成观察序列,隐含着各种可能的分词片段。该方法的目的是观察序列,找到最有可能发生的隐式状态序列
其中每个状态status(s_i)都是词典词。整个分词过程是为了找到可行的分词结果。
使用马尔可夫假设达到maximum likelihood。
如果词典词有多种概率分布(利用语言模型估算、利用EM算法优化参数等),根据viterbi解码算法很容易得到分词结果。随着语言模型的广泛应用和多种学习算法的发展,该方法有着广泛的应用场景。
现在谈谈这个方法的缺点。
1.计算顺序
在计算概率时,根据马尔可夫假设当前状态只与以前的状态有关。在实际应用程序中,当前状态可能与上一个状态相关,可能与上一个状态相关,也可能与上一个状态无关(在特定阈值条件下是否存在关系等)。
2.在估计词典之间的概率分布时,EM作为常用的算法有自己的不足。
条件随机场模型(Conditional Random Fields)
CRFs是条件概率最大的组合,NLP技术领域主要用于文本标记,应用场景主要是分词(标记单词位置信息,单词构词)、词性标记(Pos-Tagging)、标记分词的词性(如名词、动词、助词)、命名实体识别(四重状态:词的开头(Begin)、词的中间(Middle)、词尾(End)、单独存在(Single)等分词过程是用一个观察序列的token表示的过程。对于输入序列
标记顺序如下
输入顺序中的条件概率:
其中,z是规范化函数,等于所有可能的标记序列条件概率之和。
“特征函数”(feature function),相应的权重
此要素函数用于在观测序列t下的当前计算阶段I执行状态序列
目标是找到能够达到最大值的标记序列。
如果有多种概率分布可用于计算,那么用viterbi算法就可以很容易地得到这个序列的标记。根据每个标记的状态(token)进行细分。
CRFs模型的中文在一些封闭的测试语料中达到了非常高的准确度,在工业应用中效果也可以圈出来。同时,在汉语分词中,CRF分词是以汉字为基础的构词法,无论这个“新词”是否出现在网络上,都能有效地识别出具有结构特征的新词。CRF有两个明显的不足:性能和代价。性能是指解码阶段消耗大量的计算量,作为监督学习,CRF模式教育需要大量的标记资料,网络语料的急剧增加和变化,CRF模式更新也需要更多的人力。如何有效地将CRF模型集成到工业分词应用中,以及如何引入语言模型来更新统计分词模型。
另外,CRF模型在中文分词方面取得了很好的成绩,可以直接移植到其他语言吗?语言特征和training语料之间有什么关系时,整个分词算法能正常工作?
介绍了各种分词模型的原理,并分析了应用方案。如果需要将两个词拆分在一起,假设这两个词在特定条件下分布很近,是用什么分词算法?
基于统计语言模型的无监督分词
介绍一种新的基于隐藏马尔可夫、Hidden 马尔可夫(HMM)的无监督分词算法(Query Segmentation Based on Eigen Space Similarity)。在介绍具体的算法之前,谈谈这个算法的假设。A B对于两个token,可以一起分享。也就是说,在特定条件下(即要划分句子的整个上下文),两个人的数据分布比较相似。如果能得到那个数据分布(vector),就能计算出两个vector之间的相似性。这种方法看起来有点像“Mutual Information”(多信息),但相互信息不考虑前面提到的特定条件,但也有针对MI引入Cosine of Point-Wise Mutual Information的工作。考虑到上下文信息,一个问题更棘手。判断两个token是否应该结合的阈值应该是多少?在某些操作中,[Generating query substitutions]阈值被设置为经验值。事实上,这样做可能不合理。通过多种方式,构建了这样分词的上下文环境,并将统计特征巧妙地投影到主特征空间(principal eigenspace)中。线性代数中,特征空间是矩阵中所有特征向量形成的空间,主特征空间是矩阵中主要特征向量形成的空间。与比较特征空间相比,基本特征空间可以复盖特征空间的大部分信息,支持相关应用程序,实现有效的降维、去噪、数据转换等。)可以计算相似性,并根据基本要素空间的维度进行分词。
算法过程[seo技术]
举例说明一下这个算法是如何工作的。如下图。
算法分析
该算法的关键点是主要特征空间维K的决定。从另一个角度来看,对于给定的待决字符串,如果事先知道分词的碎片数,则可以使用简单的统计战略(如MI)来更好地分词。
对于参数K的决定,给出了一个简单的判断方法。该分词算法根据数据分布将假设展开为分词段特征,并通过基本Token在一定的相关意义下通过统计分布进行细分。与基于EM/HMM等模型的无监督分词算法相比,一个明显的优势是充分考虑整个分词段的信息,而不是相邻token之间的统计数据。同时,该方法倾向于通过空间转换等手段有效地执行数据删除等战略,使数据分布更加现实。
与CRF等监督学习相比,输入为ngram语言模型,不需要手动显示数据,此方法可以识别新词,在互联网应用程序中非常有利。同时,对于不同语言不通的领域,只要提供足够可靠的语言模式,就能大大解决分词需求。
当然,这种方法(or未监督的分词方法)在分词准确度上与基于监督的模型相比依旧存在差异。以下部分说明了这个问题,并提供了绘制的分词系统。
如何建立一个良好的分词框架
简单地说
- 词典是必要的,有效的手段不断更新词典,这些词典根据应用要求,在分词体系中的位置和作用可能会有所不同。
- 需要强大的语言模式。原因是,如果A B的两个token要一起分享,那么“AB”这个组合就要在网络上大量出现。
- 还需要人工标记的数据。这是对文章的主观认识,因为资料不分布在语料上。
先说一下不能监督和监督的两种方法的差异。如果没有监督的效果能赶上监督方法,有监督方法就可以和道别。那么,未监管方法的分词效果瓶颈源自哪里呢?举一个例子来说明。很多用户遇到不认识的字时,通过以下手段搜索学习:“查询”* *头部加1吗?嗯?“,例如,“但头发加横是什么字”等,未监督的学习是根据数据的分布开始的,因此在这种卡西中,“头发加1”或“加1”会被截断。事实上,这种分词方式与人们的认识不同。这是一个极端的例子。数据分布和人们主观认识不一致有很多因素。
正在用监督的方法来解决问题。主要重点是考虑本地一致性。也就是说,所有工作都是基于已显示的数据进行的,标记语料库决定最终算法效果。未监管的方法从全球数据分布来看,在特定需求下,如果数据具有全球结构特征,未监管的模型也可以很好地解决。
在这里,有一个愿景,就是引入一些标记数据,改变数据的原始分布,最后优化分词效果。半监督学习(semi-supervised learning)的引入可以大大提高无监督分词的效果。引入无监督分词算法的原因是,该方法可以与现有的反毒学习算法相结合。
结合上面说的,说明认为好的分词体系应该是什么样子。
- 需要一本词典词典的来源有“固有名称挖掘”(NE mining)、“旧挖掘”(Phrase Extraction)等很多。同时,还有不同程度处理这些资源的模块,最后还提供了前向最大匹配(FMM)细分的词典。
- 使用FMM的原因是,该算法可以完全处理许多待处理语句。只有在FMM不能解决的情况下,才会引入统计分词算法。此时,需要trigger来负责这项工作,Ambiguity Detection模块,这个模块可以将一个句子分为两种形式,需要可以通过FMM处理的简单句子,可以用统计模型处理的复杂句子。对复杂的文章采取统计分词后,最终使两者的结果变得模糊。
- 统计模型的方法有很多种,这里当然要推荐文章中介绍的。该模块以ngram语言模型输入。统计分词算法的优化过程是引入标记数据,以更改ngram中令牌之间的分布。在此,建议使用metric learning方法直接更改frequencies matrix。分词后的bad case也可以恢复为标记数据。
在这个系统下,很好地解决了分词过程中存的一致性、模糊性处理、新词、可持续提高、可扩展性、性能等因素。
分词是自然语言处理的最底层工作,百度自然语言处理在汉语分词方面做了相当多的工作。