构建或查找“相关术语”建议功能

Posted

技术标签:

【中文标题】构建或查找“相关术语”建议功能【英文标题】:Building or Finding a "relevant terms" suggestion feature 【发布时间】:2010-10-08 23:41:01 【问题描述】:

给定一些输入词,我想要一个实用程序,它可以返回一组不同的相关术语、短语或概念。需要注意的是,它需要有一个大的术语图,否则该功能不会很有用。

例如,提交“棒球”将返回

["shortstop", "Babe Ruth", "foul ball", "steroids", ... ]

Google Sets 是我能找到的此类功能的最佳示例,但我无法使用它,因为他们没有公共 API(我不会违反他们的 TOS)。此外,单个单词输入不会获得非常多样化的结果。我正在寻找一个切线的解决方案。

我尝试过的最接近的方法是使用WikiPedia's API 来搜索类别和反向链接,但是无法直接按“相关性”“流行度”对这些结果进行排序时间>。没有它,建议列表会很庞大,而且到处都是,不会立即有用,而且很难缩减。

使用同义词库也可以起到最低限度的作用,但这会遗漏任何专有名词或切线相关的术语(如上面列出的任何结果)。


我会很高兴重用一个开放的服务,如果存在的话,但我还没有找到足够的东西。

我正在寻找一种方法来实现这一点,或者在内部使用体面的起始集,或者重用免费的提供此服务的服务

有解决方案吗?提前致谢!


更新:感谢您提供令人难以置信的密集和信息丰富的答案。我会在 6 到 12 个月内选择一个成功的答案,届时我希望能理解你们的建议 =)

【问题讨论】:

【参考方案1】:

您可能对WordNet 感兴趣。理解 API 需要一点语言知识,但基本上该系统是一个包含英语单词之间基于含义的链接的数据库,这或多或少是您要搜索的内容。如果您愿意,我相信我可以挖掘更多信息。

【讨论】:

WordNet 很好,但它也会遗漏专有名称: $ wn 棒球 -over 名词棒球概述 名词棒球有 2 种意义(前两种来自标记文本) 1. (21) 棒球, 棒球比赛 -- (用球棒和...进行的球类比赛...... WordNet 很棒。它可能会彻底解决问题。我需要几天时间才能确定 =) 谢谢! @Hemal Pandya:搜索“棒球”让我找到了“贝比鲁斯”。似乎可以:wordnetweb.princeton.edu/perl/… 很高兴它对您有用 ;-) 许多著名的(著名的)专有名称都在 WordNet 中 - 对于那些不是,我相信随着时间的推移,数据库会扩展以包含更多。 (你甚至可以为它做出贡献)【参考方案2】:

看看以下两篇论文:

Clustering User Queries of a Search Engine [pdf] Topic Detection by Clustering Keywords [pdf]

这是我尝试进行非常简化的解释:

如果我们有一个过去用户查询的数据库,我们可以定义两个查询之间的相似度函数。例如:共同的单词数。现在对于我们数据库中的每个查询,我们计算它与其他查询的相似度,并记住 k 个最相似的查询。这些中不重叠的词可以作为“相关词”返回。

我们也可以对包含用户可能正在搜索的信息的文档数据库采用这种方法。我们可以将两个搜索词之间的相似度定义为包含两者的文档数除以包含其中任何一个的文档数。为了决定测试哪些术语,我们可以扫描文档并剔除太常见的单词(“and”、“the”等)或太晦涩的单词。

如果我们的数据允许,那么我们可以查看哪些查询导致用户选择了哪些结果,而不是按内容比较文档。例如,如果我们有数据显示搜索“Celtics”和“Lakers”的用户最终都点击了 espn.com,那么我们可以调用这些相关术语。

如果您从头开始,没有关于过去用户查询的数据,那么您可以尝试使用 Wikipedia 或 Bag of Words 数据集作为文档数据库。如果您正在寻找用户搜索词和结果的数据库,并且喜欢冒险,那么您可以查看 AOL 搜索数据。

【讨论】:

【参考方案3】:

Peter Norvig(谷歌研究主管)在a Facebook Tech Talk 中谈到了他们在谷歌如何做到这一点(特别提到了谷歌集)。这个想法是,一个相对简单的算法在一个巨大的数据集(例如整个网络)上比一个复杂的算法在一个小数据集上要好得多。

您可以将Google's n-gram collection 作为起点。您将开始看到将哪些概念组合在一起。 Norvig 暗示,Google 内部有多达 7 克的语法可用于 Google Translate 等内容。

如果您更有野心,您可以download all of Wikipedia's articles 使用您想要的语言并创建您自己的 n-gram 数据库。

如果你只有一个词,问题就更复杂了;查看this recent thesis 了解有关词义消歧的更多详细信息。

这不是一个简单的问题,但正如您所提到的,它很有用。最后,我想你会发现一个真正成功的实现会有一个相对简单的算法和大量的数据。

【讨论】:

以上是关于构建或查找“相关术语”建议功能的主要内容,如果未能解决你的问题,请参考以下文章

相关术语

FFmpegFFmpeg 相关术语简介

Zabbix 相关术语

射频技术的相关术语

Python机器学习基础知识和相关术语

photon引擎的photon引擎的相关术语