gensim

训练预料的预处理


训练语料的预处理指的是将文档中原始的字符文本转换成Gensim模型所能理解的稀疏向量的过程

通常,我们要处理的原生语料是一堆文档的集合,每一篇文档又是一些原生字符的集合。在交给Gensim的模型训练之前,我们需要将这些原生字符解析成Gensim能处理的稀疏向量的格式。我们需要先对原始的文本进行分词、去除停用词等操作,得到每一篇文档的特征列表。content_clean就是若干个被拆成单词集合的文档的集合,而dictionary就是把所有单词取一个set(),并对set中每个单词分配一个Id号的map;


gensim

gensim

dictionary+corpora.Dictionary(contents_clean):将语料库contents_clearn中出现的单词编号,将id,word映射存放dictionary中

dictionary.doc2bow(contents_clean)是把文档contents_clean变成一个稀疏向量(这里是bow向量),doc2bow()简单的对每个不同的单词出现的次数进行了计数,将词汇转换成为dictionary中的编号。然后以稀疏向量的形式返回结果。

[(199, 1), (200, 1), (201, 1), (202, 1), (203, 1), (204, 2), (205, 1), (206, 2), (207, 1), (208, 1), (209, 1), (210, 2), (211, 1), (212, 1), (213, 2), (214, 2), (215, 1)]

表明id为199~215的词汇出现了的次数


     首先是模型对象的初始化。通常,Gensim模型都接受一段训练语料(注意在Gensim中,语料对应着一个稀疏向量的迭代器)作为初始化的参数。显然,越复杂的模型需要配置的参数越多。

gensim

中,corpus是一个返回bow向量的迭代器。这两行代码将完成对corpus中出现的每一个特征的IDF值的统计工作。接下来,我们可以调用这个模型将任意一段语料(依然是bow向量的迭代器)转化成TFIDF向量(的迭代器)。需要注意的是,这里的bow向量必须与训练语料的bow向量共享同一个特征字典(即共享同一个向量空间)。

Gensim实现了几种常见的向量空间模型算法:

词频-逆文档频(Term Frequency * Inverse Document Frequency, Tf-Idf)

需要一个词袋形式(整数值)的训练语料库来实现初始化。转换过程中,他将会接收一个向量同时返回一个相同维度的向量,在语料库中非常稀有的属性的权重将会提高。因此,他会将整数型的向量转化为实数型的向量,同时让维度不变。而且。你可以选择是否将返回结果标准化至单位长度(欧几里得范数)。

gensim

潜在语义索引(Latent Semantic Indexing,LSI,or sometimes LSA)

将文档从词袋或TfIdf权重空间(更好)转化为一个低维的潜在空间。对于我们上面用到的玩具级的语料库,我们使用了2潜在维度,但是在真正的语料库上,推荐200-500的目标维度为“金标准”。

gensim

隐含狄利克雷分配(Latent Dirichlet Allocation, LDA)

也是将词袋计数转化为一个低维主题空间的转换。LDA是LSA(也叫多项式PCA)的概率扩展,因此LDA的主题可以被解释为词语的概率分布。这些分布式从训练语料库中自动推断的,就像LSA一样。相应地,文档可以被解释为这些主题的一个(软)混合(又是就像LSA一样)

gensim分层狄利克雷过程(Hierarchical Dirichlet Process,HDP)

是一个无参数贝叶斯方法(注意:这里没有num_topics参数)


gensim