NLP 中的注意力机制是一种使模型能够在生成输出时动态关注输入数据特定部分的技术。 引入它们是为了解决早期序列到序列 (seq2seq) 模型中的局限性,这些模型难以处理长输入序列。 在传统的 seq2seq 架构中,编码器将整个输入压缩成固定长度的向量,通常会丢失重要的细节。 注意力机制通过允许解码器有选择地引用编码器的隐藏状态,在每个步骤中优先考虑最相关的信息来解决这个问题。 例如,在机器翻译中,当将法语句子“Le chat est assis sur le tapis”转换为英语时,该模型可能会关注“chat”和“assis”来产生“The cat sat”,同时减少对其他词语的关注。
核心思想涉及计算解码器的当前状态和所有编码器状态之间的“注意力分数”。 这些分数决定了在构建解码器的输出时,每个编码器状态应接收多少权重。 一种常见的方法是使用点积注意力:对于每个解码器步骤,该模型计算解码器的隐藏状态(查询)和编码器的隐藏状态(键)之间的相似度分数。 这些分数通过 softmax 归一化以创建概率分布(注意力权重),然后用于创建编码器状态的加权和(值)。 例如,当将“She loves reading books”翻译成德语时,生成单词“liest”(阅读)可能涉及输入中“loves”和“reading”的更高权重。 此过程允许模型根据上下文自适应地确定输入标记的优先级。
除了基本注意力之外,像自注意力和多头注意力这样的变体已经成为像 Transformer 这样的现代架构的基础。 自注意力允许输入标记相互交互,捕获序列内的关系(例如,在“The book is long, but it’s engaging”中将“it”连接到“book”)。 多头注意力并行运行多个注意力操作,使模型能够学习不同的模式。 这些机制为像 BERT 和 GPT 这样的模型提供支持,它们提高了诸如文本摘要(关注关键句子)或问题解答(将问题与相关段落对齐)之类的任务。 通过用注意力替换循环层,模型还可以提高计算效率,因为它们可以并行而不是逐步处理序列。 这种灵活性和性能解释了为什么注意力现在是 NLP 中的标准工具。