我正在训练word2vec模型,其中每个单词都属于一个特定的类。
我希望我的嵌入学习每个班级内单词的差异,但不希望他们学习班级之间的差异。
这可以通过仅从与目标单词相同类别的单词中进行负采样来实现。
在gensim word2vec中,我们可以使用negative
参数指定否定样本的单词数,但是没有提及任何修改/过滤采样函数的选项。
有什么方法可以做到这一点?
更新:
将类视为语言。所以我有来自不同语言的单词。在训练数据中,每个句子/文档主要包含相同语言的单词,但有时也包含其他语言的单词。
现在,我希望嵌入具有相同含义的单词,而不论其语言如何。
但是,由于来自不同语言的单词不会像来自同一语言的单词那样频繁出现,因此嵌入基本上将来自同一语言的单词组合在一起。
因此,我想尝试使用来自相同语言的单词对目标单词进行否定采样,以便它学会区分相同语言中的单词。
答案 0 :(得分:0)
不清楚“学习每个班级中的单词差异,但不希望他们学习班级之间的差异”是什么意思,或者您希望获得什么好处。
如果单词在训练文本中同时出现,word2vec训练算法将尝试预测相邻单词,并且最终结果是有用的单词向量。
如果两个词不应该互相影响,则可以对文本进行预处理,这样它们就不会同时出现。例如,如果您有三类单词,并且您的文本语料库自然包含所有三个类的混合,则可以将语料库过滤为三个独立的语料库。每个语料库都包含一个类别的单词,而丢弃其他类别的单词。然后,您可以从3个语料库中训练3个独立的Word2Vec
模型。
但是我不确定为什么要这么做:每个语料库/模型中的单词向量都没有有用的可比性。我还没有看过任何能做到这一点的作品,也无法想象有什么好处–尽管它似乎完全抛弃了大多数人希望从word2vec中获得的微妙关系。