Adaptive RAG(二):Retrieval Gate 怎么判断该不该检索
上一篇把 Adaptive RAG 的问题收束到一个工程动作:先做显式 retrieval gate。它不是为了替代 Self-RAG、FLARE 或 DRAGIN,而是先给系统建立一个可观测的判断层:当前状态到底该不该检索。
这篇继续往下走,讨论 retrieval gate 应该吃什么信号、输出什么结论,以及怎么评测它。
上一篇把 Adaptive RAG 的问题收束到一个工程动作:先做显式 retrieval gate。它不是为了替代 Self-RAG、FLARE 或 DRAGIN,而是先给系统建立一个可观测的判断层:当前状态到底该不该检索。
这篇继续往下走,讨论 retrieval gate 应该吃什么信号、输出什么结论,以及怎么评测它。
RAG 最容易被讲成一个检索增强公式:切块、向量化、取 top-k、拼进 prompt、让模型回答。这个公式很实用,但它默认了一件事:系统在回答之前已经知道自己缺什么信息。
复杂任务里,这个假设经常不成立。问题可能在生成到一半才暴露,证据可能和当前结论冲突,召回内容也可能只是语义相似而不是事实支撑。于是 Adaptive RAG 真正要解决的不是“多检索一些”,而是:系统什么时候应该承认当前上下文不够,并把检索变成下一步可验证动作。
普通 VAD 只回答“这里有没有人声”。Personal VAD 要回答更难的问题:这里有没有目标说话人的声音。这个差异会把任务从声学检测推进到说话人条件建模。
项目代码可参考:Personal-vad-2.0
多语种 ASR 不是把多个单语模型简单合并。它真正要解决的是三个工程问题:低资源语种数据不足,口音和方言带来分布偏移,多语种部署让模型数量和维护成本快速上升。
如果只把多语种识别理解成“一个模型识别很多语言”,很容易忽略它背后的取舍:共享越多,迁移越强,但语种之间的干扰也越明显。
ASR 训练里有一个基础矛盾:音频是长帧序列,文本是短标签序列,但训练数据通常只有整句转写,没有每个字对应哪几帧的强制对齐。CTC(Connectionist Temporal Classification)解决的就是这个问题。
它的核心不是一个普通 loss,而是一套弱对齐建模方式:允许模型在不知道帧级标签的情况下,对所有可能对齐路径求和,再优化目标文本的总概率。
语音识别里的特征归一化很容易被当成预处理细节:把均值拉到 0,把方差压到 1,然后继续训练模型。这个理解没有错,但它没有说清楚 CMVN 真正解决的问题。
CMVN 要处理的是录音设备、信道、说话环境和能量尺度带来的系统性偏移。它不是为了让特征“好看”,而是为了让声学模型少花容量去适配无关的通道差异。
传统 ASR 通常把声学模型、发音词典和语言模型拆成多个模块。LAS(Listen, Attend and Spell)提出的是另一种问题表述:能不能让模型先听完整段语音,再通过 attention 找到相关声学片段,最后像拼写一样输出字符序列。
这篇文章不把 LAS 当成历史模型罗列,而是把它看成端到端 ASR 的一个关键抽象:对齐不必显式写死,可以由 decoder 在生成时学习。
ASR 模型看到的通常不是原始波形,而是一组经过短时分析和频率压缩的声学特征。预加重、分帧、加窗、傅里叶变换、Mel 滤波这些步骤看起来像传统信号处理清单,但它们共同解决一个问题:把连续、非平稳的语音波形变成模型可以稳定学习的局部谱表示。
脑机接口里的 SSVEP 频率识别有一个很实际的问题:训练数据少、个体差异大、信号噪声高,但系统仍然需要快速判断用户注视的是哪个闪烁频率。
CCA(Canonical Correlation Analysis)看起来是一个传统线性统计方法,却长期在 SSVEP 中有效。原因不在于它复杂,而在于它抓住了任务里最稳定的结构:刺激频率和脑电响应之间的相关性。
个人博客最重要的第一步不是主题多漂亮,而是发布链路是否稳定:本地能写,静态站能生成,GitHub Pages 能托管,域名能访问,后续文章能持续更新。
Hexo + GitHub Pages 的价值在于把这个链路压到足够轻:Markdown 写作、Node.js 生成静态页面、GitHub 托管、域名解析到 Pages。