Autoregressive Search Engines: Generating Substrings as Document Identifiers

Bevilacqua M., Ottaviano G., Lewis P., Yih W., Riedel S. and Petroni F. Autoregressive search engines: generating substrings as document identifiers. NIPS, 2022.

一种基于语言模型的高效的文档检索方式 (很不错的文章).

SEAL

  • SEAL 的思路很简单:

    1. 给定一个 query q (大概是对想要的文档的描述);
    2. 语言模型 LM 根据 query 生成一段文本 (这段文本存在于某篇文档中);
    3. 倘若通过上述方式得当的文档不唯一, 计算每个文档的 score 然后筛选出最合适的.
  • 问题1: 如何保证 LM 生成的文本一定在某篇文档中呢? 由于文本的方法现在在自回归的语言模型中, 我们可以这样理解:

    1. 假设我们依旧生成一些 tokens [t1,t2,,tk] 且这些 tokens 连续地出现在一些文档中;
    2. 然后正常来说, 下一个 token 是这样选择的:

      tk+1=argmaxtTp(t|p,t1,t2,,tk).

      这里 T 表示所有的 tokens.
    3. 但是, 我们这里限制生成范围不是 T 而是

      Tk+1:={tT:[t1,t2,,tk,t]d,dD},

      dD 为某篇文档.
  • 问题2: 那么如何快速构建 Tk+1 呢? 作者是借助 FM-index 实现的 (特别的是, 这里基本的元素不是单一的字符, 而是通过分词模型得到的片段).

  • 上面举了一个例子, 用 token 作为生成的基本单元, 其实作者在实际中是一次性生成多个 (比如 10 个) 作为一组成为 ngrams. 但是这里面就会有一个问题, 我们知道:

    p(tk,tk1,,t1|q)=i=1kp(ti|p,ti1,,t1),

    所以 ngrams 的长度越长概率就会越低.

  • 所以, 为了平衡长度的问题, 作者实际上给每个 ngram 打分是通过如下方式纠正的 (作者说是来自于 BM25 这一分词模型中的灵感, 我没有去看):

    w(n,q)=max(0,logp(n|q)(1p(n))p(n)(1p(n|q))).

  • 问题3: 显然, 倘若两篇文章有相同的片段的时候, 且 LM 恰好产生的就是这样的片段, 那么我们检索出来的文章就不唯一, 故作者实际上会同时考虑多个 ngrams, 然后根据如下方式进行一个综合的打分:

    W(d,q)=nK(d)w(n,q)αcover(n,K(d)).

    但是, 说实话, 我想不清楚这一块应该怎么实现 (也暂时不想去看源代码).

  • 注: 显然, 没有是需要训练的.

代码

[official]

posted @   馒头and花卷  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2022-10-29 Graph Convolutional Neural Networks for Web-Scale Recommender Systems
点击右上角即可分享
微信分享提示