一切都始于一个简单的问题:机器如何理解文本?当你训练模型来区分垃圾邮件和正常消息,或判断评论的情感倾向时,底层发生了一些有趣的事情。模型必须以某种方式将字母和单词转换为数字,因为神经网络只能处理数字。



第一种天真的方法是为每个唯一的单词编号。好 = 6,坏 = 26,极棒 = 27。这看起来合理,但问题在于:数字26和27彼此接近,因此模型会认为“坏”和“极棒”很相似。而实际上,“极棒”和“好”在语义上更接近。这就是一个陷阱。

我们尝试了One Hot编码——为每个单词提供一个与整个词典等长的向量,只有一个位置是1,代表对应的单词,其余都是0。这个方法解决了排序的问题,但出现新问题:如果词典有2万词,每个向量就是2万个维度。占用大量内存,而且模型无法捕捉单词之间的语义关系。

后来引入了Bag of Words和N-gram——统计单词在文本中出现的次数。增加了上下文信息,但同样是高维稀疏向量,模型也无法理解单词之间的深层联系。例如,在句子“The librarian loves books”中,librarian和book没有邻近,N-gram无法捕捉到它们的关联。

这时,正确的编码方式——embedding(嵌入)——派上用场。其思想是相似的单词在向量空间中应该彼此靠近。想象一个二维平面:一条轴代表动物的大小,另一条轴代表危险程度。老虎和狮子会在“巨大且危险”的区域附近,而仓鼠则在“微小且安全”的区域。embedding就是这样一种密集的向量,存储了单词在n维空间中的语义信息。

最棒的是:用这些向量可以进行数学运算。比如,取“儿子”的向量,减去“男人”,再加上“女人”,得到的向量会接近“女儿”。或者:马德里 + 德国 - 西班牙 = 柏林。这之所以成立,是因为模型捕捉到了概念之间的关系。

那么,这样的embedding是怎么训练的呢?Google提出了Word2Vec,有两种方法。CBOW(连续袋模型)是用上下文单词预测中心词;Skip-Gram则相反,用中心词预测邻近词。这两种技术都非常适合训练词嵌入。

在现代模型如GPT或BERT中,情况略有不同。embedding层不是预先固定的,而是与模型一起训练。首先,将文本拆分成tokens,然后一个简单的神经网络为每个token生成embedding。这个层的权重是可训练参数,学会在空间中表示单词。接着,这些embedding经过解码器的各个模块,最终进入输出层,输出下一个token的概率。

还有一个小细节——位置编码。因为Transformer处理所有tokens时是并行的,不像RNN那样逐个处理,所以需要告诉模型单词的顺序。方法是加入位置向量,将其加到embedding向量上。这样就形成了“词义+位置”信息的结合。

经过位置编码的embedding会进入注意力机制——这是所有大型语言模型的核心。embedding捕捉单词的语义,但理解上下文则依赖于attention机制。因此,“key”在不同语境中会得到不同的上下文表示。

就这样,结合简单的思想——分词、词频统计、正确的embedding编码——逐步走向了Transformer和ChatGPT。如今,embeddings无处不在:在推荐系统、相似图片搜索、所有现代大型语言模型的基础。如果你想真正理解NLP,就必须了解CBOW、Skip-Gram以及这些架构的工作原理。这是基础,也是起点。
查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
请输入评论内容
请输入评论内容
暂无评论
  • 热门 Gate Fun

    查看更多
  • 市值:$2234.48持有人数:1
    0.00%
  • 市值:$2231.03持有人数:0
    0.00%
  • 市值:$2246.35持有人数:2
    0.24%
  • 市值:$2238.35持有人数:2
    0.00%
  • 市值:$2224.13持有人数:1
    0.00%