什么算法可以帮助我发现同义词?

数据挖掘 数据挖掘 nlp 文本挖掘 word2vec
2021-10-12 01:23:08

在文本挖掘的背景下,我想在我的数据集中发现潜在的同义词。当前数据集是archive.org 上stackexchange 的stackoverflow 数据结果不一定是完美的,我可以手动进行后期处理。但我需要帮助才能知道哪个术语似乎与另一个术语“相似”。

这里是我正在寻找的同义词示例:

  • postgresql, postgres, pgsql, psql
  • 移动, 电话, 安卓, iphone

同样在最好的情况下,也应该可以猜测多词同义词,例如:

  • rdbms,关系数据库管理系统
  • 奥巴马,巴拉克奥巴马

该算法不需要计算这些是多向同义词(如 rdbms 和关系数据库管理系统)和单向同义词(如 iphone 是移动设备但并非所有移动设备都是 iphone)。

我读到 word2vec 可能会有所帮助,但我不确定如何使用它。

2个回答

word2vec 可能是要走的路。它将单词映射到 n 维空间中的一个点。您可以使用欧几里得(或任何距离)来找到给定单词的最近点。如果训练顺利,最近的点应该是同义词。

正如凯尔在他的回答中所说,word2vec 可以与数据转储数据一起运行,您将获得一个显示最接近单词的映射,这些单词可能是同义词候选者。这个Quora 帖子也有同样的方法

这里解释了 word2vec 如何制作不同单词的概率向量,并且使用余弦相似(最高余弦距离),您可以找到最近的 = 同义词候选者。这个 Github上有一个代码示例使用了一个 KDT 树及其余弦距离。(KDT = k 维树)

基本上,同义词是一个距离足够近的词,您可以设置一些阈值来找到所有足够近的词或仅找到最近的词。当然,所有这些都在代码中。

在提到的 Quora 中,WordNet 也被提到作为同义词的来源,但后来我也想到了使用 SE Tag Synonym dump(见这里),我们有一个超明智的常见同义词来源。这些可以用作同义词的替代来源,或作为数据库来验证通过距离方法找到的同义词。