我正在开发一个宠物搜索引擎(SE)。
目前我有一个基于布尔关键词的搜索引擎库,它分为两部分:
-
索引:这是一个倒排索引,即它将术语与其出现的原始文档相关联
-
查询:由用户提供,可以是任意复杂的布尔表达式,例如
(mobile OR android OR iphone) AND game
我想改进这个搜索引擎,使其能够自动将简单的查询扩展为布尔查询,从而包括原始查询中未出现的搜索术语,即我想支持同义词功能。
我需要一些帮助来构建同义词图谱。
我如何计算出现在相似上下文中的词列表?
以下是我希望计算的同义词列表示例:
- psql, pgsql, postgres, postgresql
- mobile, iphone, android
还包括包含ngram的同义词,如:
- rdbms, 关系数据库管理系统, …
算法不必完美,我可以手动后处理结果,但至少我需要知道哪些术语与其他术语相似。
回答:
在标准的信息检索(IR)文献中,这种用额外术语(未出现在初始/原始查询中)丰富查询的做法被称为查询扩展。
有很多标准方法,通常来说,这些方法基于根据某些因素对术语进行评分,然后选择一组得分最高的术语(假设为K,一个参数)。
为了计算术语选择得分,假设在初始检索后排名前(M)的文档是相关的,这被称为伪相关反馈。
术语选择函数通常依赖的因素包括:
- 术语在排名前的文档中的出现频率 – 越高越好。
- 术语在排名前M的文档中出现的文档数量 – 越高越好。
- 一个额外术语与查询术语的共现次数 – 越高越好。
共现因素是最重要的,它会给你像’pgsql’这样的术语,如果原始查询包含’psql’的话。
请注意,如果文档太短,这种方法效果不会很好,你必须使用其他基于语义的方法,例如i) 基于词向量的扩展或ii) 基于WordNet的扩展。