在我們開始之前,先來快速了解一下令牌化(Tokenization)!
原始文本 → 令牌化 → 嵌入(Embedding) → 模型
嵌入是使用一系列數字對每個令牌(大致上是一個單詞)進行有意義的表示。
這種嵌入是我們提供給語言模型的輸入。
![](https://news.xinpengboligang.com/upload/keji/54cee6f0f54166ff8f3358ed04f15556.jpeg)
語言建模的核心思想是理解語言內部的結構和模式。
通過建模句子中單詞(令牌)之間的關系,我們可以捕捉到文本的上下文和含義。
![](https://news.xinpengboligang.com/upload/keji/588a580e4023d326c3930a04f747059a.jpeg)
現在,自註意力是一種溝通機制,幫助建立這些關系,以概率分數表示。
每個令牌都給自己分配最高分,並根據其他令牌的相關性分配額外分數。
你可以把它想象成一個有向圖
![](https://news.xinpengboligang.com/upload/keji/ad4e981b179be597d87e1321bacfb7ad.jpeg)
要理解這些概率/註意力分數是如何獲得的:
我們必須理解3個關鍵術語:
- 查詢向量(Query Vector)
- 鍵向量(Key Vector)
- 值向量(Value Vector)
這些向量是通過將輸入嵌入乘以三個可訓練的權重矩陣來創建的。
![](https://news.xinpengboligang.com/upload/keji/7149d119c8f2ec539a45d8642ff5f7eb.jpeg)
現在,這裡是一個關於如何將輸入嵌入與鍵(Keys)、查詢(Queries)和值(Values)結合以獲得實際註意力分數的更廣闊的圖景。
在獲取鍵、查詢和值之後,我們將它們合並以創建一組新的、有上下文感知的嵌入。
![](https://news.xinpengboligang.com/upload/keji/c1715ddf67f254dacecb6e8cea63ad52.jpeg)
使用PyTorch實現自註意力,再簡單不過了!
非常直觀!
![](https://news.xinpengboligang.com/upload/keji/bc69458c904852f49d538dae401765a9.jpeg)