【发布时间】:2018-10-27 06:25:12
【问题描述】:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import warnings
warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim')
import logging
import os.path
import sys
import multiprocessing
# from gensim.corpora import WikiCorpus
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
if __name__ == '__main__':
program = os.path.basename(sys.argv[0])
logger = logging.getLogger(program)
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)
logger.info("running %s" % ' '.join(sys.argv))
min_count=100
data_dir='/opt/mengyuguang/word2vec/'
inp = data_dir + 'wiki.zh.simp.seg.txt'
outp1 = data_dir + 'wiki.zh.min_count{}.model'.format(str(min_count))
outp2 = data_dir + 'wiki.zh.min_count{}.vector'.format(str(min_count))
# train cbow
model = Word2Vec(LineSentence(inp), size=300,
workers=multiprocessing.cpu_count(),min_count=min_count)
# save
model.save(outp1)
model.wv.save_word2vec_format(outp2, binary=False)
首先,我用上面的代码训练了词嵌入,我不认为它有什么问题。我创建了一个列表vocab 将单词存储在矢量文件中。那么
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor(max_document_length)
pretrain = vocab_processor.fit(vocab)
Vocab 是 415657 个单词的列表。而且我的词汇量是 412722。我知道vocab_processor.fit 不会将大小写作为两个词。这真的很奇怪。这是怎么回事?
我再次检查了矢量文件。完全没有重叠的单词。
【问题讨论】:
-
您应该能够制作一个很小的语料库,如您的代码所示,它展示了幸存词汇的差异。通过准确查看一条路径中的哪些单词,与另一条路径相比,应该清楚
VocabularyProcessor在标记化方面的作用与gensimLineSentence不同。
标签: python tensorflow nlp word2vec word-embedding