本篇文章记录了NLP中分词的常见方法。
概述
什么是分词
分词就是将句子、段落、文章这种长文本,分解为以字词为单位的数据结构,方便后续的处理分析工作。
为什么要分词
1.将复杂问题转化为数学问题
而 NLP 也是相同的思路,文本都是一些「非结构化数据」,我们需要先将这些数据转化为「结构化数据」,结构化数据就可以转化为数学问题了,而分词就是转化的第一步。
2.词是一个比较合适的粒度
词是表达完整含义的最小单位。
字的粒度太小,无法表达完整含义,比如”鼠“可以是”老鼠“,也可以是”鼠标“。
而句子的粒度太大,承载的信息量多,很难复用。比如”传统方法要分词,一个重要原因是传统方法对远距离依赖的建模能力较弱。”
3. 深度学习时代,部分任务中也可以「分字」
中英文分词的区别
区别1:分词方式不同,中文更难
英文有天然的空格作为分隔符,但是中文没有。所以如何切分是一个难点,再加上中文里一词多意的情况非常多,导致很容易出现歧义。下文中难点部分会详细说明。
区别2:英文单词有多种形态
英文单词存在丰富的变形变换。为了应对这些复杂的变换,英文NLP相比中文存在一些独特的处理步骤,我们称为词形还原(Lemmatization)和词干提取(Stemming)。中文则不需要
词性还原:does,done,doing,did 需要通过词性还原恢复成 do。
词干提取:cities,children,teeth 这些词,需要转换为 city,child,tooth”这些基本形态
区别3:中文分词需要考虑粒度问题
例如「中国科学技术大学」就有很多种分法:
- 中国科学技术大学
- 中国 \ 科学技术 \ 大学
- 中国 \ 科学 \ 技术 \ 大学
粒度越大,表达的意思就越准确,但是也会导致召回比较少。所以中文需要不同的场景和要求选择不同的粒度。这个在英文中是没有的。
中文分词的难点
难点 1:没有统一的标准
目前中文分词没有统一的标准,也没有公认的规范。不同的公司和组织各有各的方法和规则。
难点 2:歧义词如何切分
例如「兵乓球拍卖完了」就有2种分词方式表达了2种不同的含义:
- 乒乓球 \ 拍卖 \ 完了
- 乒乓 \ 球拍 \ 卖 \ 完了
难点 3:新词的识别
信息爆炸的时代,三天两头就会冒出来一堆新词,如何快速的识别出这些新词是一大难点。比如当年「蓝瘦香菇」大火,就需要快速识别。
如何分词
- 基于词典匹配
- 基于统计
- 基于深度学习
基于词典匹配
优点:速度快、成本低
缺点:适应性不强,不同领域效果差异大
前向最大匹配
先设定一个阈值max_len=5,则每次取5个,然后看5个里面与词典是否有匹配。
假设5个直接匹配到了,那么就直接分出来,如果都没匹配的,那么max_len依次递减,以此类推分出第一个词;分第二个词的时候max_len又从5开始分,同之前的步骤,以此类推实现分词结果。见图中具体过程即可:(注意1、2、3、4步骤顺序)
后向最大匹配
基于统计
优点:适应性较强
缺点:成本较高,速度较慢
这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。
CRT
CRF
HMM
参考:
https://www.bilibili.com/video/BV1ik4y167kr?spm_id_from=333.337.search-card.all.click
HMM模型的基本假设:
马尔科夫假设。第t 个隐状态(实体标签)只跟前一时刻的t − 1隐状态(实体标签)有关, 与除此之外的其他隐状态无关.
观测独立性假设。我们上面说过, HMM模型中观察状态只由由隐状态序列(实体标记)生成
HMM的三个变量:$\theta=A,B,\pi$
HMM的转移概率(transition probabilities): 隐状态i从t − 1时刻转向t时刻的概率
HMM的发射概率(emission probabilities): 隐状态生成观测结果的概率
HMM的初始隐状态概率: 初始时刻各种隐状态的概率
HMM的两类任务:
已知模型参数,预测z。
估计模型参数
下面介绍这两类任务的实现方法。
Inference问题
给定了参数和观察值,如何反推隐变量?
首先给出了一个最原始的想法,即罗列法:
维特比算法(Viterbi Algorithm)
在每一时刻, 计算当前时刻落在每种隐状态的最大概率, 并记录这个最大概率是从前一时刻哪一个隐状态转移过来的, 最后再从结尾回溯最大概率, 也就是最有可能的最优路径.
参数估计问题
知道观察变量和隐变量:complete case
只知道观察变量:incomplete case
Complete case
只需要统计即可:
Incomplete case (EM algorithm)
HMM模型和CRF模型的比较:
同:
都是概率图模型
均可序列标注
异:
首先,CRF是判别模型,假设x为数据点, y 为数据标记, 比如说逻辑回归属于典型的判别模型, 我们要计算P(y|x)并形成一条分类边界;而在HMM这种生成模型中, 我们计算的是P(x|y)), 而且要计算出所有y可取的类型, 并比较一下所有P(x|y=y_{i})的结果, 并取可以使P(x|y)最大的那个, 而得到预测结果.
HMM是概率有向图,CRF是概率无向图。
CRF比HMM更强大, 更广泛:HMM受限于相邻位置的2-gram状态转移和发射概率;而CRF的特征函数则更加灵活,其权重值可以为任何数,而HMM的概率值会被限制在0~1,并且有些概率和限定为1。
基于深度学习
优点:准确率高、适应性强
缺点:成本高,速度慢
例如有人员尝试使用双向LSTM+CRF实现分词器,其本质上是序列标注,所以有通用性,命名实体识别等都可以使用该模型,据报道其分词器字符准确率可高达97.5%。
常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。
分词工具
中文分词工具:
英文分词工具: