文章目录

  • 《Python自然语言处理实战》
  • 概述
  • NLP基础
  • 中文分词
  • 规则分词
  • 正向最大匹配法(Maximum Match Method, MM法)
  • 逆向最大匹配法(Reverse Maximum Match Method, RMM法)
  • 双向最大匹配法(Bi-direction Matching method)
  • 统计分词
  • N元模型(n-gram model)
  • 隐马尔可夫模型(HMM)
  • 其他
  • 词性标注
  • 命名实体识别
  • 关键词提取算法
  • TF-IDF算法
  • TextRank算法
  • LSA/LSI/LDA
  • LSA/LSI算法
  • LDA算法
  • 实践部分
  • 句法分析
  • 其他
  • TODO


《Python自然语言处理实战》

machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配

概述

本书介绍了NLP的一些基本问题和方法,如中文分词、词性标注、命名实体识别、关键词提取、句法分析、文本向量化以及深度学习NLP的一些内容。全书偏基础,可作为NLP的入门科普,其中前半部分的规则和统计方法值得看一下,且有相应的代码示例。而后半部分更多的是深度学习基础,按需。

本文主要是个人看完之后的一些备忘点记录,方便以后实际应用时定位。

NLP基础

  • NLP的一些应用:机器翻译、情感分析、智能问答、文摘生成、文本分类、舆论分析、知识图谱
  • 基本术语:分词(segment)、词性标注(part-of-speech tagging)、命名实体识别(NER,Named Entity Recognition)、句法分析(syntax parsing)、指代消解(anaphora resolution)、情感识别(emotion recognition)、纠错(correction)、问答系统(QA system)
  • NLP的一些知识结构:句法语义分析、关键词抽取、文本挖掘、机器翻译、信息检索、问答系统、对话系统。
  • 语料库中文维基百科搜狗新闻语料库IMDB情感分析语料库
  • NLP的三个层面:词法分析、句法分析、语义分析
  • 正则表达式是NLP的基本手段之一。python里的re模块。

中文分词

  • 英文单词本身就是词,且天然的用空格分开,所以不做处理也能有较好效果。而中文必须通过分词才能表达出完整意思。而中文分词的主要困难在于“分词歧义”
  • 分词方法可归纳为:规则分词、统计分词、混合分词

规则分词

正向最大匹配法(Maximum Match Method, MM法)

基本原则是从正向开始,对照词典进行匹配,且尽可能匹配最长的词。

1. 从左到右取m个字符做匹配字段,其中m为词典中的最长词条字符数
2. 若匹配成功,将该词切出,剩余文本重复进行;
3. 若匹配失败,取m-1个字符做匹配字段,重新匹配。
逆向最大匹配法(Reverse Maximum Match Method, RMM法)

与MM法类似,但从逆向执行。由于汉语中偏正结构较多,从后向前匹配会提高精确度。统计结果表明,正向错误率为1/169,而逆向错误率为1/245。

1. 文档倒排,准备逆序词典
2. 按照MM法记性匹配
双向最大匹配法(Bi-direction Matching method)

融合MM和RMM的方法,并根据最大匹配原则,取切分词数最少的那个。

1. 分别做正反最大匹配分词,取词数较少的那个
2. 若词数相同,而分词结果不同,则返回单字较少的那个
3. 若分词结果相同,则任意取一个

统计分词

基本思想是将词看做各个字组成,然后相连的字在文本中出现词数越多,则越可能就是一个词。包括建立统计语言模型、去概率最大的分词结果。

  • 语言模型:为长度为m的字符串确定其概率分布machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_02,公式为

machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_03

N元模型(n-gram model)

上式中当文本过长时计算难度比较大,通常用n元模型降低难度,即只考虑距离为n以内的字的关系,n取1、2、3时分别称为一元模型(unigram model)、二元模型(bigram model)、三元模型(trigram model)。另外在实际使用时,由于可能分子分母为0的情况,所以一般配合平滑算法使用,如拉普拉斯平滑。
machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_04

隐马尔可夫模型(HMM)
  • 将分词作为字在字串中的序列标注任务来实现。首先设计4种构词位置,B(词首)、M(词中)、E(词尾)、S(单独成词),并将句子用这4种标签表示,作为隐状态,而具体文本则为观测值
  • 数学表示:句子machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_05,其中machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_06表示具体字,machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_07表示句子长度;machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_08表示输出标签,则理想输出为machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_09
  • 引入观测独立性假设,即每个字的输出只与当前字有关,不考虑上下文

machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_10

  • 考虑到“观测独立性假设”会导致不合理输出的情况,如BBB、BEM等情况。HMM可以解决该问题。
  • 通过贝叶斯公式有:

machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_11

  • 则目标变为最大化machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_12,作马尔可夫假设?有:

machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_13

  • 作其次马尔可夫假设,即每个输出(状态)只与上一个输出(状态)有关

machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_14

  • 则可以得到

machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_15

  • 其中machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_16为发射概率,machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_17为转移概率,通过设置某些machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_18,则可以排除BBB、EM等不合理组合。
  • 对HMM求解machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_19的方法,通常是Viterbi算法,是一种动态规划方法。
其他

标记:CRF不会

  • 条件随机场CRF,该方法的每个状态不止与其前面的状态有关,且与后续装热爱由分管。
  • 深度学习的方法,如CNN、LSTM等用于特征挖掘,最后接CRF、softmax进行分词预测
  • 最常用的方法是先用词典分词,然后用统计分词辅助,如Jieba分词工具就是如此。
  • Jieba分词,结合了规则和统计。先用**“前缀词典”**扫描分词,对未登录词基于HMM模型用Viterbi算法推导。
  • Jieba分词有3种模式,精确模式(精确切开)、全模式(所有可能的词组合都保留下来)、搜索引擎模式(精确模式基础上,对长词再次切分)

词性标注

  • 有词性标注规范表,参考
  • 词性标注与分词类似,除了分词指定的BMES四种标签外,通过如"B_n"、"E_n"的方式组合标注”词位置“和”词性“。
  • 词标注的方法与分词类似,如Jieba中的词性标注,也是词典匹配和HMM共同作用。

命名实体识别

  • 命名实体识别(Named Entities Recognition, NER),一般分为3大类(实体类、时间类、数字类)和7小类(人名、地名、组织机构名、时间、日期、货币和百分比)。其中人名、地名、机构名是比较复杂的。
  • 中文NER的主要难点:数量多、构成复杂(如人名、音译人名等)、嵌套情况(如人名嵌套地名、地名签到人名等)、长度不定。
  • 标签除了前文的BMES外,新增O表示无关字
  • 方法类似,主要是规则(词典)、统计(HMM、CRF、最大熵模型)、混合。
  • 本书介绍了CRF实现NER的原理和范例

关键词提取算法

TF-IDF算法
  • Term Frenquency-Inverse Document Frequency,词频-逆文率算法,用于评估一个词对一个文档集中的某个文档的重要程度。
  • 基本思想:TF,在一篇文档中,一个词出现次数越多越重要;IDF,在一个文档集中,一个词出现次数越少越有对文档的区分能力。
  • 公式如下,表示单词i对文档j的tf-idf值,计算每个词后按照得分降序排列即可

machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_20

TextRank算法
  • TextRank算法可以脱离语料库,仅对单片文档进行分析提取文档关键词。最早用于文档的自动摘要。
  • TextRank源于PageRank,PageRank是一个网页排名算法,基本思想是:①链接数量。一个网页被越多网页链接,越重要;②链接质量。一个网页被越高权值的网页链接,越重要。
  • 具体计算时,每个网页将自身得分平均贡献给每个出链,每个网页的得分是所有入链贡献得分的和。令machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_21表示得分,machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_22表示入链,machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_23表示出链,则有

machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_24

  • 另外,考虑到孤立网页在这该方法下得分为0而不会被访问到,加入一个阻尼系数d,如下

machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_25

  • TextRank做文档摘要时相比PageRank的区别:PageRank是有向无权图,而TextRank有权,权值为句子间的相似度(编辑距离、余弦距离等);另外,认为每个句子和其他所有句子都有链接,即是一个有向完全图。则有TextRank的公式

machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_26

  • TextRank做关键词抽取时的与做文档摘要的区别:①无权,与PageRank一致;②非全连接,按照一定窗口。

machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_27

LSA/LSI/LDA
  • 举例,如动物主题的文章,通篇讲解狮子、老虎等而未出现显式的关键词”动物“,此时tfidf无法正确提取,那么主题模型就可以发挥作用
  • TF-IDF和TextRank仅适用的文本统计信息,而未考虑语义特征。主题模型则认为词和文档之间还有一个”主题“的维度将它们串联起来,每个文档有多个主题,每个主题有其对应的词分布,则

machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_28

  • 如上式,主题模型就是要计算machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_29machinelearningmastery 自然语言处理 自然语言处理实战项目_最大匹配_30,得到主题的词分布,和文档的主题分布。LSA(LSI)方法采用的是SVD暴力破解,LDA是通过贝叶斯方法对分布进行拟合。
LSA/LSI算法
  • **LSA(Latent Semantic Analysis, 潜在语义分析)LSI(Latent Semantic Index, 潜在语义索引)**可以认为是一种算法,二者都是对文档的潜在语义进行分析,LSI还会在分析结果上构建索引。
  • LSA的主要步骤:①BOW模型将每个文档表示为向量,文档集合组成”词-文档矩阵(machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_31)”;②对该矩阵做SVD(machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_32);③取与文档向量最相似的词向量作为关键词。
  • LSA的优点:①将词、文档映射到一个低维语义空间,对此、文档进行了更本质的表达;②降低分析的计算代价,提高分析质量。
  • LSA的缺点:①SVD的计算复杂度高;②新文档加入要全部重新训练。
