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

我正在开发一个宠物搜索引擎(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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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