Word2Vec

https://rare-technologies.com/word2vec-tutorial/ 原教程地址

1.准备好输入

gensim word2Vec输入是句子序列 每个句子是一个词的列表(一些utf8编码的字符串)

# import modules & set up logging
import gensim, logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
 
sentences = [['first', 'sentence'], ['second', 'sentence']]
# train word2vec on the two sentences
model = gensim.models.Word2Vec(sentences, min_count=1)

2. 迭代器

输入很大时 可以用迭代器 不用一次全部读入内存 只需要每次输入产生一个句子

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
model = gensim.models.Word2Vec(sentences)

调用Word2Vec(sentences, iter=1) 将运行iter+1遍 默认iter=5 ,第一遍收集单词及其频率以构建内部字典树结构。 第二次和随后的传递训练神经模型。 这两个(或者,iter + 1)传递也可以手动启动,以防您的输入流不可重复(您只能承担一次传递),并且您可以通过其他方式初始化词汇表:

model = gensim.models.Word2Vec(iter=1)  # an empty model, no training yet
model.build_vocab(some_sentences)  # can be a non-repeatable, 1-pass generator
model.train(other_sentences)  # can be a non-repeatable, 1-pass generator

3.训练

少于mincount的词会被忽略

model = Word2Vec(sentences, min_count=10)  # default value is 5

NN层的大小

model = Word2Vec(sentences, size=200)  # default value is 100

大size需要更多的数据

并行处理

model = Word2Vec(sentences, workers=4) # default = 1 worker = no parallelization

4.内存占用

在其核心,word2vec模型参数存储为矩阵(NumPy数组)。 每个数组都是#vocabulary(由min_count参数控制)乘以浮点数的#size(size参数)(单精度,也就是4个字节)。

三个这样的矩阵保存在RAM中(正在进行工作以将该数量减少到两个,甚至一个)。 因此,如果您的输入包含100,000个唯一单词,并且您要求图层大小= 200,则模型将需要大约。 100,000 * 200 * 4 * 3字节= ~229MB。

存储词汇树需要一些额外的内存(100,000个单词需要几兆字节),但除非你的单词非常冗长,否则内存占用将由上面的三个矩阵控制。

5.评估

Gensim完全支持相同的评估集

https://raw.githubusercontent.com/RaRe-Technologies/gensim/develop/gensim/test/test_data/questions-words.txt.

model.accuracy('/tmp/questions-words.txt')
2014-02-01 22:14:28,387 : INFO : family: 88.9% (304/342)
2014-02-01 22:29:24,006 : INFO : gram1-adjective-to-adverb: 32.4% (263/812)
2014-02-01 22:36:26,528 : INFO : gram2-opposite: 50.3% (191/380)
2014-02-01 23:00:52,406 : INFO : gram3-comparative: 91.7% (1222/1332)
2014-02-01 23:13:48,243 : INFO : gram4-superlative: 87.9% (617/702)
2014-02-01 23:29:52,268 : INFO : gram5-present-participle: 79.4% (691/870)
2014-02-01 23:57:04,965 : INFO : gram7-past-tense: 67.1% (995/1482)
2014-02-02 00:15:18,525 : INFO : gram8-plural: 89.6% (889/992)
2014-02-02 00:28:18,140 : INFO : gram9-plural-verbs: 68.7% (482/702)
2014-02-02 00:28:18,140 : INFO : total: 74.3% (5654/7614)

6.存储

model.save('/tmp/mymodel')
new_model = gensim.models.Word2Vec.load('/tmp/mymodel')

加载模型 用更多的句子训练

model = gensim.models.Word2Vec.load('/tmp/mymodel')
model.train(more_sentences)

7.使用模型

model.most_similar(positive=['woman', 'king'], negative=['man'], topn=1)
[('queen', 0.50882536)]
model.doesnt_match("breakfast cereal dinner lunch";.split())
'cereal'
model.similarity('woman', 'man')
0.73723527
model['computer']  # raw NumPy vector of a word
array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)

model.wv.vocab 词汇表字典

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值