LDA算法

标记:LDA不会

  • LDA(Latent Dirichlet Allocation, 隐含狄利克雷分布),是目前topic-model的主流方法。该方法理论基础是贝叶斯理论,根据词的共现信息分析,拟合“词-文档-主题”的分布,进而将词、文本都映射到一个语义空间。
  • LDA算法假设文档中主题的分布和主题中词的先验分布都服从狄利克雷分布,通过先验分布+数据(似然)=后验分布,具体求解的一种方法是吉布斯采样
  • LDA模型训练过程有:

a. 随机初始化,对语料中每篇文档中的每个词w,随机赋予一个topic编号z

b. 重新扫描语料库,对每个词w按照吉布斯采样公式重新采样它的topic,在语料中进行更新

c. 重复以上语料库的重新采样过程,知道吉布斯采样收敛

d. 统计语料库的topic-word共现频率矩阵,该矩阵即LDA的模型

  • 得到LDA模型后,按照一定方式对新文档的topic进行预估

a. 随机初始化,对当前文档中每个词w,随机赋一个topic编号z

b. 重新扫描当前文档,按照吉布斯采样公式,重新采样它的topic

c. 重复以上过程指导吉布斯采样收敛

d. 统计文档中的topic分布即为预估结果

  • LDA具体流程看起来不复杂,但有许多需要注意的地方,如:怎么确定共轭分布中的超参、怎么通过狄利克雷分布和多项式分布得到他们的共轭分布、具体怎么实现吉布斯采样等。
  • 通过LSA或LDA算法,得到文档对主题、主题对词的分布(可推算词对主题的分布),根据分布相似性得到文档和词的相似性,作为关键词。
实践部分
  • 哈工大停用词表
  • 关键词提取算法训练的几个步骤:①加载文档数据集;②加载停用词表;③分词;④过滤干扰词;⑤训练;
  • 关键词提取算法提取的几个步骤:①分词;②过滤干扰词;③提取关键词。

句法分析

  • 句法分析的主要任务是识别出句子所包含的句法成分以及这些成分之间的关系,一般以句法树来表示句法分析结果。

machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_33

  • 句法分析(parsing)是从单词串得到句法结构的过程,实现该过程的工具或程序称为句法分析器(parser)
  • 最典型且常用的句法分析方法为PCFG(Probabilistic Context Free Grammar)
  • 统计句法分析模型,本质是一套面向候选树的评价方法。
  • 数据集:①英文宾州树库(Penn TreeBank, PTB);②中文宾州树库(Chinese TreeBank, CTB);③其他如清华树库TCT、台湾中研院树库。
  • 不同树库有不同的标记体系,不同树库得到的句法分析器不能混用
  • 句法分析的评测,是评测句法分析器生成的树结构和手工标注树结构之间的相似程度。主要的评测方法是PARSEVAL评测体系,主要指标有准确率、召回率、交叉括号树等。
  • PCFG是基于概率的短语结果分析方法,是目前研究最充分、形式最简单的统计句法分析模型,也是规则和统计方法结合。
  • PCFG的短语结构文法可以表示为五元组(X,V,S,R,P),其中:①X是有限词汇的集合;②V是有限标注的集合;③S是文法的开始符号,包含于V;④R是有序偶对(α,β)集合,是规则集;⑤P表示每个产生规则的统计概率。
  • PCFG解决的问题:①基于PCFG计算分析树的概率值;②对一个句子的多个树做概率排序;③句法排歧,去概率最大。

machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_34

  • PCFG的三个基本问题和解法:①根据文法G,计算句子S的概率,machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_35。用内向算法和外向算法;②给定文法G和句子S,选择最佳树,即machinelearningmastery 自然语言处理 自然语言处理实战项目_元模型_36。用Viterbi算法;③如何为文法规则选择参数,使得训练句子概率最大,即machinelearningmastery 自然语言处理 自然语言处理实战项目_中文分词_37
  • Stanford Parser是斯坦福大学自然语言小组开发的开源句法分析器
  • 其他略

其他

【后续内容主要是ML/DL的内容,Tensorflow实现,简单过】

  • Word2Vec:NNLM、C&W、CBOW、Skip-gram
  • Doc2Vec:DM(上下文+段落=>目标词)、DBOW(段落=>上下文)
  • gensim模块
  • 情感分析方法:①词法分析,即积极次或消极词匹配计数;②机器学习方法;
  • 文本特征:BOW、TF、IDF、N-Gram
  • 繁体字处理工具:opencc
  • gensim有自带中文维基百科数据,WikiCorpus,wiki-zh-article.txt

TODO

HMM、CRF、LDA