当前位置:   article > 正文

中文分词学习笔记_基于统计机器学习模型(最大熵模型、马尔科夫模型、条件随机场)和深度学习模型lstm

基于统计机器学习模型(最大熵模型、马尔科夫模型、条件随机场)和深度学习模型lstm

1 中文分词概述

1.1 简介

定义

通过计算机自动识别出句子中的词,在词间加入边界标记符,分隔出各个词汇。

为什么需要中文分词?因为,汉语中,书面上以字为基本单位,语义上以词为基本单位。

难点

1)没有统一的分词标准,不同的领域对于词的划分方式有不同的标准。

2)歧义消解

    例子1:结婚的和尚未结婚的

  •     结婚/的/和/尚未/结婚/的
  •     结婚/的/和尚/未/结婚/的

    例子2:研究生命的起源

  •     研究/生命/的/起源
  •     研究生/命/的/起源

    例子3:南京市长江大桥

  •     南京市/长江大桥
  •     南京/市长/江大桥

3)未登录词(OOV)

技术方案

1)基于规则分词

2)基于统计分词

3)混合分词(规则+统计)

1.2 基于规则分词

通过维护词典,在切分语句时,将语句的每个字符串与词表中的词进行逐一匹配,找到则切分,否则不予切分。

主要有以下方法:

  • 正向最大匹配法
  • 逆向最大匹配法
  • 双向最大匹配法

1.2.1 正向最大匹配法

假定分词词典中的最长词有i个汉字字符,则用被处理文档的当前待切分字符串中的前i个字符作为匹配字段,查找词典。若词典中存在该词,则匹配成功,匹配字段作为一个词切分出来。若词典中不存在该词,则匹配失败,将匹配字段中的最后一个字符去掉,对剩下的字符重新进行匹配,反复循环,直到匹配成功,或者剩余字符数为1为止。

1.2.2 逆向最大匹配法

与正向最大匹配法类似,从被处理文档的末端开始匹配扫描,每次取最末端的i个字符进行匹配,若匹配失败,则去掉匹配字段的最前面一个字符,继续匹配。

由于汉语中的偏正结构较多,一般从后往前匹配,可以适当提高精确度。

1.2.3 双向最大匹配法

将正向最大匹配法和逆向最大匹配法得到的分词结果进行比较,按照最大匹配原则,选择词数最少的结果返回。

根据研究,中文中,约90%的句子,正向最大匹配法和逆向最大匹配法结果相同,约9%的句子两种切分方法得到的结果不一样,但是其中必有一个是正确的,只有约1%的句子,两种方法均切分错误。

1.3 基于统计分词

从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。

形式上表现为序列标注问题,每个字在构造一个特定的词语时,都占据着一个确定的构词位置(即词位),构词位置只有四个取值:B(词首)、M(词中)、E(词尾)、S(单独成词)。

例子1:研究/生命/的/起源

  • 研/B 究/E 生/B 命/E 的/S 起/B 源/E

例子2:南京市/长江大桥/。

  • 南/B 京/M 市/E 长/B 江/M 大/M 桥/E 。/S

统计分词方法可以分为基于传统机器学习和基于深度学习两大类。

常见算法:

  • 隐马尔科夫模型(HMM)
  • 最大熵马尔可夫模型(MEMM)
  • 条件随机场(CRF)
  • BiLSTM-CRF

1.4 分词效果评测

对于长度为n的字符串,分词结果为一系列词。每个词按它在文本中起始位置可以记作区间 [i,j] ,其中1 <= i <= j <= n。

将标准分词结果的所有区间构成一个集合A,将分词算法预测的分词结果的所有区间构成一个集合B。

中文分词的精准率和召回率的计算公式如下:

以"结婚的和尚未结婚的"为例:

单词序列

集合

元素

个数

标准

结婚 的 和 尚未 结婚 的

A

[1,2],[3],[4],[5,6],[7,8][9]

6

预测

结婚 的 和尚 结婚 的

B

[1,2],[3],[4,5],[6,7,8][9]

5

重合

结婚 的 和尚为结婚 的

A n B

[1,2][3][9]

3

2 论文笔记

================================================================================================

2017:Word-Context Character Embeddings for Chinese Word Segmentation

================================================================================================

概述

论文提出,使用半监督的方法,通过对文本自动分词,训练embeddings,然后通过训练后的embeddings来提升分词系统的性能。

模型架构

如图1所示,本文的模型由一个representation layer和一个scoring layer组成。

