gensim學習筆記

2022-05-18 08:07:26 字數 2978 閱讀 7862

1、詞向量建模的word2vec模型和用於長文字向量建模的doc2vec模型

在gensim中實現word2vec模型非常簡單。首先,我們需要將原始的訓練語料轉化成乙個sentence的迭代器;每一次迭代返回的sentence是乙個word(utf8格式)的列表:

class

mysentences(object):

def__init__

(self, dirname):

self.dirname =dirname

def__iter__

(self):

for fname in

os.listdir(self.dirname):

for line in

open(os.path.join(self.dirname, fname)):

yield

line.split()

sentences = mysentences('

/some/directory

') #

a memory-friendly iterator

接下來,我們用這個迭代器作為輸入,構造乙個gensim內建的word2vec模型的物件(即將原始的one-hot向量轉化為word2vec向量):

model = gensim.models.word2vec(sentences)
我們也可以指定模型訓練的引數,例如採用的模型(skip-gram或是cbow);負取樣的個數;embedding向量的維度等。

model = gensim.models.word2vec.load('

/tmp/mymodel')

model.train(more_sentences)

若要檢視某乙個word對應的word2vec向量,可以將這個word作為索引傳遞給訓練好的模型物件:

model['

computer

'] #

raw numpy vector of a word

doc2vec是mikolov在word2vec基礎上提出的另乙個用於計算長文字向量的工具。它的工作原理與word2vec極為相似——只是將長文字作為乙個特殊的token id引入訓練語料中。在gensim中,doc2vec也是繼承於word2vec的乙個子類。因此,無論是api的引數介面還是呼叫文字向量的方式,doc2vec與word2vec都極為相似。

主要的區別是在對輸入資料的預處理上。doc2vec接受乙個由labeledsentence物件組成的迭代器作為其建構函式的輸入引數。其中,labeledsentence是gensim內建的乙個類,它接受兩個list作為其初始化的引數:word list和label list。

from gensim.models.doc2vec import

labeledsentence

sentence = labeledsentence(words=[u'

some

', u'

words

', u'

here

'], tags=[u'

sent_1

'])

類似地,可以構造乙個迭代器物件,將原始的訓練資料文字轉化成labeledsentence物件:

class

labeledlinesentence(object):

def__init__

(self, filename):

self.filename =filename

def__iter__

(self):

for uid, line in

enumerate(open(filename)):

yield labeledsentence(words=line.split(), labels=['

sent_%s

' % uid])

準備好訓練資料,模型的訓練便只是一行命令:

from gensim.models import

doc2vec

model = doc2vec(dm=1, size=100, window=5, negative=5, hs=0, min_count=2, workers=4)

該**將同時訓練word和sentence label的語義向量。如果我們只想訓練label向量,可以傳入引數train_words=false以固定詞向量引數,傳入引數訓練可用

model.train(sentense)
2、ldamodel lda主題聚類模型

首先介紹下ldamodel的幾個屬性和方法。

如果用get_term_topics(word_id),只會獲得在整個樣本下,某個詞屬於某些主題的可能性,而並不是針對特定文件的某個詞屬於某些主題的可能性。顯然,使用get_document_topics(bow, per_word_topics=true)可以得到,比如:

整個返回是個元組,形式為([a],[b],[c]),上圖中第一行為a列表,顯示的內容是可能性大於minimum_probability的主題及其可能性;第二行為b列表,顯示每個詞及其可能屬於的主題,且其可能性大於minimum_phi_value;第三行為c列表,顯示每個詞及其可能屬於的主題以及可能性。如果只使用get_document_topics(bow)那麼只會顯示第一行資料。

演算法部分,確實主題是根據上下文有變化的,在gensim包中,應用的是em演算法,但卻不是原始**中使用的變分em演算法,當然主要思想是一致的。就像批最優化與隨機最優化的關係,哈夫曼的演算法中,沒有將所有文件整體帶入進行迭代計算,而是對每一篇文件進行迭代計算,使得當前文件具有最優的doc-topic和topic-word分布,直至所有文件迭代完。所以在計算新文件時,只需對新文件再進行一次迭代更新(這也是為什麼num_updates等於文件數的,因為每個文件都會更新一次)就可獲得新文件相應的分布。

機器學習必會工具gensim

1 import jieba 2import gensim 3from gensim import corpora 4from gensim import models 5from gensim import similarities 67 l1 你的名字是什麼 你今年多少歲 你今年幾歲了 你有多高...

gensim安裝教程

1.安裝 numpy 1.14.5 mkl cp37 cp37m win amd64.whl 安裝該包前需要解除安裝numpy,cp後面的數字和python版本對應。安裝成功如下圖 2.安裝scipy 1.1.0 cp37 cp37m win amd64.whl,方法同上。安裝命令 pip inst...

Anaconda環境下安裝gensim

進入anaconda prompt 因為在windows中pip install gensim 這條命令安裝的非常慢,所以沒有選擇嘗試這條命令。看到有部落格說可以用conda install gensim這條命令,不過我沒有試過。一開始選擇了豆瓣的映象 但是中途出錯,找不到版本 接著嘗試清華映象 安...