Python/gensim主題模型庫

每個py文件稱之爲模塊,每個具有init.py文件的目錄被稱爲包。只要模塊或者包所在的目錄在sys.path中,就可以使用import 模塊或import 包來使用。

  1. 如果要使用的模塊和當前文件在同一目錄,只要import相應的文件名就可以。
  2. 如果使用的模塊不在同一目錄下,使用sys.path.append方法將模塊所在目錄加入到搜素目錄中。然後進行import即可。這種方法是暫時的。
  3. 使用PYTHONPATH變量,不同的路徑之間用分號隔開。設置的路徑會自動加入到sys.path中,加入模塊時使用import即可。

查看python已經安裝的模塊
help(‘modules’)

安裝模塊
1.直接添加到路徑下。

import sys
sys.path.append(“path”)

2.單文件模塊
直接把文件拷貝到$python_dir/lib。

gensim庫

主題模型是對文字隱含主題進行建模的方法。主題表現爲詞語的條件概率分佈,與主題關係越密切的詞語,條件概率就越大。
主題模型
對於每一篇文檔,左邊的矩陣C是已知的,右邊兩個矩陣未知,主題模型通過大量已知的”詞語-文檔”矩陣C,通過訓練,推導出右邊的兩個矩陣。主題模型訓練的方法有兩種,pLSA和LDA。
使用模型將文檔vector轉換成另一個vector,這樣可以修正vector的含義,減少噪音,期望達到更好的效果。
from gensim import corpora, models, similarities
//從texts中得到distinct
dictionary=corpora.Dictionary(texts)
dictionary.save(‘data.dict’)
//將得到的主題word賦予相應的數字id
dictionary.token2id
//加載dict數據文件
dictionary=corpora.Dictionary.load(‘data.dict’)

//將一個文檔轉換爲vector
new_doc=”Human computer interaction”
//計算文檔中主題詞的個數,(distinctid,appears)
new_vec=dictionary.doc2bow(new_doc.lower().split())
corpus=[dictionary.doc2bow(text) for text in texts]
corpora.MmCorpus.serialize(‘vector.mm’,corpus)
//加載mm文件
corpus=corpora.MmCorpus(‘vector.mm’)

//使用TF-IDF模型
tfidf=models.TfidfModel(corpus)
//使用tfidf模型,將詞袋計數vector轉換爲TF-IDF權重vector
vec=[(0,1),(4,1)]
print(tfidf[vec])
//轉換整個corpus
corpus_tfidf=tfidf[corpus]
//計算給定文檔和corpus中文檔的相似度,num_features指定得到的distinct個數
index=similarities.SparseMatrixSimilarity(tfidf[corpus],num_features=12)
//vec是給定的文檔的vector
sims=index[tfidf[vec]]
print(list(enumerate(sims)))

Topics&Transformations
LSI(LSA)模型

模型可以將詞袋模型或TF-IDF模型向量空間轉換爲低緯度(Topic)的空間。LSI模型訓練過程中可以增加語料,增加訓練語料時可以繼續使用模型,不影響模型的訓練。
corpus_tfidf=tfidf[corpus]
//兩個Topic
lsi=models.LsiModel(corpus_tfidf,id2word=dictionary,num_topics=2)
//transform to lsi
corpus_lsi=lsi[corpus_tfidf]
lsi.print_topics(2)
//查看corpus中的文檔分類
for doc in corpus_lsi:
print(doc)
//增加訓練文檔
lsi.add_documents(another_tfidf_corpus)
lsi.save(‘model.lsi’)
lsi=models.LsiModel.load(‘model.lsi’)
//對生成的向量空間建立索引
index=similarities.MatrixSimilarity(lsi[corpus])
similarities.MatrixSimilarity只有在所有的向量都存在內存中時才能夠運行。similarities.Similarity可以將索引分成多個文件存儲在磁盤,不佔用大量的內存。
index.save(‘xxx.index’)
index=similarities.MatrixSimilarity.load(‘xxx.index’)
//比較新文檔和索引文檔的相似度,返回的餘弦相似度範圍(-1,1)
sims=index[vec_lsi]
print(list(enumerate(sims)))

Random Projections,RP模型
RP模型減少向量空間維數,和TF-IDF的文檔距離類似。RP模型推薦的維度爲(100,1000),依賴於數據集。
model=rpmodel.RpModel(tfidf_corpus,num_topics=200)

LDA(latent dirchlet allocation)模型

LDA模型將詞袋模型計數向量空間轉換爲低緯度的主題空間。LDA以PLSA爲基礎,加上貝葉斯先驗的一種非監督機器學習算法。LDA的主題就是單詞的概率分佈(每個主題由多個詞的概率表示),LDA假設每個詞都由一個潛在隱藏的主題中抽取出來,每個文檔由多個主題混合而成。
LDA算法的輸入:
分詞後的文檔集合,通常一篇文章一行;主題數K和參數αβ

gamma函數
gamma函數就是階乘的函數形式。
gamma
因此,gamma函數有性質:
性質1
性質2

beta分佈
隨機變量X服從參數爲αβ 的beta分佈通常寫作:beta
beta
B函數和Gamma函數有關係:
b

model=ldamodel.LdaModel(bow_corpus,id2word=dictionary,num_topics=100)

Hierarchical Dirichlet Process,HDP
HDP模型是一個無參數的貝葉斯方法,可能會有部分主題丟失。
model=hdpmodel.HdpModel(bow_corpus,id2word=dictionary)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章