找到与特定单词相关的词语(具体是物体名称)

18
我正在尝试寻找与一个单词相关的词语(具体是物理对象)。例如:
网球:网球拍、网球、网球鞋
斯诺克:斯诺克球杆、斯诺克球、粉笔
国际象棋:国际象棋棋盘、棋子
书柜:书
我已经尝试使用WordNet,特别是meronym语义关系;但是如下结果表明,这种方法并不一致:
网球:发球、截击、足部犯规、盘点、回击、优势
斯诺克:无
国际象棋:棋步、方格(其自身的meronym关系显示为“正方形”和“对角线”)
书柜:架子
最终需要对术语进行加权,但现在并不是真正的问题。
有人有任何建议如何做到这一点吗?
更新一下:最终使用了Jeff和StompChicken的答案混合。
从维基百科检索到的信息质量非常好,特别是(不出所料)有很多相关信息(相比之下,有些语料库中不存在“博客”和“iPod”这样的术语)。
维基百科的结果范围是最好的部分。该软件能够匹配像以下这样的术语(为了简洁起见,列表被截断):
高尔夫:[球、铁杆、球座、包、俱乐部]
摄影:[相机、胶片、照片、艺术、图像]
钓鱼:[鱼、网、钩、陷阱、诱饵、鱼竿]
最大的问题是将某些词语归类为物理工件;默认的WordNet不是可靠的资源,因为许多术语(如“iPod”甚至“蹦床”)在其中不存在。

2
嗨,我尝试了这种方法,但结果往往是随机的,与搜索查询无关。你能详细说明一下你做了什么吗?例如,你是否使用了来自维基百科的反向链接、链接和分类? - Crashalot
2个回答

15
我认为您所要求的是概念之间语义关系的来源。为此,我想到了几种方法:
  1. 语义相似性算法。这些算法通常在Wordnet中对关系进行树遍历,得出两个术语相关程度的实数分数。这些将受到WordNet对您感兴趣的概念建模程度的限制。 WordNet::Similarity(用Perl编写)非常好。
  2. 尝试使用OpenCyc作为知识库。OpenCyc是Cyc的开源版本,是一个非常大的“真实世界”事实知识库。它应该比WordNet具有更丰富的语义关系集。但是,我从未使用过OpenCyc,因此无法确定它有多完整或使用起来有多容易。
  3. n-gram频率分析。如Jeff Moser所提到的。可以从大量数据中“发现”关系的数据驱动方法,但通常会产生嘈杂的结果。
  4. 潜在语义分析。一种类似于n-gram频率分析的数据驱动方法,可以找到一组语义相关的单词。

[...]

根据您所说的要求,我认为最后两个选项更有可能成功。如果关系不在Wordnet中,则语义相似性将无法工作,而OpenCyc似乎对除存在之外的台球知之甚少。

我认为将n-grams和LSA(或类似的东西)结合起来会是一个不错的主意。N-gram频率将找到与您的目标概念紧密相关的概念(例如网球),而LSA将找到在同一句子/文档中提到的相关概念(例如网、发球)。此外,如果您只对名词感兴趣,通过使用词性标注器过滤输出内容仅包含名词或名词短语可能会改善结果。


非常感谢,您提供的信息让我有很多东西可以调查。 - user63899
没问题,祝你在尝试的事情中好运。这并不容易 :) - Stompchicken

6

2
2元组(n-grams of 2)指的是常见的连续出现的两个词语。我认为发帖者所问的是关于语义关系的问题。 - Avi
这个想法是,如果它们一起出现,那么如果它足够频繁地发生,可能会有一些语义关系(例如,“网球拍”就像“打网球”一样具有语义关系)。 - Jeff Moser
这是一个正确的想法。然而,问题是关于使用WordNet来查找语义关系,而不是使用n-grams。 - Avi
n-gram的想法是,您可以看到靠近“网球”的常见单词。它们彼此靠近的事实表明可能存在某种关系。 - Jeff Moser
很酷!它对你的工作有什么帮助?建议的质量如何? - Jeff Moser
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接