笔记来源:《python自然语言处理核心算法与技术》 涂铭 等
nlp 即自然语言处理。
- 机器翻译
- 情感分析
- 智能问答
- 文摘生成
- 文本分类
- 舆论分析
- 知识图谱
- 分词 setgment
英文分词自然的以空格作为分隔符。
中文分词比较困难,典型的思路是基于字典的最长字符匹配,可以解决部分问题,但是对于歧义性很难解决。
- 词性标注 part-of-speech tagging
词性指的是:动词、名词、形容词等。标注的目的是表征词的一种隐藏状态。
- 命名实体识别 NER , Named Entity Recognition
指的是从文本中识别具体特定类别的实体(通常是名词),例如人名、地名、机构名、专有名词等。
- 句法分析 syntax parsing
句法分析的目的是解析句子中哥哥成分之间的依赖关系。
- 指代消解 anaphroa resolution
代词出现的频率很高,但是真正具有实际意义的只有第一次出现的具体名词。消解这些代词也是研究方向。
- 情感识别 emotion recognition
正负面词汇。有时也有中性词汇
- 纠错 correction
自动纠错词汇,输入法中常用。
- 问答系统
这种就很厉害了,人工智能小爱等
- 中文维基百科
- 搜狗新闻语料库
- IMDB情感分析语料库
- 第一层 语法分析
- 第二层 句法分析
- 第三层 语义分析
- 匹配字符串
以上代码就是一个最常用的匹配字符串的代码。
这个部分可以展开将很多,有机会专门出一个博客用于记录。
前面提到过,中文没有像英语一样的天然分词,所以我们需要专门针对中文得到一些中文分词的关键技术。
经过多年的探索,当前的中文分词技术大致有:
- 规则分词
- 统计分词
- 混合分词
3.1.1. 正向最大匹配法
囧顶分词词典中的最长词有i个汉字字符,则用被处理文档的当前字符串中的前i个子作为匹配字段,查找字典,若字典中存在这样的一个i字词,则匹配成功,匹配字段被作为在一个词切分出来。如果词典中找不到这样的一个i自此,则匹配失败,将匹配字段中的最后一个字去掉,对剩下的字串进行匹配处理。如此迭代,知道匹配成功,或者剩余的字串长度为0为止。
3.1.2. 逆向最大匹配法
大同小异,不再介绍。直接看示例
3.1.3. 双向最大匹配法
是将正向最大匹配法得到的分词结果和逆向最大匹配法得到的结果进行比较,然后按照最大匹配原则,选取次数切分最少的作为结果。
大规模语料库的建立使得统计学习方法成为中文分词算法的主流。
主要思想是:
- 词的最小单位是字
- 相连的两个字出现的频率高,则证明其可能是一个词
一般来说,基于统计的分词需要做下面两个操作:
- 建立统计语言模型
- 对句子进行单词划分,然后对划分结果进行概率计算,获得概率最大的分词方式。这里就用到了统计学习方法,如隐马尔可夫、条件随机场等。
下面针对一些关键技术作介绍:
3.2.1. 语言模型
长度为的字符串确定其概率分布,其中到的依次表示文本中的各个词语。一般采用链式法则计算其概率值,如下面式子所示:
可以发现,当文本过长的时候,公式计算难度加大。为解决这个问题,有人提出了n元模型,以降低计算难度。
所谓n元模型就是在估算条件概率是,忽略距离大于等于n的上文词的影响,因此的计算可以简化为:
当n=1时成为医院模型,此时整个句子的概率可以表示为: 观察可知,在一元语言模型中,整个句子的该来等于各个词语概率的乘积。言下之意就是各个词之间都是相互独立的,这无疑是完全损失了剧中的此讯信息。所以医院模型的效果并不理想。
n = 2时成为二元模型,n=3时称为3元模型,显示n越大,仅保留的词序信息越丰富,但是计算升本也呈指数级上升。一般使用频率计数的比例来计算n元条件概率:
3.2.2. HMM (隐马尔可夫模型)
其将分词作为字在字串中的序列标注任务来实现的。其基本思路是:每个字在构造一一个词语的时候都占据着一个确定的构词位置,先规定每个字最多只有四个构词位置:B(词首)、M(词中)、E(词尾)和S(单独成词)。
马尔可夫模型的话题太大,之后将会作为专题发布博客。
3.2.3. 其他分词模型
- 条件随机场
- 神经网络分词算法
多种分词方式并用,实际中经常如此。
这个分词工具是目前看来最棒的中文分词工具,其具有以下特点:
- 社区活跃
- 功能丰富
- 提供多种编程语言的支持
- 使用简单
3.4.1. Jieba的三种分词模式
高频词提取将在之后作为专题介绍。
4.1.1. 词性标注简介
词性是词汇的基本语法属性,通常也成为词类。 词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。例如,表示人、地点、十五以及其他抽象概念的名称几位名词,表示动作或状态变化的词即为动词,描述或修饰名词属性、状态的词为形容词。
在中文中,一个词的词性很多时候都是不固定的,一般表现为同音同形的词在不同的语境下,其表示的语法截然不同,这就为词性标注带来很大的困难;但是另一方面,从整体上看,大多数词语,尤其是诗词,一般只有一道两个词性,且其中一个词性的使用频次远远大于另一个,即使每次都将高频词行作为词性选择进行标注,也能实现80%以上的准确率。如此,若我们对常用词的词性都能进行很好的识别,那么就能覆盖绝大所属场景,满足基本的准确度要求。
目前较为主流的方法是如同分词一样,将句子的词性标注作为一个序列标注问题来解决,纳闷分词中常用的手段,如HMM,RCF等皆可在词性标注任务中使用。
本节介绍利用jieba分词工具来完成词性标注任务。
4.1.2. 词性标注规范
- https://blog.csdn.net/Jiajikang_jjk/article/details/83049601
4.1.3. jieba分词中的词性标注
以上词典相当于用力默认的词典,但是jieba其实是支持自定义词典的。这个有机会作为专题讲解。
4.2.1. 命名实体识别简介
明明实体的目的是识别预料中任命、地名、组织机构名等命名实体。又是这些命名实体数量不断增加,通常不可能在词典中穷尽列出,且其狗比给方法具有各自的规律性,因此,通常吧对这些词的识别在词汇形态处理任务中独立处理,称为明明实体识别NER.。
NER研究的明明实体一般分为3大类(实体类、时间类和数字类)和7小类(任命、地名、组织机构名、时间、日期、货币和百分比)。
中文的命名实体识别主要有一下半点:
- 任命识别
- 规律复杂
- 嵌套情况复杂
- 长度不确定
当前的主流的明明识别识别方法如下:
- 基于规则的明明实体识别
- 基于统计的明明实体识别
- 混合方法
序列标注方法是目前命名实体识别中的主流方法。HMM,CRF等
条件随机场也将在之后作为专题介绍。
较为经典有效的关键词提取算法包括:
- TF/IDF 词频-逆文档频次算法
- TextRank算法 可以脱离语料库进行操作,仅对单篇文档进行
- LSA/LSI/LDA算法
这个步骤主要用于机器翻译。句法分析的主要任务是识别出句子所包含的句法成分依据这些成分之间的关系,一般以句法树来表示句法分析的结果。
句法分析主要面对两个难点:
- 歧义
- 搜索空间
6.2.1. 句法分析数据集
统计学习方法多需要预料数据的支撑,统计句法分析也不例外。相较于分词或词性标注,句法分析的数据集要复杂很多,其是一种树型的标注结构,因此有称为树库。
- 英文宾州树库 Penn TreeBank PTB
- 中文滨州树库 Chinese TreeBank , CTB
6.2.2. 句法分析的评测方法
句法分析评测主要任务是评测句法分析器生成的树结构与手工标注的树结构之间的相似程度。其主要考虑两方面的性能:满意度和效率。其中满意度是值测试句法分析器是否适合或者胜任某个特定的自然语言处理任务;二效率主要用于对比卷发分析器的运行时间。
目前主流的分析评测方法是PARSEVAL评测体系。
相较于词法分析,句法分析的成熟度相对较低。目前常用的方法如下:
6.3.1. 基于PCFG的句法分析
probabilistic Context Free Grammar 是基于概率的短语结构分析方法,是目前研究最为充分,形式最为简单的统计句法分析模型,也可以认为是规则方法与统计方法的结合。
PCFG是上下无关文法的结合。
6.3.2. 基于最大间隔的马尔可夫网络的句法分析
6.3.3. 基于CRF的句法分析
6.3.4. 基于迁移-规约的句法分析模型
6.3.5. 使用Stanford Parser的PCGF算法进行句法分析
文本表示是自然语言处理中的基础工作,文本表示的好坏直接影响到整个自然语言处理系统的性能。因此,研究者们投入了大量的人力物力来研究文本表示方法,以期提高自然语言处理系统的性能。在自然语言处理研究领域,文本向量化是文本表示的一种重要方式。顾名思义,文本向量化就是将文本表示成一系列能够表达文本语义的向量。无论是中文还是英文,词语都是表达文本处理的最基本单元。当前阶段,对文本向量化大部分的研究都是通过词向量化实现的。
有研究者将文章或者句子作为文本处理的基本单元,由此产生了doc2vec和str2vec技术。
基本思想是将文档中所有的单词都单独表示为一个向量的话,最简单的方式是全是(0,1)向量,如果是这个词汇则对应位置为1,其他位置为0(BOW)。但是这样做会造成以下几个问题:
- 维度灾难
- 无法保留语序信息
- 语义鸿沟
word2vec可以从无标注的数据中提取有用信息。
一般来说词语是表达语义的基本单元。因为磁带模型知识将词语符号话,所以磁带模型是不包含任何语义信息的。如何使得“词表示”包含语义信息是该领域研究者们面临的问题。分布假设(distributional hypothesis)的提出也为解决上述问题提供了理论基础。
假说的核心是:
随后,有学者斋藤利了利用上下文分布表示词义的方法,这类方法就是又名的此空间模型。随着各类硬件设备计算能力的提升和相关算法的发展,神经网络模型逐渐在各个领域中崭露头角,可以灵活的对上下文进行建模是神经网络构造词的最大优点。下文将介绍神经网络构建词向量的方法:
7.2.1. 神经网络语言模型
前面提到过二元语言模型,神经网络语言模型与传统模型的不同点在于,传统的方法是估算,而NNLM模型直接通过一个神经网络结构对n元条件概率进行估计。
大致的操作是:
从语料库中搜集一系列长度为n的文本序列,假设这些长度为n的文本序列组成的集合为D,那么NNLM的目标函数如下面式子所示:
在得到x支行吧,将x输入到隐藏层h,再将h接入输出层得到最后的输入变量y,隐藏层变量h和输出变量y。
7.2.2. C&W模型
7.2.3. CBOW模型和Skip-gram模型
- 电子商务
- 舆情分析
- 市场呼声
- 消费者呼声
- 词法分析
- 机器学习方法
- 混合分析
卷积、循环、LSTM
将会持续补充内容。。。。