主题模型
首先,需要对英文文本做一些预处理工作,譬如去停用词,对文本进行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模型太平均了,没有说服力。