我试图找到与单个单词相关的单词(特别是物理对象)。例如:

网球: :网球拍、网球、网球鞋

斯诺克: :斯诺克球杆、斯诺克球、粉笔

: :棋盘,棋子

书柜: :书

我尝试过使用WordNet,特别是meronym语义关系;然而,这种方法并不一致,如下结果所示:

网球: :发球、截击、脚误、设定点、接发球、优势

斯诺克: 没有什么

: :国际象棋走法,棋盘(其自己的名字关系显示“正方形”和“对角线”)

书柜: :搁置

最终需要对术语进行加权,但现在这并不是真正的问题。

有人对如何执行此操作有任何建议吗?


只是更新:最终混合使用了 Jeff 和 StompChicken 的答案。

从维基百科检索到的信息质量非常好,特别是(毫不奇怪)有如此多的相关信息(与一些不存在“博客”和“ipod”等术语的语料库相比)。

维基百科的结果范围是最好的部分。该软件能够匹配以下术语(为简洁起见,删除了列表):

  • 高尔夫球:[球、铁杆、球座、球包、球杆]
  • 摄影:[相机、胶片、照片、艺术、图像]
  • 钓鱼:[鱼、网、钩、陷阱、鱼饵、鱼饵、鱼竿]

最大的问题是将某些单词归类为物理制品;默认 WordNet 不是可靠的资源,因为其中不存在许多术语(例如“ipod”,甚至“trampolining”)。

有帮助吗?

解决方案

我认为您所要求的是概念之间语义关系的来源。为此,我可以想到多种方法:

  1. 语义相似度算法. 。这些算法通常对 Wordnet 中的关系执行树形遍历,以得出两个术语相关程度的实值分数。这些将受到 WordNet 对您感兴趣的概念的建模程度的限制。 WordNet::相似性 (用 Perl 编写)非常好。
  2. 尝试使用 开放循环 作为知识库. 。OpenCyc 是 Cyc 的开源版本,Cyc 是一个非常庞大的“现实世界”事实知识库。它应该具有比 WordNet 更丰富的语义关系集。然而,我从未使用过 OpenCyc,所以我无法评价它有多完整,或者它有多容易使用。
  3. n-gram 频率分析. 。正如杰夫·莫泽所说。一种数据驱动的方法,可以从大量数据中“发现”关系,但通常会产生嘈杂的结果。
  4. 潜在语义分析. 。一种类似于 n-gram 频率分析的数据驱动方法,可查找语义相关的单词集。

[...]

从你所说的你想做的事情来看,我认为最后两种选择更有可能成功。如果关系不在 Wordnet 中,那么语义相似性将不起作用,并且 OpenCyc 似乎不太了解 斯诺克 除了它存在的事实之外。

我认为 n-gram 和 LSA(或类似的东西)的组合是个好主意。N-gram 频率会发现与您的目标概念紧密相关的概念(例如网球)和 LSA 会找到同一句子/文档中提到的相关概念(例如净,服务)。另外,如果您只对名词感兴趣,请过滤输出以仅包含名词或名词短语(通过使用 词性标注器)可能会改善结果。

其他提示

在第一种情况下,您可能正在寻找 n 元语法 其中 n = 2。您可以从 Google 等地方获取它们,也可以从以下位置创建您自己的 所有维基百科.

欲了解更多信息,请查看 这个相关的堆栈溢出问题.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top