gensim Word2Vec

翻译自
2018-11-28
word2vec算法包括skip-gram和CBOW模型,使用分层softmax或负抽样
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")

训练过程是流式的,意味着句子可以是生成器,即时从磁盘读取输入数据,而无需将整个语料库加载到RAM中。这也意味着您可以在以后继续训练模型:

>>> model = Word2Vec.load("word2vec.model")
>>> model.train([["hello", "world"]], total_examples=1, epochs=1)
(0, 2)

训练好的词向量存储在model.wv的KeyedVectors实例

>>> vector = model.wv['computer']  # numpy vector of a word

将训练过的矢量分成KeyedVectors的原因是,如果你不再需要完整的模型状态(不需要继续训练),这个状态就可以被消除,在训练时,就可以在内存中生成一个更小更快速的轻量级快速导入和共享的对象。

>>> 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实例

>>> 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语言形式获取的词向量要再训练是不可能的,因为词频和二叉树以及隐藏权重都丢失了。为了继续训练,你需要保存完整的 Word2Vec对象状态,应该是通过 save()函数保存,而不是单单KeyedVectors对象。

你可以实现不同的NLP词任务通过一个训练好的模型。其中一些是内建的,你可以查看 gensim.models.keyedvectors.

如果你训练模型结束了(不再更新,仅仅查询),你可以将其转换为KeyedVectors对象

>>> word_vectors = model.wv
>>> del model

修建不需要的模型状态,集占用更少的内存并且快速读取和共享

注意有一个 gensim.models.phrases模块,可以帮助你自动检测超过一个单词的词组。使用词组,你可以一个word2vec模型,这个模型的词会都是多词表示,比如 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

从布朗数据集迭代sentences


class gensim.models.word2vec.LineSentence(source, max_sentence_length=10000, limit=None)
Bases: object

迭代包含sentences的文件:一行=一个sentence。words必须是被预处理好的并且由空格符分开
参数:

  • source (string or a file-like object) :文件在磁盘上的路径或者一个被打开的文件对象
  • limit (int or None):选择的行数,默认为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=, 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

训练、使用和评估 https://code.google.com/p/word2vec/描述的神经网络。
一旦你的模型训练完毕,只用存储self.wv的KeyedVectors实例来减少内存。
模型可以通过save()和load()方法来保存和恢复。
下面是一些重要的参数:


wv
Word2VecKeyedVectors--这个至关重要的对象保存了words和embeddings的映射关系。训练完毕后,可以使用它通过不同的方法进行查询embeddings。


vocabulary
Word2VecVocab--这个对象展示了模型的字典。除了记录了所有唯一的word,这个对象也提供了额外的功能,比如创建一个霍夫曼树(越频繁的word越接近于树根),或者消除极其少见的word。


trainables
Word2VecTrainables--这个对象展示了训练嵌入时所用的内部的浅层神经网络。在两种可用的训练模式(CBOW或SG)中,网络的语义略有不同,但您可以将其视为具有我们在语料库上训练的单个投影和隐藏层的NN。然后将权重用作嵌入(这意味着隐藏层的大小等于self.size的特征数)。

参数
  • size (int, optional) –词向量的维度
  • window (int, optional) –在一个sentence中目标词和历史词的最大距离
  • min_count (int, optional) -忽视所有频次少于此值的词
  • workers (int, optional) – 用多少个线程去计算这个模型
  • sg ({0, 1}, optional) – 训练算法:1是skip-gram, 0是CBOW。
  • hs ({0, 1}, optional) – 1是使用hierarchical softmax , 0是使用非0,负采样

你可能感兴趣的:(gensim Word2Vec)