representation layer利用Bi-LSTM来捕获句子中每个字符的上下文。对于一个句子{w1, w2, w3,··wN},其中wi是句子中的第i个字符,N是句子的长度,对每个字符分别使用表示character unigram和character bigram。前向word representation的计算方式为,后向word representation类似,然后,和​​分别输入前向和后向LSTM当中,获取输出通过组合获得本层的最终输出

scoring layer通过组合和label embedding,获得该位置的最终表示,其中是label M的embedding。最后,通过乘以label M的得分单元,获得相应label的得分

Word-Context Character Embeddings

类似skip-gram模型,对于给定长度为n的句子:{w1, w2, w3,··wn}及其对应的标签:{l1, l2, l3,··ln},当前字符wt的预训练上下文是大小为c的窗口中的周围字符及其对应的标签,如图2所示:

和标签的embedding分别用表示。

的word-context embedding通过预测周围的进行训练。

为了获取顺序信息,当处在不同的位置时,使用不同的embedding matrices。比如,当context window为5时,每个都有四个不同版本的,分别是,每一个都有属于自己的embedding matrix。注意,每个字都有两种embedding,其中,当wi是焦点词时,是wi的embedding,当wi用作周围的上下文词时,是wi的embedding。

最后,通过Negative sampling进行训练。

Bigram embeddings的训练方法相同。对于out-of domain segmentation,我们为每个字训练两种embeddings,分别从两个域提取知识

实验结果

最后实验结果如表4所示:

================================================================================================

IJCNLP 2017:Convolutional Neural Network with Word Embeddings for Chinese Word Segmentation

================================================================================================

概述

本论文指出近年来很多基于字符的序列标注框架的分词方法,存在两个缺点:

1)依赖于手工设计的Bigram feature,不利于自动捕获N-gram features。

2)它们没有使用完整的单词信息。

对于第一个缺点,作者提出了一个卷积神经模型,它能够捕获丰富的n-gram特征,而不需要任何特征工程。对于第二个问题,作者提出了一种有效的方法来将所提出的模型与word embeddings集成在一起。word embeddings是从大量的自动分段数据中学习的。因此,该方法属于半监督学习的范畴。

模型架构

1)Lookup Table

把输入从字列表转换成矩阵。除了字以外,其他特征也可以很容易地纳入模型中,下文中我们将描述如何将词特征纳入模型。我们将每个特性对应到一个查找表(有些特征可能共享相同的查找表),在最后表示中,会把所有的特征拼接起来。

2)Convolutional Layer

本文的网络非常简单——只使用卷积层(不使用池化层)。卷积层使用GLU作为非线性单元,在某些关于语言建模的任务中,GLU已经证明其优于ReLU。形式上,我们定义输入通道的数量为N,输出通道的数量为M,输入长度为L,kernel width为k。卷积层可以写成:

堆叠的卷积层可以捕获远距离信息。从每个字符的角度来看,信息在一个金字塔中流动,图3显示了一个层叠的三个卷积层的网络。在最顶层,使用线性变换将该层的输出转换为非标准化标签分数,其中C为标签种类数。

3)CRF Layer

对于序列标记任务,明确考虑相邻标记之间的相关性通常是有好处的。相邻标签之间的关联可以建模为一个转移矩阵。对于句子S = (c1, c2,…),经过卷积层后,我们有。对于一个标签序列y = (y1, y2,…,我们将其非标准化分数定义为,则定义label序列的概率为,该模型最后的损失函数为

在训练过程中,通过反向传播使损失函数最小化。在测试过程中,使用Veterbi算法快速找到概率最大的标签序列。

与Word Embeddings集成

最近的研究表明,从大量的自动标注数据中学习到的word embeddings可以极大地改善word-based分词系统。作者提出了一种有效的方法来集成word embeddings到本文的character-based模型当中。集成带来了两个好处,一方面,可以使用full word information,另一方面,可以更好地利用未标记的大型数据。

为了使用word embeddings,作者设计了一组word features,如表1所示:

作者把word features对应到一个查找表。字ci的最终表示为:

其中,⊕表示连接操作。注意,word features的最大长度被设置为4,因此特征空间非常大。关键的一步是缩小特征空间,使存储成本控制在可行范围内,同时,可以有效地解决数据稀疏性问题。

解决方案是,对于未标记数据和Teacher CWS模型,我们使用Teacher模型对进行分词,得到自动分词的数据。从中生成一个词汇表,其中低频词被丢弃。如果∗不在中时,我们将替换为。为了更好地利用自动分词的数据,我们使用word2vec训练word embeddings。

整个过程总结如下:

1)训练一个不依赖于word feature的Teacher模型。

