0%

分词

本篇文章记录了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:新词的识别

信息爆炸的时代,三天两头就会冒出来一堆新词,如何快速的识别出这些新词是一大难点。比如当年「蓝瘦香菇」大火,就需要快速识别。

如何分词

  1. 基于词典匹配
  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%。

常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。

分词工具

中文分词工具:

  1. Hanlp
  2. Stanford 分词
  3. ansj 分词器
  4. 哈工大 LTP
  5. KCWS分词器
  6. jieba
  7. IK
  8. 清华大学THULAC
  9. ICTCLAS

英文分词工具:

  1. Keras
  2. Spacy
  3. Gensim
  4. NLTK

参考文献

一文看懂NLP里的分词-Tokenization(中英文区别+3大难点+3种典型方法)