返回列表

注意力机制(Attention):模型怎么知道哪句话重要

注意力机制让模型在生成每个词时,给上下文里的其他词动态算一组权重,权重高的词多关注,权重低的少管。这套机制是模型处理长句关系、指代对齐和上下文关联的重要基础。但它有个绕不开的短板,注意力会随距离衰减,文本一长,中间那段常被忽略。所以长文档通常不宜整篇硬塞给模型,较常见的做法是先检索、再喂上下文。

 

 

注意力

 

 

早一点的模型按次序读文字,后面的词看不到前面全貌,隔着远的关系就丢了。注意力换了个法子:在上下文窗口范围内,模型可计算当前词与前文位置的关联,而且自己决定看谁、看多少。

 

具体过程是这样。模型要生成第 t 个词,就对上下文第 1 到第 t-1 个词各算一个关注度,这些关注度加总是 1。然后按关注度把那些词的表示加权加起来,当作生成当前词的依据。重点在于,模型不再平均对待上下文,谁跟当下有关,谁的权重就高。

 

可以把它想成开会,有人发言你认真听,有人说话你走神,模型也是给每个位置分配注意力预算。再细一层,它算的不止一组权重,是多组同时算(多头注意力),每组盯一种关系,有的管语法搭配,有的管指代对齐,多种联系一起抓。

 

注意力不只在文本里用。机器翻译靠它让译文词回头对齐源句词,帮助处理两种语言词序不同带来的对齐问题。看图说话时,狗这个词会去盯图里狗的区域。代码补全里,函数名会去扫相关定义。它是一套通用的按需关联办法,谁和谁相关就多连通。

 

 

权重从哪来

 

 

权重有来处,来自三个向量。每个词被映射成 Query(我想找什么)、Key(我是什么、方便被找)、Value(我实际带的信息)。算关注度时,拿当前词的 Query 和每个词的 Key 做点积,再除以根号 d(d 是向量维度,除它是防止维度一大点积数值爆掉),最后过一层 softmax 变成 0 到 1 的权重。用这些权重对 Value 加权求和,得到这一位置的输出。

 

这个设计的巧妙在:相关性靠的是问和找的匹配,没有写死的规则。模型在训练里自己学出该怎么投影这三个向量。同一句话里它的 Query 会和前面猫的 Key

撞出高分,指代就自然对齐了。所有词都既当提问方也当被找方,这叫自注意力。

 

 

位置衰减与中间盲区

 

 

注意力在纸面上能覆盖任意长度,实际训练出来的模型却偏爱首尾,中间被压低。2023 年一篇论文(Liu 等,arXiv:2307.03172,题目 Lost in the Middle)做了直白实验:把关键信息摆进文档不同位置让模型答题,放开头和结尾答对率高,放中间掉得明显。这说明上下文窗口有多大,和模型实际有效利用上下文信息的范围有多大,是两回事。

 

原因摊开看有几层...softmax 会把概率摊薄,位置一多,单个词分到的注意力份额就少。训练数据里超长文档占比小,模型少见要全程盯紧的活。生成长回答时,靠前的文段在后期被后续内容稀释。还有一个常被忽略的点,注意力计算和长度大致平方相关,每个词都要和所有词算一遍,文本越长越贵越慢,这又逼着大家别把整篇硬喂。

 

所以上下文越长越懂并不完全准确。几十页合同、整本手册直接丢进去,中段条款存在被忽略的风险。

 

注意力替代不了检索

 

 

回到那句分法:注意力管看哪儿,检索管给什么看,两者分工不同。注意力是模型内部的分配动作,它只能在已经放进上下文的东西里挑重点,没法凭空把资料库里相关的那段调进来。通常需要靠检索(RAG,检索增强生成)先去知识库找,把命中片段塞进上下文,注意力才有的挑。

 

不少团队踩过同一个坑:以为把整个知识库贴进 prompt 就完事。但这种方法token 花得多,注意力还被摊薄,真相关的那段反而被淹,长上下文推理也慢。检索增强是反过来想,先缩小范围,再让模型聚焦,有助于在成本控制和回答质量之间取得平衡。

还有一个常被忽略的细节,长上下文要把所有词的 Key、Value 都缓存(KV cache),文本越长显存越吃紧,这从工程侧也逼着大家别整篇硬喂。

 

 

常规解法

 

 

做法上先切块,别整篇硬喂。用语义分块,按意思边界切,不按固定字数硬切,尽量保证每段是完整语义单元。接着做混合检索,别只靠一种。向量检索认语义相近,关键词检索认精确词(型号、编号、专名),两路用 RRF 或 cross-encoder 融合,互相补短板。最后只把相关的几段送进模型,把有限的注意力预算留给真相关的上下文,有助于兼顾成本和效果。

 

小艾智能体的文档处理和问答链路,可参照上面这套搭建。用户传 PDF、Word、Excel 这类文件后,系统可先按语义切分文本,可使用 BGE-M3(1024 维)转换为向量存入 Milvus,可同时通过 Elasticsearch 进行关键词检索,两路结果可融合为混合检索。问答时只把相关的几段送进大模型,模型注意力集中在这些片段上,有助于降低无依据生成风险,并改善答案与检索材料的一致性;关键结论仍需复核。在实体抽取、关系校验和图谱构建质量满足要求时,Neo4j 知识图谱可辅助查询供应商等实体关系。