1. 从词向量到自注意力:NLP表示学习的演进之路
在自然语言处理领域,如何有效地表示文字信息一直是核心挑战。早期最简单的方法是one-hot编码,每个词用一个长度为词表大小的向量表示,其中只有对应词的位置为1,其余为0。假设中文词表有21128个字,"猫"可能表示为[0,0,...,1,...,0]。但这种表示存在两个明显缺陷:维度灾难(高维稀疏)和语义缺失(无法体现"猫"与"动物"的关系)。
词嵌入(Word Embedding)技术解决了这个问题。通过一个全连接层,我们将高维one-hot向量降维到密集的低维空间(如768维)。这个全连接层的权重矩阵本质上就是一个查找表,每一行对应一个词的嵌入向量。例如:
python复制embedding_layer = torch.nn.Linear(21128, 768) # 词表大小21128,嵌入维度768
word_vector = embedding_layer(one_hot_input) # 得到768维的词向量
这种表示的神奇之处在于,相似的词在嵌入空间中距离更近。通过在大规模语料上训练,模型会自动学习到"猫"和"狗"的向量夹角,比"猫"和"汽车"更小。但传统词嵌入有个致命缺陷——静态表示。同一个词在不同上下文总是相同向量,无法区分"苹果手机"和"吃苹果"中的"苹果"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 循环神经网络的困境与突破
为了解决一词多义问题,循环神经网络(RNN)被引入。RNN通过隐藏状态传递历史信息,理论上可以处理任意长度序列。当处理"我爱自然语言处理"时,模型对"爱"字的表示会考虑前面的"我"字。其计算过程可表示为:
code复制h_t = tanh(W_{ih} x_t + W_{hh} h_{t-1} + b_h)
其中h_t是当前时刻的隐藏状态,x_t是当前输入。
但RNN在实践中暴露了两个严重问题:
- 长程依赖衰减:当序列较长时,早期信息会逐渐稀释。就像"这个败家子把祖传的宝贝都卖了"这句话,RNN可能记住"卖"却忘了"败家子"这个关键主语。
- 并行化限制:必须严格按顺序计算,无法同时处理整个句子。处理100个词的句子需要100步计算。
长短期记忆网络(LSTM)通过精巧的门控机制部分缓解了这些问题。它包含三个关键门:
- 输入门:控制新信息进入记忆单元
