自然语言处理8——语义分析

关键词提取

定义

关键词:代表文章重要内容的一组词

应用:信息获取、自动摘要、文本聚类、文本分类

分类:

  • 有监督学习
  • 无监督学习
    • TF-IDF
    • TextRank
    • 主题模型:LSA、LAI、LDA

TF-IDF

本质:找特征值,在给定一篇文章的情况下,找到一个代表文章最强的词

TF:一个词在一篇文档中出现的频次,越高对文档的表达能力越强 t f i j = n i j ∑ k n k j tf_{ij} = \frac{n_{ij}}{\sum_{k}n_{kj}} tfij=knkjnij,分母为第j篇文档所有词的个数,除以分母是为了归一化。

IDF:一个词在文档集合中多少文档中出现,一个词出现的次数越少,对文档的区分能力越强。 i d f i = l o g ( ∣ D ∣ 1 + ∣ D i ∣ ) idf_i = log(\frac{|D|}{1 + |D_i|}) idfi=log(1+DiD),其中 ∣ D i ∣ |D_i| Di为出现词i的文档数量,分母+1是为了提高鲁棒性,避免 D i D_i Di为0

TF-IDF: = t f i j ∗ i d f j tf_{ij}*idf_j tfijidfj

TextRank

仅对单篇文档进行分析提取该文档的关键词,参考的是PageRank

PageRank:

链接数量:一个网页被越多的其他网页链接,说明这个网页越重要

链接质量:一个网页被一个越高权值的网页链接,说明这个网页越重要

链接网页的分数确定:将所有网页的得分初始化为1,通过多次迭代对每个网页的分数进行收敛,收敛时的得分是网页的最终得分。

PageRank是有向无权图

TextRank:把一篇文章中所有的词都画到一张图里,词与词之间有关系就画个边,根据图的拓扑结构看关系。

TextRank是有向有权图,以PageRank为基础,TextRank在计分时除了除了考虑链接句的重要性,还要考虑两个句子间的相似性。

W S ( V i ) = ( 1 − d ) + d ∗ ∑ j ∈ I n ( V i ) 1 O U T ( V j ) W S ( V j ) WS(V_i) = (1-d) + d*\sum \limits_{j\in In(V_i)} \frac{1}{OUT(V_j)}WS(V_j) WS(Vi)=(1d)+djIn(Vi)OUT(Vj)1WS(Vj)

其中d是一个阻尼系数,为了防止一些孤立网页的得分为0; I n ( V i ) In(V_i) In(Vi) V i V_i Vi的入链集合; W S ( V j ) WS(V_j) WS(Vj)指网页 V j V_j Vj的得分。

应用 关键词抽取 自动摘要
权重 词与词之间的关联没有权重 句子之间的关联有权重
链接 每个词不是与文档中所有词都有链接 每个句子与其他句子都有链接关系

TextRank用窗口看链接,窗口中的词相互间都有链接关系。

将句子分词后,设定窗口大小,从头到尾把分词结果浏览一遍,看两个词出现了几次,从而计算链接关系。

一般来说TF-IDF和TextRank算法能够满足大部分关键词提取的任务,但有些关键词并不一定会显式地出现在文档中,且这两种方法仅用到了文本中的统计信息,对文本中丰富的信息无法充分地利用,尤其是其中的语义信息。

效果最好的是主题模型的方法。

主题模型

主题模型认为词与文档之间没有直接的联系,他们之间通过主题串联起来。

每篇文档中都含有一个或多个主题,看哪些词属于同一个主题,可以帮助计算词语权重,两篇文档的语义越接近,重复的词语越多。

模型结构:

在这里插入图片描述

公式:计算词出现在文档中的概率 p ( w i ∣ d j ) = ∑ k = 1 K p ( w i ∣ t k ) p ( t k ∣ d j ) p(w_i|d_j) = \sum_{k=1}^K p(w_i|t_k)p(t_k|d_j) p(widj)=k=1Kp(witk)p(tkdj)

  • p ( w i ∣ t k ) p(w_i|t_k) p(witk):主题的词分布,词和某个主题的关联度
  • p ( t k ∣ d j ) p(t_k|d_j) p(tkdj):文档的主题分布,主题和文档之间的关联度

解法:LSA/LSI:矩阵的奇异值分解;LDA:贝叶斯方法

LSA:潜在语义分析

采用纯数学矩阵变换的方法对文档潜在的主题进行分析,一个主题有多个主题词,从矩阵的角度说,就是矩阵的主对角线值。

