# 3. 基于隐含主题模型构建主题的关键词抽取方法

气死了，之前写的网速太差保存失败，全没了。再写一遍我就懒得敲公式了！

之前用了聚类的方法来描述文档的主题，然而这样有很多缺点：

* 一篇文档的词是有限的，不一定能聚类出有意义的主题词
* 聚类方法很不可控，受类别大小，聚类算法，距离选择影响很大

既然是获取主题表示，这里就思考使用LDA模型利用外部信息来进行主题建模。

## 3.1 LDA主题模型

LDA模型不是本文重点，作为一个无监督算法，可以得到最终的两个参数矩阵：

![](https://3676603176-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ln2Cwa30IhAwp_pKAP9%2F-LoPUgJeBcYHQ7H2j_AS%2F-LoPX_fKmem-5Z_wc9wG%2Fimage.png?alt=media\&token=af4afde0-28e5-4280-914d-3caf1f7802aa)

前者表示文档j中主题k的概率，后者表示词w上主题k的概率

## 3.2 基于LDA的关键词抽取

在利用大量数据得到LDA模型后，也是先选取候选关键词，然后再进行关键词分配：

* 通过词性标注选取名词短语作为候选关键词
* 计算文档的主题分布和候选关键词的主题分布
* 计算文档和关键词主题分布的相似度，选取相似度最高的一些词

### 3.2.1 计算文档和关键词的主题分布

LDA模型建模得到的词w在主题k上的概率是：

![](https://3676603176-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ln2Cwa30IhAwp_pKAP9%2F-LoPUgJeBcYHQ7H2j_AS%2F-LoPeVDp0elw6nZxS1oj%2Fimage.png?alt=media\&token=7b995a65-a124-4eba-9592-a371a2366b9d)

同时可以得到主题k上的词w的概率：

![](https://3676603176-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ln2Cwa30IhAwp_pKAP9%2F-LoPUgJeBcYHQ7H2j_AS%2F-LoPed7BYYvfUQ1CUGLr%2Fimage.png?alt=media\&token=f7f67c99-89ae-402c-8a2b-7ca6fd90c499)

对于一个候选关键词p，由多个词w组成，得到关键词p对应的主题分布：

![](https://3676603176-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Ln2Cwa30IhAwp_pKAP9%2F-LoPUgJeBcYHQ7H2j_AS%2F-LoQ2VaHykHhD0BF7m0q%2Fimage.png?alt=media\&token=8bbc3391-efed-4544-b471-efe77a66740a)

### 3.2.2 计算文档和候选关键词相似度

得到两个主题分布，直接按照常用的方法计算相似度即可，KL散度，余弦距离，欧氏距离都行。

## 3.3 小结

LDA在这里的作用其实有点像现在的知识表征学习，都是得到文本的一个低维向量表示。不同的是LDA的得到的向量相对深度学习的embedding更具有解释性一点。然后得到了主题分布这样的向量再进行向量的相似度比较就可以得到和文档主题最相似的词作为文档的关键词。
