【发布时间】:2020-09-28 13:35:38
【问题描述】:
我尝试过使用 word2vec,但我想改变两个词之间的相似度。最好不要一一手动。我正在考虑的另一个选择是创建一个可以强制执行正确相似性的语料库,但我不知道该怎么做。谢谢你的建议。
【问题讨论】:
我尝试过使用 word2vec,但我想改变两个词之间的相似度。最好不要一一手动。我正在考虑的另一个选择是创建一个可以强制执行正确相似性的语料库,但我不知道该怎么做。谢谢你的建议。
【问题讨论】:
为什么? Word2Vec 使用大量实际使用数据来创建对某些事物有用的词向量因为它们准确地反映了训练文本中的关系。
从某种意义上说,更改任何向量的位置是微不足道的:只需将数组修改为您想要的任何值,将它们的所有维度设为零!全部100.0!随便!
例如,如果您希望单词 'apple' 和 'orange' 具有相同的向量,从而具有 ~1.0 相似性,则很容易将其中一个更改为另一个。假设您使用流行的 Python Gensim 库将 Word2Vec 模型训练为 my_w2v_model:
my_wv = my_w2v_model.wv
print(my_wv.similarity('apple', 'orange'))
my_wv['apple'] = my_wv['orange']
print(my_wv.similarity('apple', 'orange'))
但是,现在模型已经失去了苹果/橙色区别的任何概念,'apple' 向量现在除了作为 'orange' 的精确同义词之外没有邻居或值。
因此,由于此类更改可能会破坏首先使用词向量的原因,因此了解您正在寻求什么样的更改以及希望获得的好处非常重要。
也许你想直接破坏最终值,或者稍微微调一下单词,或者别的什么。特别是,如果您最希望单词保持与其他单词的关系,则需要进行更细微的更改。
在某些情况下,更改或扩展训练数据可能最有意义,将模型训练转向您想要的相似性。作为一个粗略的示例,您可以考虑预处理数据以获取出现'apple' 的每个文本,并以50% 的概率将'apple' 替换为'orange'(反之亦然'orange')。这往往会在训练文本中混淆两者,从而导致高度相似的端向量,每个仍然(受未更改文本的影响)也很像原始单词/word-neighbors.
(随着您的目标的更多细节,更具体的建议可能是可能的。)
【讨论】: