gensim-word2vec

通过word2vec的“skip-gram和CBOW模型”生成词向量,使用hierarchical softmax或negative sampling方法。
注意:在Gensim中不止Word2vec可以产生词向量,详见Fasttext和wrappers。
初始化模型:

model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)

保存加载模型:

model.save(fname)
model = Word2Vec.load(fname)  # you can continue training with the loaded model!

词向量存储在model.wv的KeyedVectors实例中,可以直接在KeyedVectors中查询词向量。

model.wv['computer']  # numpy vector of a word
array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)

词向量也可以被硬盘上已有的C格式文件实例化成KeyedVectors

from gensim.models import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.txt', binary=False)  # C text format
word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.bin', binary=True)  # C binary format

你可以通过模型执行各种NLP任务,有些是内置的

>>> model.wv.most_similar(positive=['woman', 'king'], negative=['man'])
[('queen', 0.50882536), ...]

>>> model.wv.most_similar_cosmul(positive=['woman', 'king'], negative=['man'])
[('queen', 0.71382287), ...]


>>> model.wv.doesnt_match("breakfast cereal dinner lunch".split())
'cereal'

>>> model.wv.similarity('woman', 'man')
0.73723527

模型下的文本概率:

>>> model.score(["The fox jumped over a lazy dog".split()])
0.2158356

如果模型训练完成(不再更新),可以在wv中转换gensim.models.KeyedVectors实例来避免不必要的内存消耗

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

gensim.models.phrases模块可以让你自动检测短语的词向量

>>> bigram_transformer = gensim.models.Phrases(sentences)
>>> model = Word2Vec(bigram_transformer[sentences], size=100, ...)

class gensim.models.word2vec.BrownCorpus(dirname )
从布朗语料库(NLTK数据的一部分)迭代句子,dirname是存储布朗语料库的根目录(通过nltk.download()下载布朗语料库),得到的这个对象可以通过循环迭代语料库的句子,如下:
['the/at', 'fulton/np', 'county/nn', 'grand/jj', 'jury/nn', 'said/vb', 'friday/nr', 'an/at', 'investigation/nn', 'of/in', "atlanta's/np", 'recent/jj', 'primary/nn', 'election/nn', 'produced/vb', 'no/at', 'evidence/nn', 'that/cs', 'any/dt', 'irregularities/nn', 'took/vb', 'place/nn']


class gensim.models.word2vec.LineSentence(source, max_sentence_length=10000, limit=None)
与上一样,也是产生迭代器,但需要更改下文件格式。简单的格式:一句话=一行; 单词已经过预处理并由空格分隔。


class gensim.models.word2vec.PathLineSentences(source,max_sentence_length = 10000,limit = None )
与LineSentence类一样,不过这里是处理根目录下的所有文件,同样文件中句子格式需要处理


class gensim.models.word2vec.Text8Corpus(fname,max_sentence_length = 10000 )
从text8语料库中迭代句子


class gensim.models.word2vec.Word2Vec(sentences=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, 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=())
一个训练,使用和评估的神经网络类。如果训练结束,可以再wv中转换gensim.models.KeyedVectors实例。模型可以通过load()和save()加载和保存,或者通过 wv.save_word2vec_format()和Word2VecKeyedVectors.load_word2vec_format().
用句子的迭代器进行模型初始化,每个句子都是一组词(unicode)

  • sentence(iterable of iterables):可迭代的句子可以是简单的list,但对于较大的语料库,可以考虑直接从磁盘/网络传输句子的迭代。见BrownCorpus,Text8Corpus 或LineSentence.
  • SG(INT {1 ,0}) -定义的训练算法。如果是1,则使用skip-gram; 否则,使用CBOW。
  • size(int) - 特征向量的维数。
  • window(int) - 句子中当前词和预测词之间的最大距离。
  • alpha(float) - 初始学习率。
  • min_alpha(float) - 随着训练的进行,学习率将线性下降至min_alpha。
  • seed(int) - 随机数发生器的种子。
  • min_count(int) - 忽略总频率低于此值的所有单词。
  • max_vocab_size(int) - 在构建词汇表时限制RAM; 如果还有比这更独特的单词,那么修剪不常用的单词。每1000万字类型需要大约1GB的RAM。无限制设置为None。
  • sample(float) - 用于配置哪些较高频率的词随机下采样的阈值,有用范围是(0,1e-5)
  • worker(int) - 线程
  • hs (int {1,0}) – If 1, hierarchical softmax will be used for model training. If set to 0, negative参数非零,negative sampling.
  • negative(int) - 如果> 0,将使用negative sampling,int指定应绘制多少“噪声词”(通常在5-20之间)。如果设置为0,则不使用负采样
  • cbow_mean(INT {1 ,0}) -如果为0,使用上下文词向量的和。如果是1,则使用平均值,仅在使用cbow时适用
    初始化并训练模型
>>> from gensim.models import Word2Vec
>>> sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
>>>
>>> model = Word2Vec(sentences, min_count=1)
>>> say_vector = model['say']  # get vector for word

build_vocab(sentences, update=False, progress_per=10000, keep_raw_vocab=False, trim_rule=None, **kwargs)
从一系列句子中构建词汇表(可以是一次性的生成器流)。每个句子都是可迭代的iterable(也可以简单地是一个unicode字符串列表)。


build_vocab_from_freq(word_freq, keep_raw_vocab=False, corpus_count=None, trim_rule=None, update=False)
从词频词典中构建词汇。从包含(单词,单词计数)的传递字典中构建模型词汇表。单词必须是类型unicode字符串。

>>> from gensim.models import Word2Vec
>>>
>>> model= Word2Vec()
>>> model.build_vocab_from_freq({"Word1": 15, "Word2": 20})

estimate_memory(vocab_size = None,report = None )
使用当前设置和提供的词汇大小估算模型所需的内存。


predict_output_word(context_words_list, topn=10)
报告中心词的概率分布,给定上下文词作为训练模型的输入。
context_words_list - 上下文单词列表
topn(int) - 返回最常用的单词及其概率
返回:
(单词,概率)元组的topn长度列表
返回类型:
obj:列表:obj:元组


score(sentences, total_sentences=1000000, chunksize=100, queue_factor=2, report_delay=1)
计算一系列句子的对数概率


train(sentences, 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=())
从一系列句子更新模型的神经权重.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容