从多个词嵌入中生成同义词或相似词

数据挖掘 nlp 伯特
2022-02-23 10:24:13

我正在寻找一种使用词嵌入生成同义词的方法。从一个词,从多个词。比如下面的两个例子:

“word” -> 词嵌入 -> 生成“word”的同义词

"word", "synonym of word .. "-> -> Word embeddings -> 生成两个词的同义词

我对此很陌生。你觉得我应该用什么?

我还想使用一种工具,在进一步的工作中,将考虑到词嵌入生成的上下文,例如:

“包含单词的句子”->单词的单词嵌入->在该上下文中生成“单词”的同义词

我想我会开始用 BERT 做这件事......我应该如何开始?或者我应该使用哪种替代方法?

谢谢你的帮助 !

3个回答

Gensim 具有使用 Word2vec 查找相似单词的内置功能。您可以使用 gensim 训练 Word2Vec 模型:

model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)

您可以利用该most_similar 功能查找前 n 个相似词。它允许您输入正面和负面单词的列表来解决“好”和“坏”的问题。你可以玩弄它。

model.most_similar(positive=[], negative=[], topn=10, restrict_vocab=None)

文档中提供的示例:

model.most_similar(positive=['woman', 'king'], negative=['man'], topn=10, restrict_vocab=None)
[('queen', 0.50882536), ...]

topn = 要输入的正负词组合列表的最近邻数。

restrict_vocab = 一个可选整数,它限制搜索最相似值的向量范围。例如,restrict_vocab=10000 只会检查词汇顺序中的前 10000 个词向量。(如果您已按频率降序对词汇表进行排序,这可能很有意义。)

这是我正在谈论的文档的链接:http: //man.hubwiz.com/docset/gensim.docset/Contents/Resources/Documents/radimrehurek.com/gensim/models/word2vec.html

以下是如何从头开始训练 word2vec 模型的链接:https ://radimrehurek.com/gensim/models/word2vec.html

您还可以查看它附带的一些其他功能,这些功能允许您仅通过单个向量找到相似的单词,您可以在第二个链接中找到这些:

self.wv.similar_by_vector()
self.wv.similar_by_word()

使用词嵌入查找同义词的自动系统是不可能的。词嵌入发现共现。例如,“好”和“坏”在语料库中同时出现,因此在嵌入空间中彼此靠近。然而,“好”和“坏”是反义词。

副驾驶系统可以工作。词嵌入可以通过找到最近的词来找到一组候选同义词,这些词是用距离度量来衡量的。然后其他方法(例如,一个人)可以在候选者中进行选择。

首先,一些背景背景:

  • 非上下文词嵌入(例如 word2vec)仅反映共现统计。两个嵌入向量之间的相似性可能仅与其语义松散相关(例如,“法国”和“意大利”等国名的表示可能很接近),甚至可能存在负相关(反义词可能非常接近)。

  • BERT 是子词级别,而不是词级别。这意味着在通过网络之前,有一个标记化过程将单词分成单词片段。因此,您获得的是单词片段的表示,而不是单词本身,例如对于单词“difficult”,您可能会获得像“diff”、“i”、“cult”这样的标记化。没有直接的方法可以从各个子字表示中获得“组合表示”。

所以:

  • 我建议你不要使用 BERT,因为你对词级信息感兴趣,而 BERT 只提供子词级的东西。
  • 我建议您查看ELMo,它提供了单词级别的上下文表示。