中文分词综述

一、中文分词根据实现原理和特点,主要分为以下2个类别:

1、基于词典分词算法(字符串匹配分词算法)

  • 按照一定的策略将待匹配的字符串和一个已建立好的“充分大的”词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别该词。

  • 常见的基于词典的分词算法分为以下几种:正向最大匹配法、逆向最大匹配法和双向匹配分词法等。

2、基于统计的分词方法

  • 基于统计的分词方法是在给定大量已经分词的文本的前提下,利用统计机器学习模型对汉字进行标注训练,从而实现对未知文本的切分。

  • 这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法

二、常见的基于词典的分词算法:

  • 正向最大匹配法

从左到右对语句进行匹配,匹配的词越长越好。比如“商务处女干事”,划分为“商务处/女干事”,而不是“商务/处女/干事”。

  • 逆向最大匹配法

从右到左对语句进行匹配,同样也是匹配的词越长越好。比如“他从东经过我家”,划分为“他 /从/东/经过/我家”。

  • 双向匹配分词

同时采用正向最大匹配和逆向最大匹配,选择二者分词结果中词数较少者。但这种方式同样会产生歧义问题,比如“他将来上海”,会被划分为“他/将来/上海”。由此可见,词数少也不一定划分就正确。

  • 基于词典的分词算法,易产生歧义问题

三、基于统计的分词算法:

  • 本质上是一个序列标注问题,将语句中的字,按照他们在词中的位置进行标注。

  • 标注主要有:B(词开始的一个字),E(词最后一个字),M(词中间的字,可能多个),S(由一个字表示的词)

举个例子:“网商银行是蚂蚁金服微贷事业部的最重要产品” 标注后结果: “BMME S BMME BMMME S BME BE” 对应的分词结果:网商银行/是/蚂蚁金服/微贷事业部/的/最重要/产品

基于统计分析方法,得到序列标注结果,就可以得到分词结果了。

四、基于机器学习或者深度学习

主要有HMM,CRF,SVM,以及深度学习等。

  • HMM(隐马尔科夫模型)

语句是观测序列,而序列标注结果(B、E、M、S)是隐藏序列。任何一个HMM都可以由一个五元组来描述:观测序列,隐藏序列,隐藏态起始概率,隐藏态之间转换概率(转移概率),隐藏态表现为观测值的概率(发射概率)。从隐藏态初始状态出发,计算下一个隐藏态的概率,并依次计算后面所有的隐藏态转移概率。序列标注问题就转化为了求解概率最大的隐藏状态序列问题。

  • CRF(条件随机场)

描述输入序列和输出序列之间关系,基于条件概率来描述模型的。

  • 深度学习

将语句作为输入,分词结果作为标注,可以进行有监督学习。训练生成模型,从而对未知语句进行预测。

五、介绍一下HMM模型

隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。

  • 隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);

  • 每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列(observation sequence)。

  • 序列的每一个位置又可以看作是一个时刻。

设Q是所有可能的状态的集合,V是所有可能的观测的集合。

其中,N是可能的状态数,M是可能的观测数,状态q是不可见的,观测v是可见的。

应用到分词中,v代表所有词语,是可以观察的。q代表我们所有的标签(B,E这些标签,代表一个词语的开始,或者中间等等)

I是长度为T的状态序列,O是对应的观测序列。

我们可以看做是给定了一个词(O)+词性(I)的训练集(或者一个词(O)+分词标签(I)的训练集),有了训练数据,再去训练模型。

继续定义A为状态转移概率矩阵:

中文分词综述_第1张图片

B是观测概率矩阵:

中文分词综述_第2张图片

是在时刻t处于状态qj的条件下生成观测vk的概率(也就是所谓的“发射概率”)。

π是初始状态概率向量:

中文分词综述_第3张图片

隐马尔可夫模型由初始状态概率向量π、状态转移概率矩阵A和观测概率矩阵B决定。π和A决定状态序列,B决定观测序列。因此,隐马尔可夫模型可以用三元符号表示,即

称为隐马尔可夫模型的三要素。如果加上一个具体的状态集合Q和观测序列V,构成了HMM的五元组,这也是隐马尔科夫模型的所有组成部分。

举例来说明一下,例子如下(来自维基百科): 一个村庄内,所有村民都有两种隐藏状态“健康或发烧”,只有医生才能确定每个人是否发烧。医生通过询问患者的感受来诊断发烧。村民只能回答说他们觉得“正常,头晕或感冒”(三种可观测状态)。

观测(正常,感冒,晕眩)以及隐藏的状态(健康,发烧)形成隐马尔可夫模型(HMM)

观测状态 = ('normal', 'cold', 'dizzy')
隐藏状态 = ('Healthy', 'Fever')
初始状态 = {'Healthy': 0.6, 'Fever': 0.4}
状态转译矩阵 = {
   
'Healthy' : {'Healthy': 0.7, 'Fever': 0.3},
  
 'Fever' : {'Healthy': 0.4, 'Fever': 0.6}
  
 }
观测概率矩阵 = {
   
'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1},
   
'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6}
  
 }

那么用图来表示上面的例子可以如下表示:

中文分词综述_第4张图片

1. 模型学习问题

给定了一个词(O)+词性(I)的训练集,就可以估测HMM的参数,即

2. 预测问题

我们知道了观测序列(即语句)和HMM的参数,我们就可以求出造成这个观测序列最有可能对应的状态序列(即(B、E、M、S)组成的序列),序列标注问题就转化为了求解概率最大的隐藏状态序列问题。

六、BiLstm + CRF 深度学习方法

(分词标注的模型)

比较简单的分词标注形式为“BMES”, B是开始位置, E是结束位置, M是中间位置, S指单独成词。 如“我/周末/去/北京大学/玩”, 标注序列:“SBESBMMES”。

中文分词综述_第5张图片

首先对语料进行字符嵌入,将得到的特征输入给双向LSTM,然后加一个CRF(条件随机场)就得到标注结果。

七、《State-of-the-art Chinese Word Segmentation with Bi-LSTMs》2018 EMNLP

模型没有多大创新,但是通过三个手段trick来达到State-of-the-art,分别是预训练词向量 、dropout 、调整超参数。

中文分词综述_第6张图片

  • 目前中文分词最好的模型是来自 EMNLP 2018 的一篇论文,采用了基于堆叠双向长短期记忆网络的序列标注模型。

  • 文章主要是针对中文分词任务,模型十分简单,使用的双向的LSTM。模型的输入是两种特征(字和bigram二元分词),输入先通过embedding,进行concatenate之后送入堆叠的bi-lstm,最后通过softmax输出四个标签(Begin,Inside,End,Single)。

八、具体分词工具

  • 哈工大的LTP HIT-SCIR/ltp

  • jieba分词工具 yanyiwu/cppjieba

  • 清华大学THULAC https://github.com/thunlp/THULAC

  • 斯坦福分词器 https://nlp.stanford.edu/software/segmenter.shtml

  • Hanlp分词 hankcs/HanLP

  • 字嵌入+Bi-LSTM+CRF分词器 https://github.com/koth/kcws

  • ZPar分词器 frcchang/zpar

九、存在问题

目前存在的问题目前中文分词难点主要有三个:

1、分词标准:比如人名,在哈工大的标准中姓和名是分开的,但在Hanlp中是合在一起的。这需要根据不同的需求制定不同的分词标准。

2、歧义:对同一个待切分字符串存在多个分词结果。

3、新词:也称未被词典收录的词。

你可能感兴趣的:(论文阅读,深度学习)