准备输入
import gensim, logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = [['first', 'sentences'], ['second', 'sentence']]
# 创建模型并训练
model = gensim.models.Word2Vec(sentences, min_count=1)
上面这种创建模型的方法, 是把所有的训练语料先全部加载进内存. 如果语料很大, 内存很容易爆掉.
然后发现gensim是提供了解决方法的, 可以迭代的把语料一条条输入进去, 来看看官方的例子
class MySenteces():
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')
model = gensim.models.Word2Vec(sentences)
另外, 如果我们需要对语料数据做些预处理, 都可以把它封装到MySentences类里
加载txt类型语料, 也可以直接用gensim提供的函数:
from gensim.models import word2vec
sentences = word2vec.Text8Corpus("a.txt") # 注意要先分词