句法分析
句法分析的主要任务是识别出句子所包含的句法成分以及这些成分之间的关系,通常会以句法树来表示句法分析的结果。
概述:
句法分析决定着自然语义处理进度,主要面临以下两个问题:歧义和搜索空间。自然语言区别于人工语言的一个重要特点就是它存在着大量的歧义现象。人们可以依靠大量的先验知识有效的消除掉歧义,而在机器学习中,机器在表示和获取方面存在严重的不足,所以很难像人一样进行语句的歧义消除。
句法分析是一个极为复杂的任务,侯选树的个数会随着句子增多呈现指数级别的增长,搜索空间巨大。因此,必须要有合适的解码器,才能够做到在规定的时间内搜索到模型定义的最优解。
句法分析是一个通过词语组合分析得到句法结构的过程。该过程使用的程序叫做句法分析器主要分为两种:完全句法分析和局部句法分析。两者差异在于,完全句法分析以获取 整个句子的句法结构为目的;局部句法分析只关注局部的一些成份。句法分析中所用的方法可简单分为基于规则和基于统计两个类别。首先,基于规则的方法在处理大规模真实文本时,会存在有限语法规则覆盖的缺陷。随着基于统计学习的句法分析兴起,句法分析器性能不断提高。典型:PCFG。
统计句法分析模型本质上是一套面向候选树的评价方法,正确的句法会被赋予一个较高的分值,对不合理的句法树则赋予较低的分值,最终将会选择分值最高的句法树作为最终句法分析的结果。
统计分析方法是离不开语料数据集和评价体系作基础的。句法分析使用的数据集更加复杂,它是一种树形的标注结构,也可以称为树库。
句法分析的评测方法:
句法分析评测的主要任务是:评测句法分析器生成的树结构与手工标注的树结构之间的相似度。主要通过两个方面评测其性能:满意度和效率。满意度指的是测试句法分析器是否适合某个特定的自然语言处理任务;而效率主要是对比句法分析器的运行时间。指标:准确率表示分析正确的短语个数占分析结果中所有短语个数的比例。召回率表示分析得到的正确短语个数占标准分析树全部短语个数的比例。交叉括号表示分析得到的某个短语的覆盖范围与标准语法分析结果的某个短语的覆盖范围存在重叠但不存在包含关系,即构成一个交叉括号。
基于PCFG的句法分析
PCFG是基于概率的短语结构分析方法,是一种上下文无关文法的扩展是目前较成熟的句法分析模型,也可认为是规则方法和统计方法的结合。
PCFG是一种生成式的方法,它的短语结构文法可以表示为一个五元组(X,V,S,R,P):
X是一个有限词汇的集合,其中的元素称为词汇或终结符。
V是一个有限标注的集合,称非终结符集合。
S是文法的开始符,且包含于V
R是有序偶对($\alpha ,\beta $)的集合,就是产生的规则集。
P代表每个生产规则的统计概率。
from nltk.parse import stanford
import os
root='./stanford-parser-full-2018-10-17/'
parser_path=root+'stanford-parser.jar'
model_path=root+'standford-parser-3.9.2-models.jar'
pcfg_path='edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz'
parser=stanford.StanfordParser(path_to_jar=parser_path,path_to_models_jar=model_path,model_path=pcfg_path)
sentence=parser.raw_parse(seg_str)
for line in sentence:
print(line)
line.draw()
PCFG用于解决一下问题:
- 基于PCFG可以计算分析树的概率值。
- 若一个句子有多个概率树,可以依据概率值对所有的分析树进行排序。
- PCFG可以用于进行句法排歧,面对多个分析结果选择概率值最大的。
PCFG运算表示:
- 形式: A → α , P A\to \alpha ,P A→α,P
- 约束: ∑ α P ( A → α ) \sum\nolimits_{\alpha }{P(A\to \alpha )} ∑αP(A→α)
基于最大间隔马尔可夫网络的句法分析
最大间隔属于SVM中的核心理论,而马尔可夫网络是概率图模型中一种具备一定结构处理关系能力的算法。最大间隔马尔可夫网络就是这两者的集合方法,能够解决复杂的结构化预测问题,尤为适合用于句法分析任务。这是一种判别式的句法分析方法,主要是通过多个特征来消除分析过程中的歧义。判别函数如下:
${{f}{x}}(x)=\arg {{\max }{y\in G(x)}}\left\langle w,\Phi (x,y) \right\rangle $
其中 ( x , y ) (x,y) (x,y)表示与 x x x对应的句法树 y y y的特征向量, w w w表示特征权重。
类似SVM算法,最大间隔马尔可夫网络如果要实现多元分类,可以采用多个独立并且可以并行训练的二元分类器实现。每个二元分类器识别一个短语标记,再通过组合多个二元分类器就可以完成句法分析任务,同时也可以通过并行的方式提升训练速度。
基于CRF的句法分析
将句法分析作为序列标注问题来解决,可以使用CRF模型,是判别式方法,需要融合大量特征。与PCFG的区别:1.概率计算方法和概率归一化方法不同。2.CRF模型最大化的是句法树的条件概率而非联合概率。
Word Embedding
自然语言是一套用来表达含义的复杂系统。在这套系统中,词是表义的基本单元,词向量是用来表示词的向量,也可被认为是词的特征向量或表征。把词映射为实数域向量的技术也叫词嵌入。
数据(文本表示)决定了机器学习的上限,而算法只是尽可能地逼近这个上限,文本表示分为离散表示和分布式表示。
离散表示
one-hot(读热向量编码):是特征工程中常用的方法。
其步骤如下:
- 构造文本分词后的字典,每个分词是一个比特值,比特值为0或者1.
- 每个分词的文本表示为该分词的比特位为1,其余位为0的矩阵表示。
例如:John likes to watch movies. Mary likes too
John also likes to watch football games.
以上两句可以构造一个词典,**{“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10} **
每个词典索引对应着比特位。那么利用One-hot表示为:
**John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0] **
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] …等等,以此类推。
one-hot表示文本信息的缺点:
- 随着语料库的增加,数据特征的维度会增大,产生一个维度很高但很稀疏的矩阵
- 这种表示方法的分词顺序和在句子中的顺序是无关的,不能保留词与词之间的关系信息。
词袋模型:像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。
John likes to watch movies. Mary likes too
John also likes to watch football games.
以上两句可以构造一个词典,**{“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10} **
那么第一句的向量表示为:[1,2,1,1,1,0,0,0,1,1],其中的2表示likes在该句中出现了2次,依次类推。
词袋模型有以下缺点:
- 词向量化后,词与词之间是有大小关系的,不一定词出现得越多,权重越大。
- 词与词之间是没有顺序关系的。
TF-IDF:是一种用于信息检索与数据挖掘的常用加权技术。TF指的是词频Term Frequency。IDF的意思是逆文本频率指数Inverse Document Frequency
字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能代表该文章。
分母之所以+1,是为了避免分母为0.
由 T F − I D F = T F ∗ I D F TF-IDF=TF*IDF TF−IDF=TF∗IDF,当w在文档中出现的次数增大时,TF-IDF的值是减小的。
缺点: 还是没有把词与词之间的关系顺序表达出来。
n-gram模型:为了保持词的顺序,做了一个滑窗的操作,这里的n表示的就是滑窗的大小,例如:2-gram,把2个词当作一组来处理,然后向后移动一个词的长度,再次组成另一组词,把这些生成一个字典,按照词袋模型的方式进行编码得到结果。该模型考虑了词的顺序。
例如:
John likes to watch movies. Mary likes too
John also likes to watch football games.
以上两句可以构造一个词典,{"John likes”: 1, "likes to”: 2, "to watch”: 3, "watch movies”: 4, "Mary likes”: 5, "likes too”: 6, "John also”: 7, "also likes”: 8, “watch football”: 9, “football games”: 10}
那么第一句的向量表示为:[1, 1, 1, 1, 1, 1, 0, 0, 0, 0],其中第一个1表示John likes在该句中出现了1次,依次类推。
缺点:随着n的增大,词表会呈指数膨胀,会越来越大。
NLP之文本聚类
可不可以使用DPC呢?
放弃文本聚类