翻譯自
2018-11-28
word2vec算法包括skip-gram和CBOW模型,使用分層softmax或負(fù)抽樣
Tomas Mikolov et al: Efficient Estimation of Word Representations in Vector Space, Tomas Mikolov et al: Distributed Representations of Words and Phrases and their Compositionality.
>>> from gensim.test.utils import common_texts, get_tmpfile
>>> from gensim.models import Word2Vec
>>>
>>> path = get_tmpfile("word2vec.model")
>>>
>>> model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
>>> model.save("word2vec.model")
訓(xùn)練過程是流式的,意味著句子可以是生成器,即時(shí)從磁盤讀取輸入數(shù)據(jù),而無需將整個(gè)語料庫加載到RAM中。這也意味著您可以在以后繼續(xù)訓(xùn)練模型:
>>> model = Word2Vec.load("word2vec.model")
>>> model.train([["hello", "world"]], total_examples=1, epochs=1)
(0, 2)
訓(xùn)練好的詞向量存儲(chǔ)在model.wv的KeyedVectors實(shí)例
>>> vector = model.wv['computer'] # numpy vector of a word
將訓(xùn)練過的矢量分成KeyedVectors的原因是,如果你不再需要完整的模型狀態(tài)(不需要繼續(xù)訓(xùn)練),這個(gè)狀態(tài)就可以被消除,在訓(xùn)練時(shí),就可以在內(nèi)存中生成一個(gè)更小更快速的輕量級(jí)快速導(dǎo)入和共享的對象。
>>> from gensim.models import KeyedVectors
>>>
>>> path = get_tmpfile("wordvectors.kv")
>>>
>>> model.wv.save(path)
>>> wv = KeyedVectors.load("model.wv", mmap='r')
>>> vector = wv['computer'] # numpy vector of a word
Gensim 也可以c語言形式的詞向量,作為keyedVectors實(shí)例
>>> from gensim.test.utils import datapath
>>>
>>> wv_from_text = KeyedVectors.load_word2vec_format(datapath('word2vec_pre_kv_c'), binary=False) # C text format
>>> wv_from_bin = KeyedVectors.load_word2vec_format(datapath("euclidean_vectors.bin"), binary=True) # C binary format
從c語言形式獲取的詞向量要再訓(xùn)練是不可能的,因?yàn)樵~頻和二叉樹以及隱藏權(quán)重都丟失了。為了繼續(xù)訓(xùn)練,你需要保存完整的 Word2Vec對象狀態(tài),應(yīng)該是通過 save()函數(shù)保存,而不是單單KeyedVectors對象。
你可以實(shí)現(xiàn)不同的NLP詞任務(wù)通過一個(gè)訓(xùn)練好的模型。其中一些是內(nèi)建的,你可以查看 gensim.models.keyedvectors.
如果你訓(xùn)練模型結(jié)束了(不再更新,僅僅查詢),你可以將其轉(zhuǎn)換為KeyedVectors對象
>>> word_vectors = model.wv
>>> del model
修建不需要的模型狀態(tài),集占用更少的內(nèi)存并且快速讀取和共享
注意有一個(gè) gensim.models.phrases模塊,可以幫助你自動(dòng)檢測超過一個(gè)單詞的詞組。使用詞組,你可以一個(gè)word2vec模型,這個(gè)模型的詞會(huì)都是多詞表示,比如 new_york_times 或者 financial_crisis。
>>> from gensim.test.utils import common_texts
>>> from gensim.models import Phrases
>>>
>>> bigram_transformer = Phrases(common_texts)
>>> model = Word2Vec(bigram_transformer[common_texts], min_count=1)
class gensim.models.word2vec.BrownCorpus(dirname)
Bases: object
從布朗數(shù)據(jù)集迭代sentences
class gensim.models.word2vec.LineSentence(source, max_sentence_length=10000, limit=None)
Bases: object
迭代包含sentences的文件:一行=一個(gè)sentence。words必須是被預(yù)處理好的并且由空格符分開
參數(shù):
- source (string or a file-like object) :文件在磁盤上的路徑或者一個(gè)被打開的文件對象
- limit (int or None):選擇的行數(shù),默認(rèn)為None
>>> from gensim.test.utils import datapath
>>> sentences = LineSentence(datapath('lee_background.cor'))
>>> for sentence in sentences:
... pass
class gensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, size=100, alpha=0.025, window=5, min_count=5, \
max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, \
sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, \
hashfxn=<built-in function hash>, iter=5, null_word=0, trim_rule=None, \
sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), max_final_vocab=None)
Bases: gensim.models.base_any2vec.BaseWordEmbeddingsModel
訓(xùn)練、使用和評(píng)估 https://code.google.com/p/word2vec/描述的神經(jīng)網(wǎng)絡(luò)。
一旦你的模型訓(xùn)練完畢,只用存儲(chǔ)self.wv的KeyedVectors實(shí)例來減少內(nèi)存。
模型可以通過save()和load()方法來保存和恢復(fù)。
下面是一些重要的參數(shù):
wv
Word2VecKeyedVectors--這個(gè)至關(guān)重要的對象保存了words和embeddings的映射關(guān)系。訓(xùn)練完畢后,可以使用它通過不同的方法進(jìn)行查詢embeddings。
vocabulary
Word2VecVocab--這個(gè)對象展示了模型的字典。除了記錄了所有唯一的word,這個(gè)對象也提供了額外的功能,比如創(chuàng)建一個(gè)霍夫曼樹(越頻繁的word越接近于樹根),或者消除極其少見的word。
trainables
Word2VecTrainables--這個(gè)對象展示了訓(xùn)練嵌入時(shí)所用的內(nèi)部的淺層神經(jīng)網(wǎng)絡(luò)。在兩種可用的訓(xùn)練模式(CBOW或SG)中,網(wǎng)絡(luò)的語義略有不同,但您可以將其視為具有我們在語料庫上訓(xùn)練的單個(gè)投影和隱藏層的NN。然后將權(quán)重用作嵌入(這意味著隱藏層的大小等于self.size的特征數(shù))。
參數(shù)
- size (int, optional) –詞向量的維度
- window (int, optional) –在一個(gè)sentence中目標(biāo)詞和歷史詞的最大距離
- min_count (int, optional) -忽視所有頻次少于此值的詞
- workers (int, optional) – 用多少個(gè)線程去計(jì)算這個(gè)模型
- sg ({0, 1}, optional) – 訓(xùn)練算法:1是skip-gram, 0是CBOW。
- hs ({0, 1}, optional) – 1是使用hierarchical softmax , 0是使用非0,負(fù)采樣