如何在搜索引擎中实现同义词功能?

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

目前我有一个基于布尔关键词的搜索引擎库,它分为两部分:

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

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

我想改进这个搜索引擎,使其能够自动将简单的查询扩展为布尔查询,从而包括原始查询中未出现的搜索术语,即我想支持同义词功能。

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

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

以下是我希望计算的同义词列表示例:

  • psql, pgsql, postgres, postgresql
  • mobile, iphone, android

还包括包含ngram的同义词,如:

  • rdbms, 关系数据库管理系统, …

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


回答:

在标准的信息检索(IR)文献中,这种用额外术语(未出现在初始/原始查询中)丰富查询的做法被称为查询扩展

有很多标准方法,通常来说,这些方法基于根据某些因素对术语进行评分,然后选择一组得分最高的术语(假设为K,一个参数)。

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

术语选择函数通常依赖的因素包括:

  1. 术语在排名前的文档中的出现频率 – 越高越好。
  2. 术语在排名前M的文档中出现的文档数量 – 越高越好。
  3. 一个额外术语与查询术语的共现次数 – 越高越好。

共现因素是最重要的,它会给你像’pgsql’这样的术语,如果原始查询包含’psql’的话。

请注意,如果文档太短,这种方法效果不会很好,你必须使用其他基于语义的方法,例如i) 基于词向量的扩展或ii) 基于WordNet的扩展。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注