如何使用预训练嵌入到 gensim skipgram 模型?
How can I use a pretrained embedding to gensim skipgram model?
我想先训练部分语料库,然后在整个语料库上基于嵌入训练。我可以用 gensim skipgram 实现吗?
我还没有找到可以通过初始嵌入的API。
我想要的是类似
的东西
from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"],
["cat2", "say2", "meow"], ["dog2", "say", "woof"]]
model = Word2Vec(sentences[:2], min_count=1)
X = #construct a new one
model = Word2Vec(sentences, min_count=1, initial_embedding=X)
我不确定你为什么要这样做:如果你有整个语料库,并且可以对整个语料库进行训练,你很可能会从整个语料库训练中获得最好的结果。
并且,如果第二个语料库中有任何缺失,第二个语料库训练将倾向于将仍在训练的单词的向量与不再存在于语料库中的单词拉开——导致向量在语料库中的可比性语料库腐烂。 (这只是示例之间交错的拔河 war,包括将它们推向彼此有意义相关的位置的所有单词。)
但是,请牢记这一点:您可以继续 train()
使用新数据的模型。即:
# initialize & do all default training
model = Word2Vec(sentences[:2], min_count=1)
# now train again even more with a slightly different mix
model.train(sentences, total_examples = len(sentences), epochs=model.epochs)
请注意,在这种情况下,模型发现的词汇表仅基于原始初始化。如果只有 sentences[0]
中有单词,当这些句子呈现给在初始化期间没有看到这些单词的模型时,它们将被忽略——并且永远不会获得向量。 (如果以这种方式使用你的小示例语料库,单词 'cat' 将不会获得向量。同样,你真的想在最大的语料库上进行训练 - 或者至少使用最大的语料库,以及单词的超集, 1st.)
此外,将记录一个 warning,因为第二次训练将再次以较大的起始值开始内部 alpha
学习率,然后逐渐将其降低到最终 min_alpha
值。像这样玩溜溜球的值不是标准 SGD,通常表示用户错误。但是,这可能是可以容忍的,具体取决于您的目标 – 当您进行这样不寻常的训练序列时,您只需要成为一个 ware,您就在 experimental/advanced 土地上,必须处理通过您自己的理解可能产生的副作用。
我想先训练部分语料库,然后在整个语料库上基于嵌入训练。我可以用 gensim skipgram 实现吗?
我还没有找到可以通过初始嵌入的API。
我想要的是类似
的东西from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"],
["cat2", "say2", "meow"], ["dog2", "say", "woof"]]
model = Word2Vec(sentences[:2], min_count=1)
X = #construct a new one
model = Word2Vec(sentences, min_count=1, initial_embedding=X)
我不确定你为什么要这样做:如果你有整个语料库,并且可以对整个语料库进行训练,你很可能会从整个语料库训练中获得最好的结果。
并且,如果第二个语料库中有任何缺失,第二个语料库训练将倾向于将仍在训练的单词的向量与不再存在于语料库中的单词拉开——导致向量在语料库中的可比性语料库腐烂。 (这只是示例之间交错的拔河 war,包括将它们推向彼此有意义相关的位置的所有单词。)
但是,请牢记这一点:您可以继续 train()
使用新数据的模型。即:
# initialize & do all default training
model = Word2Vec(sentences[:2], min_count=1)
# now train again even more with a slightly different mix
model.train(sentences, total_examples = len(sentences), epochs=model.epochs)
请注意,在这种情况下,模型发现的词汇表仅基于原始初始化。如果只有 sentences[0]
中有单词,当这些句子呈现给在初始化期间没有看到这些单词的模型时,它们将被忽略——并且永远不会获得向量。 (如果以这种方式使用你的小示例语料库,单词 'cat' 将不会获得向量。同样,你真的想在最大的语料库上进行训练 - 或者至少使用最大的语料库,以及单词的超集, 1st.)
此外,将记录一个 warning,因为第二次训练将再次以较大的起始值开始内部 alpha
学习率,然后逐渐将其降低到最终 min_alpha
值。像这样玩溜溜球的值不是标准 SGD,通常表示用户错误。但是,这可能是可以容忍的,具体取决于您的目标 – 当您进行这样不寻常的训练序列时,您只需要成为一个 ware,您就在 experimental/advanced 土地上,必须处理通过您自己的理解可能产生的副作用。