【问题标题】:Is it possible to train spark word2vec model in batch mode是否可以在批处理模式下训练 spark word2vec 模型
【发布时间】:2017-03-01 00:38:46
【问题描述】:

我想知道是否可以在批处理模式下训练 spark word2vec。或者换句话说,如果可以更新已经训练过的 spark word2vec 模型的词汇表。 我的申请是: 我的段落位于多个文件中,当我使用 gensim 时,我可以这样做

class MySentences(object):
    def __init__(self, file_list, folder):
        self.file_list = file_list
        self.folder = folder

    def __iter__(self):
        for file in self.file_list:
            if 'walk_' in file:
                print file
                with open(self.folder + file, 'r') as f:
                    for line in f:
                        yield line.split()

model = Word2Vec(MySentences(files, fileFolder), size=32, window=5, min_count=5, workers=15)  

我什至可以做到

for epoch in range(10):
    model.train(MySentences(files, fileFolder))

我想知道如何在 spark word2vec 中做类似的事情。

在spark中,我发现我只能对多个文件进行RDD联合:

from pyspark.mllib.feature import Word2Vec 
from pyspark.sql import SQLContext

inp1 = sc.textFile("file1").map(lambda row: row.split('\t'))
inp2 = sc.textFile("file2").map(lambda row: row.split('\t'))

inp = sc.union([inp1,inp2])
word2vec = Word2Vec().setVectorSize(4).setMinCount(1)
model = word2vec.fit(inp)

否则,如果我用 inp1 和 inp2 训练模型,那么来自 inp1 的单词就会消失。

如果我不能在批处理模式下进行训练,我以后如何用新的段落更新训练好的模型?

【问题讨论】:

    标签: apache-spark word2vec


    【解决方案1】:

    我认为你可以:

    for idx in range(1, 100, 1):
        model = word2vec.fit(data.sample(False, 0.01))
        model.save(sc, path)
    

    不确定示例函数在本例中是否总是采用看不见的数据。

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 1970-01-01
      • 2016-03-26
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 2017-02-06
      • 2015-07-29
      相关资源
      最近更新 更多