文本分類任務
- 任務簡介
- 1.字符數值化
- 方式1
- 方式2
- 2.池化(pooling)
- 3.全連接層
- 4.歸一化函數(Sigmoid)
- 5.總結
- 從任務抽象新的技術點
- Embedding層
- 池化層
任務簡介
任務介紹: 字符串分類,根據一句話的含媽量,區分為兩類,一類為正向,一類為負向
舉例:
- 我的媽呀?
- 你媽媽的媽媽叫什么?
根據含有兩個3媽以上,即含媽量超標,判定為負向。即1正,2負
目標: 所以我們需要建模,即建立一個f(x),將我們的含媽量語句輸入后,輸出1為正,輸出0即為負。
1.字符數值化
釋義: 我們知道,模型是進行數學運算,輸入的內容一定要是數字,不能是直接的字符,所以我們先要把每個字轉為字符。
方式1
問: 直觀方式,我 -> 1, 你 -> 2, 他 -> 3 …. 媽 -> 26… 是否合理?
答: 問就是不合理。如果把漢字字符簡單的映射為一個個的數字,那么這些數字就會存在一些明細的規律,比如:1+2 =3;那是不是意味著,我+你就等于他
;這樣很容易讓模型找規律時,會被影響到。
方式2
方案: 將每一個字符轉化為同維度的向量
例如:
我 - > [0.32618175 0.20962898 0.43550067 0.07120884 0.58215387]
你 - > [0.21841921 0.97431001 0.43676452 0.77925024 0.7307891 ]
…
他 -> [0.72847746 0.72803551 0.43888069 0.09266955 0.65148562]
詳細釋義:
1.我們將
每個字符隨機生成一個向量,這樣就避免了字符之間存在簡單的加減乘除關系
2.我們將生成的向量也加入到模型的訓練中,這就要求生成的維度必須相同,這樣就可以使得語義相同的字:我、吾;
其向量值會相近
輸入:我的媽呀 --> 4x5的矩陣
這里我們輸入模型的就不是簡單的一個字符的數字,而是一串字符所代表的向量:
[[0.32618175 0.20962898 0.43550067 0.07120884 0.58215387]
[0.21841921 0.97431001 0.43676452 0.77925024 0.7307891 ]
[0.95035602 0.45280039 0.06675379 0.72238734 0.02466642]
[0.86751814 0.97157839 0.0127658 0.98910503 0.92606296]]
矩陣形狀 = 文本長度 x 向量長度
2.池化(pooling)
問題點: 我們最后要求模型輸出的是一個數字,這個數字接近1或者0來判斷
,語句的含媽量;但是我們看到了上面的輸入,一段話輸入,這個矩陣的行數我們不好控制
,并且我們如何將維度降低呢?
解決方案: 所以我們首先將輸入進行降維,也就是池化操作,通過池化操作將矩陣處理為向量
。
示例:
操作釋義:
1.我們將輸入的語句轉為矩陣后,我們這些向量相加,得到求和后的向量
2.我們將求和的向量的每列的數,根據相加向量的個數求平均,得到一個1*向量長度的矩陣,也就是向量。
上述過程就完成了降維,可以理解為對一句話的含義的壓縮。
3.全連接層
目的: 很簡單,根據第二部分,我們將矩陣轉為向量,那么我們需要將向量轉為數字輸出,即通過我們線性層(全連接層)來處理。
方案:
1.這里我們采用最簡單的線性層公式:y = wx +b
2.這里我們w的矩陣形狀和前面的向量有關系,即1向量長度,b要能夠和運算的結果相加,那么形狀肯定也是1*向量長度。
舉例:
注意:這里的x在實際中,potroch為將其轉置,下圖可以看到:
4.歸一化函數(Sigmoid)
目的: 歸一化函數也是激活函數,這里選擇Sigmoid的目的,很簡單,即將輸出的值映射到[0,1]范圍之間,
我們想要的輸出就是,靠近1就是正向,靠近0就是負向,它可以搬到
舉例:
x = 3 歸一化后值: σ(x) = 0.9526
函數圖像:
5.總結
1.字符轉成
向量
,向量構成輸入的矩陣
2.輸入矩陣進行池化,得到向量
3.經過全連接層y=w
*x +b
得到實數
4.實數經過歸一化sigmoid得到(0,1)之間的數
其中可以進行訓練的為紅色部分
從任務抽象新的技術點
Embedding層
釋義: 上述分類任務中,將字符轉化為向量的過程,我們叫Embedding。
舉例: 這一層的作用很簡單,就像你喊老外給你干活,用中文,他不懂;必須的先翻譯成英文告訴他;embedding就相當于翻譯給計算機聽。
注意:
1.
embedding層一把只有深度學習任務中才有
,是深度學習的一個特征
2.Embedding矩陣是可訓練的參數,一般會在模型構建時隨機初始化
,可以使用預訓練的詞向量來做初始化,此時也可以選擇不訓練Embedding層中的參數
比如:在當前火熱的大語言模型中,embedding層與模型層就是配套使用的,因為embedding加入到模型的訓練中,蘊含了一定的規律在里面。
3.多個語種和符號
可以放到一個詞表中,也就是一個embedding層可以涵蓋多種字符。
池化層
釋義: 上述的分類任務中,將一句話的形成的張量,轉化為一個向量的過程,就是我們說的池化。池化的目的是,降維,縮小模型,并且提取特征。
下面我們用視圖領域的圖像池化來做示例講解
:
過程:
上述左側4x4的數字,是將一張圖片Embedding為數字得到的
1.我們做一個2*2的正方形,將每一個正方形內最大的數字,提取為特征數字
2.全部提取完
成后,即得到一個新的2x2的矩陣
好處:
- 可以
降低后續的網絡層輸入維度
2.減小了模型的大小
,也就是參數量,因為輸入的參數矩陣變小了,和其相乘的后續矩陣的維度也就變小了
3.提高了模型的計算速度
,因為參數變少了
4.提高了特征的魯棒性,防止過擬合
,因為我們選取最大值,那么其他的參數只要在最大值一下,對我們整體的計算影響都會比較小
;如果是平均值,同樣如此