【问题标题】:How to implement synonyms for use in a search engine?如何实现在搜索引擎中使用的同义词?
【发布时间】:2018-03-05 02:48:15
【问题描述】:

我正在开发一个宠物搜索引擎 (SE)。

我现在拥有的是布尔关键字 SE,作为一个分为两部分的库:

  • 索引:这是一个倒排索引,即。它将术语与出现的原始文档相关联

  • 查询:由用户提供,可以是任意复杂的布尔表达式,类似于(mobile OR android OR iphone) AND game

我想改进搜索引擎,以某种方式自动将简单查询扩展到布尔查询,以便它包含未出现在原始查询中的搜索词,即。我想支持同义词。

我需要一些帮助来构建同义词图表。

如何计算出现在相似上下文中的单词列表?

这是我要计算的同义词列表示例:

  • psql、pgsql、postgres、postgresql
  • 手机、iphone、安卓

还有包含 ngram 的同义词,例如:

  • rdbms、关系数据库管理系统、...

算法不一定要完美,我可以手动对结果进行后处理,但至少我需要知道哪些术语与其他术语相似。

【问题讨论】:

标签: nlp full-text-search artificial-intelligence text-mining word2vec


【解决方案1】:

在标准信息检索 (IR) 文献中,这种使用附加术语(未出现在初始/原始查询中)对查询的丰富称为查询扩展

有很多标准的方法,一般来说,是基于基于某些因素对术语进行评分,然后选择一些术语(比如 K,一个参数)得分最高。

为了计算术语选择分数,假设在初始检索后检索到的排名靠前 (M) 的文档是相关的,这称为伪相关性反馈

词条选择函数一般依赖的因素有:

  1. 词条在排名靠前的文档中的词条频率 - 越高越好。
  2. 出现该词条的文档数(不超过 M 个) - 越高越好。
  3. 附加字词与查询字词同时出现多少次 - 越高越好。

共现因素是最重要的,如果原始查询包含“psql”,它会为您提供诸如“pgsql”之类的术语。

请注意,如果文档太短,此方法将无法正常工作,您必须使用其他必然基于语义的方法,例如 i) word-vector based expansion 或 ii) 基于 wordnet 的扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多