models.word2vec – Word2vec embeddings
该模块使用高度优化的C例程、数据流和Python接口实现word2vec算法系列。
word2vec算法包括skip gram和CBOW模型,使用分层softmax或负采样:Tomas Mikolov等人:向量空间中单词表示的有效估计,Tomas Mikolov等人:单词和短语的分布式表示及其组成性。
在Gensim中,训练单词向量的方法不止Word2Vec。例:Doc2Vec,FastText。
class gensim.models.word2vec.BrownCorpus(dirname)
class gensim.models.word2vec.Heapitem(count, index, left, right)
class gensim.models.word2vec.LineSentence(source, max_sentence_length=10000, limit=None)
class gensim.models.word2vec.PathLineSentences(source, max_sentence_length=10000, limit=None)
class gensim.models.word2vec.Text8Corpus(fname, max_sentence_length=10000)
class gensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, vector_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>, epochs=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), comment=None, max_final_vocab=None, shrink_windows=True)
Bases: gensim.utils.SaveLoad
Train, use and evaluate neural networks(神经网络)被描述在https://code.google.com/p/word2vec/
完成模型训练后(=不再更新,仅查询)只存储并使用self.wv中的KeyedVectors实例以减少内存。
可以通过save()和load()方法存储/加载完整模型。
还可以通过self.wv.save_word2vec_format() 和gensim.models.keyedvectors.keyedvectors.load_word2vec_format()从与原始word2vec实现兼容的格式存储/加载经过训练的word vectors。
参数:
例子:
from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
model = Word2Vec(sentences, min_count=1)
# 模型的保存与加载
model.save("word2vec.model")
model = Word2Vec.load("word2vec.model")
# If you save the model you can continue training it later
model.train([["hello", "world"]], total_examples=1, epochs=1)
这个对象本质上包含单词和嵌入之间的映射。经过培训后,可以直接使用它以各种方式查询这些嵌入
Type:KeyedVectors
vector = model.wv['computer'] # get numpy vector of a word
sims = model.wv.most_similar('computer', topn=10) # get other similar words
将经过训练的向量分离为KeyedVectors的原因是,如果不再需要完整的模型状态(不需要继续训练),则可以放弃其状态,只保留向量及其关键帧。
这会产生一个更小更快的对象,它可以被映射为闪电般快速的加载,并在进程之间共享RAM中的向量:
from gensim.models import KeyedVectors
>>>
# Store just the words + their trained embeddings.
word_vectors = model.wv
word_vectors.save("word2vec.wordvectors")
>>>
# Load back with memory-mapping = read-only, shared across processes.
wv = KeyedVectors.load("word2vec.wordvectors", mmap='r')
>>>
vector = wv['computer'] # Get numpy vector of a word
为一系列句子的对数概率打分。这不会以任何方式改变训练的模型(train会改变已训练好的模型)。
score(sentences, total_sentences=1000000, chunksize=100, queue_factor=2, report_delay=1)
Gensim目前只为分层softmax方案实施了score,因此您需要运行带有hs=1和负值=0的word2vec才能使其工作。
请注意,您应该指定句子总数;如果你要求的分数超过这个句子数,你会遇到问题,但是设置太高的值是没有效率的。
根据一系列句子更新模型的神经权重。
train(corpus_iterable=None, corpus_file=None, total_examples=None, total_words=None, epochs=None, start_alpha=None, end_alpha=None, word_count=0, queue_factor=2, report_delay=1.0, compute_loss=False, callbacks=(), **kwargs)
注意:为了支持从(初始)alpha到min_alpha的线性学习速率衰减,以及准确的进度百分比记录,必须提供total_examples(句子数)或total_words(句子中原始单词数)。如果句子与前面为build_vocab()提供的语料库相同,那么只需使用total_examples=self.corpus_count即可。
警告:为了避免在模型自身进行多次训练的能力方面出现常见错误,必须提供一个明确的epochs参数。在只调用一次train()的常见和推荐情况下,可以设置epochs=self.epochs。
参数:
from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
>>>
model = Word2Vec(min_count=1)
model.build_vocab(sentences) # prepare the model vocabulary
model.train(sentences, total_examples=model.corpus_count, epochs=model.epochs) # train word vectors
(1, 30)