使用 word2vec 聚类相似词

Cluster similar words using word2vec

我有各种各样的餐厅标签,我也有一些与餐厅无关的词。如下所示:

vegan vegetarian pizza burger transportation coffee Bookstores Oil and Lube

我有大约 500 个标签的组合。我想知道有没有办法选择与食物选择相关的相似标签,并省略油和润滑油、运输等词。

我尝试使用 word2vec,但是,其中一些有多个单词,无法找出正确的方法。

蛮力方法是手动标记它们。但是,我想知道有没有办法使用 NLP 或 Word2Vec 将所有相关标签聚集在一起。

Word2Vec 可以帮助解决这个问题,但需要考虑的关键因素是:

  • 你的词向量是如何训练的?使用现成的向量(比如流行的 GoogleNews 向量在大量新闻故事上训练)不太可能与你领域中这些词的含义紧密匹配,或者包含多词标记,如 'oil_and_lube'。但是,如果你有一个来自你自己领域的良好训练语料库,以及来自上下文中使用的受控词汇表(如 oil_and_lube)的多词标记,你可能会为你需要的标记获得很好的向量。

  • 词向量的相似性并非严格意义上的 'synonymity' 但通常是其他形式的密切关系,包括对立性以及单词可以互换或在相似上下文中使用的其他方式。因此,无论词向量相似度值是否为您特定所需的 "related to food" 测试提供了良好的阈值截止值,您都必须尝试并进行修改。 (例如:相互替代的单词是否彼此最接近,或者在同一主题中常见的单词是否彼此最接近,可能受到 window 参数更小或更大。因此您可以发现调整 Word2Vec 训练参数可以根据您的特定需求改进生成的向量。)

就如何进行提供更多建议将需要有关您可用的训练数据的更多详细信息——这些标签从何而来?他们的格式是什么?你有多少? – 以及您的最终目标 – 为什么区分餐厅标签和非餐厅标签很重要?

好的,谢谢你的详细信息。

为了在 word2vec 上进行训练,您应该考虑以下事实:

  1. 你需要一个巨大的变量 文本数据集。检查您的训练集并确保它包含您需要的有用数据,以便获得您想要的。
  2. 每行设置一个sentence/phrase。
  3. 为了预处理,您需要删除标点符号并将所有字符串设置为小写
  4. 不要词形还原或词干化,因为文本会不那么复杂!
  5. 尝试不同的设置:

    5.1 算法:我使用了word2vec,我可以说BagOfWordsBOW) 在不同的训练集上提供了比 SkipGram 更好的结果。

    5.2 层数:200层效果不错

    5.3 向量大小:向量长度 = 300 即可。

现在运行训练算法。然后,使用获得的模型来执行不同的任务。例如,在您的情况下,对于同义词,您可以将两个词(即向量)与 cosine(或 similarity)进行比较。根据我的经验,余弦提供了一个令人满意的结果:两个单词之间的距离由 0 和 1 之间的双精度值给出。同义词具有高余弦值,您必须找到同义词和非同义词之间的界限。