自然语言处理系列之: 关键词提取算法
大纲
- 关键词提取技术介绍
- 常用的关键词提取算法详解
- 文本关键词提取实战
5.1 关键词提取技术概述
-
有监督
主要通过分类的方式进行,通过构建一个丰富和完善的词表,然后通过判断每个文档与词表中每个文档与词表中每个词的匹配程度,以类似打标签的方式,从而达到关键词提取的效果。能够获得较高精度,但是需要大批量的标注数据,人工成本较高;
-
无监督
不需人工生成、维护的词表,也不需要人工标注语料辅助进行训练,主要有TF-IDF算法、TextRank算法和主题模型算法(LSA、LSI、LDA等);
5.2 关键词提取算法TF-IDF
- TF-IDF(Term Frequency-Inverse Document Frequency,词频-逆文档频次算法):基于统计的计算方法,常用于评估一个文档集中一个词对某份文档的重要程度。TF算法统计一个词在一篇文档中出现的频次,基本思想为:一个词在文档中出现的词数越多,则对文档的表达能力也越强。IDF算法统计一个词在文档集中的多少个文档中出现,基本思想为:若一个词在越少的文档中出现,则对文档的区分能力越强;
t f i j = n i j ∑ k n k j tf_{ij}=\frac{n_{ij}}{\sum _k n_{kj}} tfij=∑knkjnij
i d f i = l o g ( ∣ D ∣ 1 + ∣ D i ∣ ) idf_i=log(\frac{|D|}{1+|D_i|}) idfi=log(1+∣Di∣∣D∣)
t f − i d f ( i , j ) = t f i j × i d f i = n i j ∑ k n k j × l o g ( ∣ D ∣ 1 + ∣ D i ∣ ) tf-idf(i,j) = tf_{ij} \times idf_i = \frac{n_{ij}}{\sum _k n_{kj}} \times log(\frac{|D|}{1+|D_i|}) tf−idf(i,j)=tfij×idfi=∑knkjnij×log(1+∣Di∣∣D∣)
∣ D ∣ |D| ∣D∣为文档集中总文档树, ∣ D i ∣ |D_i| ∣Di∣是文档集中出现词 i i i的文档数量,而分母 + 1 +1 +1则是采用拉普拉斯平滑,避免有部分新词在语料库中未出现而导致分母为零的情况;
5.3 TextRank算法
-
TextRank算法可以脱离语料库,仅对单篇文档进行分析从而提取该文档的关键词,最早用于文档自动摘要,基于句子维度的分析,利用TextRank对每个句子进行打分,挑出分数最高的 n n n个句子作为文档的关键句,从而达到自动摘要的效果,基本思想源于PageRank算法;
-
PageRank
S ( V i ) = ( 1 − d ) + d × ∑ j ∈ l n ( V j ) ( 1 ∣ O u t ( V j ) ∣ × S ( V j ) ) S(V_i)=(1-d)+d\times \sum_{j \in ln(V_j)}(\frac {1}{|Out(V_j)|}\times S(V_j)) S(Vi)=(1−d)+d×j∈ln(Vj)∑(∣Out(Vj)∣1×S(Vj))
-
基本思想
- 链接数量
- 链接质量
- TextRank
W S ( V i ) = ( 1 − d ) + d × ∑ V j ∈ l n ( V i ) ( w j i ∑ V k ∈ O u t ( V j ) w j k × W S ( V j ) ) WS(V_i)=(1-d)+d \times \sum_{V_j \in ln(V_i)}(\frac {w_{ji}}{\sum_{V_{k \in Out(V_j)_{w_{jk}}}}}\times WS(V_j)) WS(Vi)=(1−d)+d×Vj∈ln(Vi)∑(∑Vk∈Out(Vj)wjkwji×WS(Vj))
PageRank是有向无权图,而TextRank进行自动摘要则是有权图。当TextRank应用到关键词提取时,与自动摘要中主要有两点不同:
1. 词与词之间的关联无权重
2. 每个词不是与文档中所有词都有链接
由于第1点,故TextRank中的分数计算公式就变为PageRank一直,通过将得分平均贡献给每个链接的词:
W S ( V i ) = ( 1 − d ) + d × ∑ j ∈ l n ( V i ) ( 1 ∣ O u t ( V j ) ∣ × W S ( V j ) ) WS(V_i)=(1-d)+d \times \sum_{j \in ln(V_i)}(\frac {1}{|Out(V_j)|}\times WS(V_j)) WS(Vi)=(1−d)+d×j∈ln(Vi)∑(∣Out(Vj)∣1×WS(Vj))
5.4 LSA/LSI/LDA算法
-
LSA/LSI算法
-
LSA(Latent Semantic Analysis,潜在语义分析)主要利用SVD(奇异值分解)的方法进行暴力破解,和LSI(Latent Semantic Index,潜在语义索引)通常被认为是同一种算法,只有应用场景略有不同;
-
LSA的主要步骤:
- 使用BOW模型将每个文档表示为向量;
- 将所有的文档词向量拼接构成词-文档矩阵( m × n m\times n m×n);
- 对词-文档矩阵进行SVD操作( [ m × r ] ⋅ [ r × r ] ⋅ [ r × n ] [m \times r]\cdot[r\times r]\cdot[r\times n] [m×r]⋅[r×r]⋅[r×n]);
- 根据SVD的结果,将词-文档矩阵进行奇异值分解到更低维度 k k k( [ m × k ] ⋅ [ k × k ] ⋅ [ k × n ] , 0 < k < r [m \times k]\cdot[k\times k]\cdot[k\times n],0<k<r [m×k]⋅[k×k]⋅[k×n],0<k<r)的近似SVD结果中,每个词和文档均可表示为 k k k个主题构成的空间中的一个点,通过计算每个词和文档的相似度(余弦相似度或KL相似度),然后得到每个文档中对每个词的相似度结果,取相似度最高的一个词即为文档关键词;
-
优点:可映射到低维空间,在有限利用文本语义信息的同时,大幅度降低计算代价,提高分析质量;
-
缺点:SVD计算复杂度非常高,特征空间维度较大,因此计算效率十分低下。同时,LSA对词的频率分布不敏感,物理解释性薄弱;
-
-
LDA(Latent Dirichlet Allocation,隐含狄利克雷分布)算法
-
定义:基于贝叶斯理论,根据对词的共现信息的分析,你和出词-文档-主题的分布,进而将词、文本都映射到一个语义空间中;
-
结合吉布斯采样的LDA模型函数训练过程:
- 随机初始化,对每篇文档中的每个词 w w w,随机赋予一个topic编号 z z z;
- 重新扫描语料库,对每个词 w w w按吉布斯采样公式重新采样其topic,然后在语料中进行更新;
- 重复上述语料库的重采样过程指导吉布斯采样收敛;
- 统计语料库中topic-word贡献频率矩阵,即为LDA模型;
-
5.5 实战提取文本关键词
-
训练关键词提取算法的几个步骤
- 加载已有文档数据集;
- 加载停用词表;
- 对数据集中的文档进行分词;
- 根据停用词表,过滤干扰词;
- 根据数据集训练算法;
-
利用训练好额算法对新文档进行关键词提取的环节:
- 对新文档进行分词;
- 根据停用词表,过滤干扰词;
- 根据训练好的算法提取关键词;
-
实现代码