如何在我自己的数据之上重新训练 Glove Vectors?

数据挖掘 机器学习 nlp 词嵌入
2022-03-07 06:41:11

我正在为我的项目使用 GloVe 和 gensim。我有一个数据语料库(比如说 mydata.txt),其中包含现有 Glove 中没有的新词。那么,如何重新训练 glove 以便现有的预训练 glove 现在必须在我的语料库 mydata.txt 中包含新词?我一直在苦苦挣扎 2 周没有找到解决方案。我发现的唯一类似的帖子是改进现有的 GloVe 模型

3个回答

你应该做的是:

  • 使用 old_words 和 new_words 作为词汇表创建 GloVe 模型的新实例。
  • 将 old_words 的初始向量/偏差替换为您已有的向量/偏差。
  • 在 mydata.txt 上训练这个模型。

新的 old_words 表示将不一样,但会受到旧的高度影响。

我不确定这是否是最好的方法,但我就是这样做的。您不能将其称为再培训,但这是您可以使用手套向量添加数据的一种方式。

from gensim.models import Word2Vec

glove_6b = "glove.6B.100d.txt"

#loading the glove vectors 

with open(glove_6b, "rb") as lines:
     wvec = {
        line.split()[0].decode(encoding): np.array(line.split()[1:], 
                                                         dtype=np.float32)
                                                         for line in lines}

#my data vectors

em_model = Word2Vec(text_data2, size=100, window=5, min_count=1, workers=2)
w2v = {w: vec for w, vec in zip(em_model.wv.index2word, em_model.wv.vectors)}

a = list(w2v.keys())

#mixing them both 
for i in a:
    if i in wvec:
       continue
    else:
       wvec.update({ i  : w2v[i]})

len(list(wvec.keys()))

当然,可以改进。希望这可以帮助。

我认为问题中的链接以及将向量添加在一起的想法都不可行。

我相信GloVe(全局向量)并不是要附加的,因为它是基于仅在初始训练时才知道的单个语料库的语料库的整体单词共现统计数据

您可以做的是使用gensim.scripts.glove2word2vecapi 将 GloVe 向量转换为 word2vec,但我认为您不能继续训练,因为它加载的KeyedVector是非完整模型