步骤:

  • 使用BOW(Bag of word)模型将每个文档表示为向量
    • 将所有可能的词语构成一个向量,每个词都是独立的,文档中该词出现的次数填入对应向量的位置。
  • 将所有文档-词向量拼接为m*n维的词-文档矩阵。
    • 每个句子都可以构建成n维向量,有m条句子
  • 对词-文档矩阵进行SVD分解 [ m ∗ r ] [ r ∗ r ] [ r ∗ n ] [m*r][r*r][r*n] [mr][rr][rn]
    • 奇异值分解(SVD):类似主成分分析,使用关键特征对对象进行描述,相当于找到矩阵的特征值,奇异值越大压缩程度越大
  • 将词-文档矩阵映射到一个更低维度k的近似SVD结果上,每个词和文档都可以表示为k个主题构成的空间中的一个点 [ m ∗ k ] [ k ∗ k ] [ k ∗ n ] [m*k][k*k][k*n] [mk][kk][kn]
  • 计算每个词和文档的相似度,可以得到每个文档中对每个词的相似度结果

注:文档-词矩阵非常稀疏,所以需要降维找到最合适的特征词。

优势

通过映射将高维的映射到低维的语义空间,挖掘出对词文档的浅层语义信息;大大降低计算的代价,提高分析质量。

缺点

奇异值矩阵分解时的复杂度很高,计算效率低下

LSI:潜在语义索引

对文档的潜在语义进行分析后,利用分析的结果建立相关的索引。

应用:对文档-词矩阵的降维

LDA

使用贝叶斯概率,主题表现为一系列相关词语,即主题是词汇表上词语的条件概率分布,与主题关系越密切的词语,条件概率越大。

基本假设:

  • 文档集合中所有文本均共享一定数量的隐含主题
  • 隐含主题由一系列词构成

通过采样计算概率,利用概率分布将文档集转为隐含主题的集合

步骤:

  • 输入:文档集合 D = { d 1 , d 2 . . . d n } D = \begin{Bmatrix}d_1,d_2...d_n\end{Bmatrix} D={d1,d2...dn}和m个主题,但是m个主题是什么不知道

  • 计算文档-主题关系:每一篇文档 d i d_i di在所有主题上的概率值 π \pi π π i = ( π i , 1 , . . . π i , m ) \pi_i=(\pi_{i,1},...\pi_{i,m}) πi=(πi,1,...πi,m),在包含的主题上有值

    • 根据先验概率选择一篇文档
    • 用文档通过采样方式生成主题的分布
  • 计算主题-词的概率: p ( p i , 1 , . . . p i , m ) p(p_{i,1},...p_{i,m}) p(pi,1,...pi,m)

    • 从主题中取样,生成生成文档第n个词的主题编号 z m , n z_{m,n} zm,n
    • 通过采样生成主题 z m , n z_{m,n} zm,n对应的词语分布,取样生成词语
优点:

可以衡量文档间的语义相似性

解决多义词问题:通过主题的匹配来解决

可以排除文档中噪声的影响:因为噪声往往处于次要主题中,可忽略

是无监督的,不需要任何人工标注过程、语言无关的

应用

信息检索、图像分类、文本分类等

词义消歧

定义:一词多义的情况使得在特定上下文下应该选择哪个意思?

方法:

  • 基于规则
  • 统计机器学习:有监督、无监督
  • 基于词典的
符号 含义
w 目标词
s 1 , . . . , s k s_1,...,s_k s1,...,sk 词的k个意思
c 1 , . . . c l c_1,...c_l c1,...cl 词的上下文
v 1 , . . . v i , . . . . v j v_1,...v_i,....v_j v1,...vi,....vj 词上下文的特征词

有监督消歧

将消歧问题转为分类问题

用目标词上下文作为输入,输出该词属于哪个词义类别,通常用贝叶斯方法。

语料库标注:采用伪词方法,造出来有歧义的词,如:red-banana,将所有出现red和banana的地方都用这个替换,如果原来是red则标为1,是banana标为2。

选择在当前上下文的情况下概率最大的词义 s = a r g m a x P ( s k ∣ c ) = a r g m a x P ( c ∣ s k ) P ( s k ) = P ( s k ) ∏ v j P ( v j ∣ s k ) s = argmaxP(s_k|c) = argmaxP(c|s_k)P(s_k)=P(s_k)\prod_{v_j}{P(v_j|s_k)} s=argmaxP(skc)=argmaxP(csk)P(sk)=P(sk)vjP(vjsk)

注:判断时可以加上log变为累加便于判断

  • 训练:

    P ( v j ∣ s k ) = C ( v j , s k ) C ( s k ) P(v_j|s_k) = \frac{C(v_j,s_k)}{C(s_k)} P(vjsk)=C(sk)C(vj,sk) P ( s k ) = C ( s k ) C ( w ) P(s_k) = \frac{C(s_k)}{C(w)} P(sk)=C(w)C(sk)

  • 消歧:选择概率最大的词义

基于信息论方法

