Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist,致力于推进世界人工智能化进程。制定并实施 UAI 中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。
作为行业领导者,他和UAI一起在2014年创建了TASA(中国最早的人工智能社团), DL Center(深度学习知识中心全球价值网络),AI growth(行业智库培训)等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,生产翻译了全球第一本深度学习入门书《神经网络与深度学习》,生产的内容被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师好评。
第一眼
需要导入三个包包,后面一定会用到这些东西
from gensim import corpora, models, similarities
语料corpora就是一系列文档的集合,其中的词已经使用了字典进行相应的转换,成为一个个数字,我们可以通过字典的对应关系从数字找到对应的词。语料中的每个项对应着每一篇使用稀疏向量表示的文档。后面我们会谈谈何为向量空间模型(Vector Space Model)。如果你熟悉向量空间模型,你可能已经知道了是如何parse文档的方式,分词的好坏直接影响到后续的应用。
在例子中,会将所有的语料都以一个python list的形式存放在内存中。然而,gensim支持对文档进行读取迭代。对很大的语料,当然将其存放在硬盘上更加合适,并顺序地进行读取,一次一个。gensim的实现方式正是使用了这样的方式,独立于语料的规模和内存。
首先,我们初始化一个转换(transformation):
tfidf = models.TfidfModel(corpus)
转换的作用是将
从一个矩阵存储的文件载入语料迭代器
corpus = corpora.MmCorpus('/path/to/corpus.mm')
初始化Latent semantic indexing,话题数设置为200,也就是潜在的维度数是200
lsi = models.LsiModel(corpus, num_topics=200)
将另外一个语料库转换成潜在空间并且索引这个空间
index = similarities.MatrixSimilarity(lsi[another_corpus])
计算查询和索引文档的相似性
sims = index[query]
主要通过本文梳理清楚使用LDA和LSI的基本流程,对于LDA相关的基础知识需要花一定的时间来学习。比如说概率图模型,Gibbs Sampling,MCMC。其实使用起来自然很简单,就是获得一个最终的分布而已。但是真正弄个清楚还是需要比较强的统计学和算法的基础。之前在学习过程中,系统地学习过了MCMC,对于其中设计的一系列证明也是推导过。不过那时候还没有很直观的了解,直到现在使用了MCMC来解决LDA的计算问题才发现它厉害的地方。现在网上有不少对LDA的介绍,也会涉及LSI,大家感兴趣可以去看看。
我最近在翻译一本书,也是关于这个的,那本书介绍了一个python的库PyMC,大家一看就知道了,MC,Markov chain。想象计算机发明之初,最原始的目标就是用来进行统计模拟。这才是计算机发展的原动力啊!