2)用Teacher模型对未标注数据D进行分词,得到自动分词的数据

3)从构建词汇表,将中没有出现的所有单词替换为UNK。

4)使用word2vec在上训练word embeddings。

5)使用预训练好的word embeddings训练Student模型。

注意,在这个过程中没有使用外部标签数据。

实验结果

最后实验结果如表3所示:

================================================================================================

EMNLP 2018:State-of-the-art Chinese Word Segmentation with Bi-LSTMs

================================================================================================

概述

论文提出,与基于复杂的神经网络结构的模型相比,当Bi-LSTM模型与标准的深度学习技术和最佳实践相结合时,可以在许多流行数据集上取得更好的准确性。此外,作者的误差分析表明,OOV对神经网络模型仍然具有挑战性,而且许多剩余的错误不太可能通过结构改变而得到修正。作者证明,适当地训练和调整一个相对简单的结构,使用最小的特征集和贪婪搜索,可以达到先进的精确度,击败更复杂的神经网络结构。(character and bigram),如图1所示。

论文使用三种被广泛认可的技术来获得模型的最大性能:

1)pre-trained embeddings

2)dropout

3)hyperparameter tuning

论文通过误差分析,发现错误主要来源于以下方面:

1)大约三分之一的错误是由于注释不一致造成的,而这些错误只能通过手动注释来消除。

2)另外三分之二是因为词汇量不足,以及训练数据中没有语义线索。其中一些错误几乎不可能用不同的模型架构来解决。

模型架构

作者使用一个简单的Bi-LSTM模型。

每个输入位置上使用两种特征,unigrams and bi-grams。

两种特征concatenated后输入到两层的Bi-LSTM当中,其中,每层有256个隐藏单元。作者发现相对于concatenated,把backward LSTM放在forward LSTM之上,可以提高精度。

最后通过softmax层输出结果。

论文描述了从本模型架构中获得最佳性能的最佳实践,主要通过以下手段:

1)Recurrent Dropout:将dropout应用到LSTMs的recurrent connections。

2)Hyperparameters:通过对超参数的调整,作者发现它对于简单体系结构的性能至关重要。

3)Pretrained Embeddings:使用wang2vec对character embeddings和characterbigram embeddings进行了预训练。试验了两种方法,一种是将预先训练好的embeddings设置为常量,另一种是对特定数据集进行微调。

实验结果

最后实验结果如表2、表3所示:

表2、表3分别是有预训练embeddings和没有预训练embeddings的实验结果。在大部分的数据集上加入预训练的embeddings都能有一个点左右的提升,除了MSR和PKU两个数据集,这两个数据集上本文算法表现并不好。

另外还比较了固定的预训练embeddings和更新的预训练embeddings的效果,固定的预训练embeddings在7个数据集中有5个数据集的效果要好于更新的embeddings。

表6比较了各种技术对于模型性能的影响:

================================================================================================

ACL 2020:Coupling Distant Annotation and Adversarial Training for Cross-Domain Chinese Word Segmentation

================================================================================================

概述

论文提出了一种解决跨领域中文分词方法。论文指出,由于不用领域之间的Gap of domain distributions和Out of vocabulary (OOV) problem,导致分词模型在处理不同领域的文本时,性能急剧下降,为了解决这个问题,提出了使用Distant annotation联合Adversarial training的方法。此方法不需要任何预定义的领域知识(如词典),可以自动高效的学习发现领域专有词汇,在跨领域文本上进行自动标注。对于对抗式训练,开发了一个句子级的训练程序,可以实现降噪和最大限度地利用源域信息。

Distant annotation的目标,是在不需要任何人工定义词典的情况下,自动对目标领域文本实现自动标注。通过重新思考“Chinese words”的定义和本质,作者开发了一个词汇挖掘器,从未标注的目标领域文本中获取特定领域的词汇。此外,在源域数据上训练一个分词器来识别未标记目标数据中的常用词。最后,对来自目标领域的句子实现自动标注,可以用作目标领域的训练数据。

虽然Distant annotation可以提供效果不错的目标领域的标注数据,但仍然存在影响最终性能的标注错误问题。为了降低噪声数据的影响,更好地利用源域数据,作者提出了在源域数据集和通过Distant annotation构造的目标领域数据集上联合进行Adversarial training的方法。Adversarial training模块可以捕获特定领域更深入的特性,和不可知领域的特性。

Distant annotation(DA)