找上下文特征中最有用的特征,只要遇到这个词就找这个特征值(指示器),就可以根据这个特征值选择词义。

信息的量值规范化(如何找到指示器):Flip-Flop算法

思想:给定多个词存在多个语义,指示器可能有多个取值,每个取值可能对应一个语义

步骤:

  • 随机地将词的多个语义分为两类 X = { X 1 , X 2 } X = \begin{Bmatrix}X_1,X_2\end{Bmatrix} X={X1,X2}
  • 对应的指示器取值也分为两类, Y = { Y 1 , Y 2 } Y = \begin{Bmatrix}Y_1,Y_2\end{Bmatrix} Y={Y1,Y2},计算互信息的值 I ( X ; Y ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) l o g P ( x , y ) p ( x ) p ( y ) I(X;Y)=\sum \limits_{x\in X} \sum \limits_{y \in Y}p(x,y)log\frac{P(x,y)}{p(x)p(y)} I(X;Y)=xXyYp(x,y)logp(x)p(y)P(x,y),根据X分类调整Y,使得互信息值最大,再根据Y调整X的分类,直到互信息的值不变化或者变化很小

划分完看上下文指示器的取值

基于词典的消歧

基于语义词典的消歧

语义词典:给定词,有几个语义,语义的描述是什么,每个意思会用一段话描述出来。

在给定句子中的上下文的词与给定的上下文的解释中词有重叠的,就认为是这个词义。

缺点:词典是用尽量概况的方式描述词义,而实际语料是用大量重复的实例来描述,所以效果不理想

改进:取上下文语义与歧义词语义的交集;通过类义词典中的同义词来扩展上下文的每个词

基于义类词典消歧

给每个词一个语义(主题)范畴,根据目标词上下文的语义范畴来确定当前词的词义范畴。

缺点:一般的主题范畴不适用于特殊领域;一般的主题领域也会有覆盖面的问题(时效性问题);当语义范畴与主题很好地吻合时效果很好,但是一个语义范畴对应多个主题时效果不好。

改进:根据统计方法增加语料库的主题分类

在第二语言语料库翻译基础上的消歧

将需要消歧的语言称为第一语言,另一种称为第二语言

看第二语言对应的是什么词的含义

问题:出现的句子和语料库中的句子不一定一一对应,因此需要看给出的词不同的词义与相关词翻译的次数,找出现次数最高的

每篇文本一个语义,每个搭配一个语义

每篇文本中目标词义有很强的一致性,可以抵消信息不足和误导信息的影响

某个固定搭配的词义都是一个含义,但也不能完全确定一个词的意义,如:打酱油;打翻了酱油

无监督消歧

没有标注也没有词典

EM算法

评价函数: I ( C ∣ μ ) = ∑ i = 1 I l o g ∑ k = 1 K P ( c i ∣ s k ) P ( s k ) I(C|\mu) = \sum \limits_{i=1}^I log\sum \limits_{k=1}^K P(c_i|s_k)P(s_k) I(Cμ)=i=1Ilogk=1KP(cisk)P(sk),构建的好的话上下文在当前词义的情况下出现概率高。

步骤:

  • E过程: h i k = P ( c i ∣ s k ) ∑ k = 1 K P ( c i ∣ s k ) P ( c i ∣ s k ) = ∏ P ( v j ∣ s k ) h_{ik} = \frac{P(c_i|s_k)}{\sum \limits_{k=1}^K P(c_i|s_k)} P(c_i|s_k) = \prod P(v_j|s_k) hik=k=1KP(cisk)P(cisk)P(cisk)=P(vjsk)

  • M过程:根据期望值优化 P ( v j ∣ s k ) = ∑ i = 1 I ∑ h i k Z j P ( s k ) = ∑ i = 1 I h i k I P(v_j|s_k) = \frac{\sum \limits_{i=1}^I \sum h_{ik}}{Z_j} P(s_k) = \frac{\sum \limits_{i=1}^I h_{ik}}{I} P(vjsk)=Zji=1IhikP(sk)=Ii=1Ihik

  • 直到评价函数的值不再增长结束该过程

问题:当前词的歧义值K如何确定

随便取一个K,如果涨幅明显,说明这个语义数目可取;若训练数据规模较大,K也可以取大点。

优点:适合区分有细微差别的语义用法;对领域相关性很强(即不同的语义属于不同的领域)的语义算法效果很好。

缺点:对领域独立性语义的效果不好

应用

自然语言生成、计算词典编撰学(自动识别词典条目中最重要的搭配)、句法分析、语料库语言学研究、信息检索

往期文章:
自然语言处理1——NLP概述
自然语言处理2——语言学基础
自然语言处理3——语言学资源
自然语言处理4——统计语言模型
自然语言处理5——词法分析
自然语言处理6——HMM模型和词性标注
自然语言处理7——句法分析

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