首页 / 文章 / 让精确的术语与含义在搜索中协同发挥作用

让精确的术语与含义在搜索中协同发挥作用

将词汇候选列表和语义候选列表合并,但不得将不兼容的搜索得分视为可互换的。

572 词

正在查找 ERR_CACHE_STALE 的开发者期望得到对应的错误代码。另一位开发者则可能将同样的问题描述为“应用程序一直显示昨天的数据”。一个有效的知识检索系统应能处理这两种查询需求。

当确切的拼写本身蕴含信息时,词汇检索就显得非常重要。语义检索则能将不同表述下的相同概念联系起来。将两者结合使用,可使每种方法都有机会找到另一种方法遗漏的证据。

具体的设计决策决定了这两种方法的结合方式。

让每种检索器都能访问语料库

假设语义搜索找到了二十个候选结果,随后由词汇评分器对这些候选结果进行排序。这虽然能改善结果的顺序,但初始二十个结果之外的完全匹配项依然无法被识别。

为覆盖更广泛的候选项,需对符合条件的语料库应用两种检索方法并合并其结果。两种路径应使用相同的来源筛选规则和过滤器。因身份不确定而被排除的文档不应通过第二种检索器再次被纳入。

这直接建立在来源清单之上:检索应基于你准备使用的证据来进行。

在设计评分算法之前先合并排名

BM25分数与余弦相似度分数代表不同的计算方式。将它们直接相加虽能得到一个数值,但该数值并不能自动被理解为综合相关性。

倒数排名融合法可提供一个简单的基准。每个排序列表会根据候选项的位置贡献一个数值:

fused_score(document) = sum(1 / (c + rank_in_list))

排名从1开始。对于未检索到的文档,列表不会产生任何贡献值。正数常量c用于控制不同位置之间贡献值的变化幅度。

这样做的好处是操作简单:合并过程无需确保各分数的量级一致。但缺点是会忽略分数的绝对大小,即使某个检索器认为两个结果差异很大,它们也会获得相似的贡献值。

将该常量及候选项数量保存在配置中,再对其进行评估。这些只是设计选择,并不能保证结果的相关性。

按标识符去重,而非标题

两个检索器可能会返回相同的内容片段。应通过其稳定的标识符来合并这些片段,使两个排名都计入同一个候选项中,而不要将其视为两段独立的证据。

标题是较为弱的标识符。不同的文章可能使用相同的标题,且同一篇文章的标题也可能会更改。一个有效的块标识应包含来源信息、内容版本以及块的位置。

还需区分完全重复的候选项与同一部分中相近的块。如保留证据的分块方法中所讨论的,后者日后可能需要合并处理。

分别测试不同类型的查询

至少准备三组问题:完全基于标识符的查询、基于概念描述的查询,以及两者的混合查询。对比仅使用词汇搜索、仅使用语义搜索以及两种方法结合后的结果。

在评估答案质量之前,先检查相关证据是否已进入候选项池。如果融合方法有助于处理概念类查询,但却会降低精确匹配错误代码类查询的准确性,那么整体平均表现可能会掩盖这一重要问题。

小型技术库使用词法搜索就已经能取得不错效果。只有在检测到足够多的未命中情况时,才需要加入语义检索功能。保持词法搜索的基准值也有助于体现额外技术手段的实际价值。

将有用的候选列表传递给后续环节

融合系统生成的只是候选列表,并非最终判断结果。排名靠前的文档仍可能已经过时、内容不完整,或与问题中的重要筛选条件无关。

后续阶段可以利用更强的相关性信号对候选项重新排序。但任何后续的排序阶段都无法挽救那些从未进入候选列表的证据。应先评估候选项的覆盖范围,否则可能会对错误的资料顺序进行优化。