DA的目的是自动生成目标域内句子的分词结果,有两个主要模块,包括一个基本分词器和一个特定领域的单词挖掘器。基本分词器使用来自源域的标注数据训练,用于识别源域和目标域中常见的单词。特定领域的单词挖掘器旨在探索目标特定于领域的单词。

本文的基本分词器使用GCNN+CRF模型。当使用基本分词器对目标领域文本进行分词后,可以得到一系列分词后的文本,进行去停用词操作后,得到Γ = {T1, T2, ..., TN }。我们对Γ进行N-gram提取,得到γ = {t1, t2, ..., tm}。对于每个序列ti,需要计算它是一个有效单词的可能性。在这个过程中,主要考虑四个因素:

1)互信息 Mutual Information (MI):MI被广泛用于估计两个随机变量的相关性,在这里,使用不同子字符串之间的相互信息来度量文本段的内部紧密性,如图3(a)所示。

为了排除极端情况,有必要枚举所有候选子字符串。一个序列ti由n个字符组成的最终MI得分ti = {c1…cn}定义为:

p(·)表示整个语料库Γ给出的概率。

2)熵得分 Entropy Score (ES):使用ES来度量候选文本片段的不确定性,因为不确定性越高意味着邻近语境越丰富。设Nl(ti) = {l1, ..., lk}和Nr(ti) = {r1, ..., rk 0} 分别是ti的左临近和右临近集合,ti的左熵得分ESl和右熵得分ESr可以分别表示为:

我们选择ESl(ti)和ESr(ti)中的最小值作为ti的最终熵得分。ES(ti)可以显式地表示文本段的外部灵活性,如图3(b)所示。

熵得分进一步作为判断该段是否为独立词的重要指标。

3)tf-idf:tf-idf可以反映一个词对一个集合或语料库中的文档的重要性。大多数特定于领域的单词是名词实体,它们通常具有较大的权重因子。在这里,我们定义了一个单词概率分数pval(ti)来表示ti被定义为一个有效单词的可能性。

式中,σ为sigmoid函数,N为max-min法的归一化运算。

4)词频:如果ti是一个有效的词,它应该在Γ中反复出现。

最后,通过为特定于领域的pval(ti)和单词词频设置适当的阈值,词汇挖掘器可以有效地挖掘特定领域的词汇,然后为目标领域构造特定领域的词汇集合C。在本文中,我们只考虑pval(ti)≥0.95和词频大于10的单词ti。

图2的左边部分说明了DA的数据构建过程。首先,我们利用特定于领域的词挖掘器,用于为目标领域构建集合C。用句子”溶酶
菌的科学研究”作为一个例子,我们使用基于C的最大化匹配算法,这表明“溶酶菌”是一个有效的词。因此,对字符“溶”、“酶”、“菌”是“B”、“M”、“E”。对于句子的剩余部分,我们采用baseline segmenter进行标注。对字符”的科学研究”的标注是{“S”,“B”。“E”、“B”、“E”}。

Adversarial Training(AT)

对抗训练模块的结构如图2右边所示。我们为目标域构造一个标注的数据集,对抗网络的输入是来自源域S和目标域T的两个数据集。为了提取不同的特征,有三个编码器,所有的编码器都是基于GCNN。针对特定领域,源域和目标域分别采用了Esrc和Etgt两个独立的编码器。对于领域不可知的特性,我们采用了一个共享编码器Eshr和一个鉴别器Gd,它们都将被进行对抗训练。

对于这两个特定领域的编码器,输入的句子分别是。利用Esrc和Etgt可以得到ssrc和stgt的序列表示

对于共享编码器,我们希望Eshr能够生成一些表示,这些表示可以欺骗句子级别鉴别器,从而正确地预测每个句子的域,这样Eshr最终能够提取与域无关的特性。Eshr将对来自源域ssrc和目标域stgt的句子分别提取出特征。网络的判别器Gd旨在区分每个句子的域。具体来说,将把每个句子的最终表示H∗输入到一个采用CNN网络文本的二进制分类器中。Gy将产生输入句子s来自源域或目标域的概率。因此,鉴频器的损失函数为:

共享编码器Eshr产生的特征应该能够欺骗鉴别器正确预测s的域。因此,共享编码器Lc的丢失函数是Ld的翻转版本:

最后,我们将H和H∗连接起来,作为输入句子的最终序列表示。对于源域ssrc,,,对于目标领域stgt,。最后的表示将被输入到CRF标记器中。

最后,使用反向传播算法对模型进行端到端方式联合训练。当目标域上没有注释数据集时,我们可以在对抗训练过程中去除Ltgt,使用源域上的分词器进行评估。

实验结果

最后实验结果如表3所示:

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号