主题模型

首先,需要对英文文本做一些预处理工作,譬如去停用词,对文本进行tokenize,stemming以及过滤掉低频的词

然后,通过这些文档抽取一个“词袋(bag-of-words)“,将文档的token映射为id,然后就可以  将字符串 转换为用id表示的文档向量

{‘a’: 0, ‘damaged’: 1, ‘gold’: 3, ‘fire’: 2, ‘of’: 5, ‘delivery’: 8, ‘arrived’: 7, ‘shipment’: 6, ‘in’: 4, ‘truck’: 10, ‘silver’: 9}

[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1)], [(0, 1), (4, 1), (5, 1), (7, 1), (8, 1), (9, 2), (10, 1)], [(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (10, 1)]]

有了这些信息,我们就可以基于这些“训练文档”计算一个TF-IDF“模型”,用tf-idf值表示的文档向量:

有了tf-idf值表示的文档向量,我们就可以训练一个LSI模型,我们设置topic数为2:

lsi的物理意义不太好解释,不过最核心的意义是将训练文档向量组成的矩阵SVD分解,并做了一个秩为2的近似SVD分解,有了这个lsi模型,我们就可以将文档映射到一个二维的topic空间中:

把文档建立成索引

最后就是计算其和index中doc的余弦相似度了

lda模型中的每个主题单词都有概率意义,其加和为1,值越大权重越大,物理意义比较明确,不过反过来再看这三篇文档训练的2个主题的LDA模型太平均了,没有说服力。

原文地址:https://www.cnblogs.com/ldphoebe/p/5660111.html