✍️ Gate 广场「创作者认证激励计划」进行中!
我们欢迎优质创作者积极创作,申请认证
赢取豪华代币奖池、Gate 精美周边、流量曝光等超 $10,000+ 丰厚奖励!
立即报名 👉 https://www.gate.com/questionnaire/7159
📕 认证申请步骤:
1️⃣ App 首页底部进入【广场】 → 点击右上角头像进入个人主页
2️⃣ 点击头像右下角【申请认证】进入认证页面,等待审核
让优质内容被更多人看到,一起共建创作者社区!
活动详情:https://www.gate.com/announcements/article/47889
一切都始于一个简单的问题:机器如何理解文本?当你训练模型来区分垃圾邮件和正常消息,或判断评论的情感倾向时,底层发生了一些有趣的事情。模型必须以某种方式将字母和单词转换为数字,因为神经网络只能处理数字。
第一种天真的方法是为每个唯一的单词编号。好 = 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以及这些架构的工作原理。这是基础,也是起点。