Autoregressive Search Engines: Generating Substrings as Document Identifiers
概
一种基于语言模型的高效的文档检索方式 (很不错的文章).
SEAL
-
SEAL 的思路很简单:
- 给定一个 query (大概是对想要的文档的描述);
- 语言模型 LM 根据 query 生成一段文本 (这段文本存在于某篇文档中);
- 倘若通过上述方式得当的文档不唯一, 计算每个文档的 score 然后筛选出最合适的.
-
问题1: 如何保证 LM 生成的文本一定在某篇文档中呢? 由于文本的方法现在在自回归的语言模型中, 我们可以这样理解:
- 假设我们依旧生成一些 tokens 且这些 tokens 连续地出现在一些文档中;
- 然后正常来说, 下一个 token 是这样选择的:这里 表示所有的 tokens.
- 但是, 我们这里限制生成范围不是 而是为某篇文档.
-
问题2: 那么如何快速构建 呢? 作者是借助 FM-index 实现的 (特别的是, 这里基本的元素不是单一的字符, 而是通过分词模型得到的片段).
-
上面举了一个例子, 用 token 作为生成的基本单元, 其实作者在实际中是一次性生成多个 (比如 10 个) 作为一组成为 ngrams. 但是这里面就会有一个问题, 我们知道:
所以 ngrams 的长度越长概率就会越低.
-
所以, 为了平衡长度的问题, 作者实际上给每个 ngram 打分是通过如下方式纠正的 (作者说是来自于 BM25 这一分词模型中的灵感, 我没有去看):
-
问题3: 显然, 倘若两篇文章有相同的片段的时候, 且 LM 恰好产生的就是这样的片段, 那么我们检索出来的文章就不唯一, 故作者实际上会同时考虑多个 ngrams, 然后根据如下方式进行一个综合的打分:
但是, 说实话, 我想不清楚这一块应该怎么实现 (也暂时不想去看源代码).
-
注: 显然, 没有是需要训练的.
代码
[official]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2022-10-29 Graph Convolutional Neural Networks for Web-Scale Recommender Systems