不定期更新,建議關注收藏點贊。
目錄
- transformer
- 大語言模型
- Google Gemma
- 疫情網民情緒識別
- 整體框架
baseline構建
模型調參、模型優化、其他模型
數據trick、指標優化、magic feature
數據增強、偽標簽、遷移學習
模型融合 - sklearn中TFIDF參數詳解
頻率閾值可以去掉高于max和低于min的特征
l2正則化 - 如何fine-tune微調BERT用于文本分類
有一片論文可以找一下 how to fine-tune BERT for text classification?以下只是幾個點,詳見paper
fine-tuning strategies
further pre-training 要求機器好、用時長
multi-task fine-tuning
長文本階段處理(長文本截斷對BERT不友好)
不同層的特質 不同層表征意義不一樣 哪一層是效果最好的
學習率(小的學習率)
transformer
幾乎所有NLP都是基于這個基礎上。
BERT
大語言模型
Google Gemma
30:00
疫情網民情緒識別
- 思路分析
linux系統需要把數據轉換成utf-8讀取
- 多模態情感分析->轉化成 文本情感分析->文本分類
機器學習方法:詞袋模型TFIDF(baseline,基于字還是詞)Ngram范圍、分類模型LR、SVM、XGBoost、等
深度學習方法:CNN,RNN,Transformer,早停、學習率衰減、Embedding向量dropout,雙層雙向RNN即Bi-LSTM Bi-GRU,Text CNN、Text RNN、Text Capsule等
遷移學習方法:BERT、XLNET、ALBERT等
預訓練模型 bert albert xlnet robert,BERT-WWM
不同層級相加、平均、concat
batch,epoch
對抗訓練 環境包的版本要注意
BERT+Word2Vec/Glove
- 標簽分布不平衡,1和-1占比較小
- 發布時間關于樣本數量和樣本標簽的分布、正文長度分布
文本長度也要注意設置多少能覆蓋90%的文本、北大開源分詞包pkuseg
- 數據集中有圖片和視頻信息的分布,圖片張數的分布、視頻分布及語義信息
- 代碼
把訓練集和測試集的文本編碼成bert的三條序列,填充成固定的文本長度,并保存起來,標簽類型編碼改成0-2,利用transformer包構建bert模型導入,五折交叉驗證訓練模型,有兩種結果,一種是概率相加取平均,另一種是每一折結果取出來做投票
batch_size=32還是64要與顯卡的內存32g 還是64g對應上
改進思路:模型優化、修改損失函數、對抗訓練
- 數據增強
-
- 為什么要進行文本增強?常見的場景是少樣本、分類任務中樣本分布不均衡、半監督訓練場景、提高模型魯棒性。
解決方法:半監督學習算法UDA用在無標簽樣本上、回譯back translation、隨機詞替換、非核心詞替換、基于上下文信息的文本增強
方法的原理:1)保持語義不變,變換文本表達。2)按照某種策略對原文局部調整EDA easy data augmentation,如同義詞替換SR 、隨機刪除RD、隨機插入RI、隨機交換RS、非核心詞替換
- 為什么要進行文本增強?常見的場景是少樣本、分類任務中樣本分布不均衡、半監督訓練場景、提高模型魯棒性。
URA原理
不足之處:只進行了詞替換,沒提到刪除、交換等。
基于上下文信息的文本增強,首先需要一個訓練好的語言模型LM,對于需要增強的原始文本,隨機去掉文中的一個詞或字,取決于語言模型支持字還是詞(取決于語言模型支持字還是詞),將文本剩余部分輸入語言模型,選擇語言模型所預測的top k個詞去替換掉原文對應的詞,以形成新的k條文本。
利用語言生成模型進行文本生成 如GPT
工業界或比賽界用得最多的方式:回譯,測試時也可以增強,對一條測試樣本可以進行構造多條增強樣本,得到預測結果,和原來的結果進行加權融合 TTA、embedding技術,FastText+Glove pre-trained、偽標簽(將測試集得到的結果和訓練集合到一起再喂進去)、
-
- 回譯:利用翻譯模型不停翻譯成其他語種最后再翻譯回來
-
遷移學習
通過減少源域到目標域的分布差異進行知識遷移,從而實現數據標注工作。
傳統機器學習和深度學習,訓練集和測試集同分布。
遷移學習中的“域”:某個時刻某個特定的領域,比如書本評論和電視劇評論,本身分為source domain & target domain,并不要求二者數據分布一致。
遷移學習中的“任務”:比如情感分析和實體識別就是兩個不同的任務,source domain & target domain任務也不一定一致。
分為幾種,歸納式遷移學習inductive transfer learning(目標任務不同但相關,無論源域和目標域的數據域是否相同)、直推式遷移學習transductive(目標任務相同,但目標數據域中沒有或少量可獲得帶標記的數據,然而在源數據域中有許多可獲得帶標記的數據) 、無監督遷移學習(源域目標域都沒有帶標簽的數據,關注與目標任務上的聚類、降維和密度估計)。
單步遷移學習和多步遷移學習。比如源域圖片、目標域文字,需要做多步遷移,找一個中間域,劃分為單步遷移。單步又分為同構DA、異構DA,它們區別在于數據空間是否一致。
domain adaptation,其中feature adaptation很重要:源域和目標域共享同樣的特征,提取到共同空間。 -
特征工程
-
模型調參
參數初始化很重要,很多時候是這里的問題。
Glorot條件:優秀的初始化應該使各層激活值和狀態梯度的方差在傳播過程中的方差保持一致。
初始化方法下面推薦3種。
- Xavier
- He
- normal
根據3σ原則,概率得到幾乎只會出現在(μ-3σ,μ+3σ)之間
技巧:
shuffle,
batch normalization BN用于圖像處理, layer normalization LN用于文本處理 ,
梯度裁剪:限制最大梯度,對超過閾值的梯度進行規約,使優化算法更加穩定,
dropout 防止過擬合 一般設置為0.5,adam優化器:小數據集嘗試sgd(慢但是效果好),大數據集先用adam,快收斂的時候換sgd,
學習率用sgd的化考慮從1或0.1開始
激活函數 tanh或relu比sigmoid更優
sigmoid在-4到4的區間才會有較大的梯度,之外梯度接近0,很容易造成梯度消失問題,輸入0均值,sigmoid輸出后非0均值
其他超參數 如focal loss參數,這個不是在所有場景下都有效
全連接層,如果輸入和輸出大小一致,建議用highway network替換
highway network
- 模型融合
哪些模型可以拿來融合?同樣參數但模型訓練的不同階段即不同迭代次數的模型、同樣參數不同的初始化方式、半監督加入的數據量、不同的模型(如bert系列 bert albert xlnet bert-wwm roberta 都是基于transformer結構的預訓練語言模型 統稱為bert家族)、融合特征工程
文本輸入的截斷方式:三種,pre-truncate,post-truncate,middle-truncate(head+tail)
bert 是一種基于transformer encoder構建的預訓練語言模型,通過masked language model MLM +Next sentence prediction NSP兩個任務在大規模語料上訓練得到的;開源的bert分為base 和large,模型大小不同。
bert-wwm 模型結構和bert完全一樣,只是在MLM訓練任務上做了小的改進,bert在做MLM采用的是token級別的mask,而bert-wwm采用詞級別的mask。
roberta是bert優化版,只是在數據量和訓練方式上做改進,更大的數據量更好的訓練方式訓練的更久,去除了NSP任務有損模型性能,MLM換成dynamic masking LM, 更大的batchsize及其他超參數的調優。
XLNet對bert做了較大的改動,二者在模型結構和訓練方式上都有不小的差異。
Bert的MLM在預訓練時有mask標簽,但使用時沒有,導致訓練和使用出現不一致;MLM不屬于autoregressive LM不能做生成類任務,XLNet采用PML permutation language model避免mask標簽的使用,且可以做生成任務。Bert使用的transformer結構對文本長度有限制,XLNet使用升級版的transformer-XL
Albert是bert的瘦身版本,更簡單的模型,更少的數據,得到更好的結果。通過兩個方面減少模型參數量,對vocabulary embedding進行矩陣分解,將原來的矩陣VxE分解成兩個矩陣VxH和HxE(H<<E),跨層參數共享可以避免參數量隨網絡深度增加而增加。
這些模型在不同數據集上有差異,需要試一下才知道哪個好。總體而言,XLNet,roberta,Bert-wwm會比bert效果略好,large比base好,albert也有多個版本,tiny版本好很多。更多情況下會被一起使用,最后做ensemble.
NLP:BERT, TextRNN, TextCapsule
分類問題采用投票方法,回歸問題采用平均、加權平均,權值按模型效果進行排名。交叉驗證也是一個方式,把每一折數據固定下來,看效果,也是按加權平均。
stacking的方式
- 面試題
這個項目有什么難點?針對這個怎么優化的
預訓練模型BERT和word2vex+textRNN based encoder哪個效果好
BERT在per train 時候和word2vec有什么異同點
bert的token怎么分詞的
bert如何獲得詞意和句意
為什么bert有3個嵌入層,它們如何實現的
bert在Per train階段的損失函數
為什么fine-tune有效?學習到針對特定任務的特征,學到了深層次的語義信息。
1.word2vec與Elmo模型在語義學習上差異是什么?
2.Batch Normalization與Layer Normalization區別?bert中為什么用后者?
3.熟悉GELU激活函數,與RELU差異。
4.實際操作,Semi-Supervised DA方法;
5.對比實施模型融合的相關方法。
1.有哪些文本增強方法?你用過哪些文本增強方法
2.BERT有哪些調參方法?你是如何調參的?Transformer的原理?
3. 嘗試模型調參(比如BERT和word2vec構建詞向量)
4. 了解一種文本增強方法
5. 代碼實現文本增強(比如回譯技術)
涉及論文:
Understanding the diffificulty of training deep feedforward neural networks
Delving Deep into Rectififiers:
Surpassing Human-Level Performance on ImageNet Classifification
Highway Networks
論文下載地址:
https://arxiv.org/abs/1502.01852
http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
https://arxiv.org/abs/1505.00387
作業名稱(詳解):面試問題及比賽實戰。
1.跑通其它的預訓練模型
2.嘗試多模型的融合,實現stacking方式
3.嘗試加入特征進行模型學習
4.熟悉幾種常用的參數初始化方法及其原理(看paper)
5.熟悉adam原理(看paper)
- Bert
有兩個預訓練任務,MLM masked language model(在每一輪迭代中隨機選擇15%的詞隱藏,目標是通過它們的上下文來預測這個單詞,操作是取這些詞對應的最后一個隱單元向量后接一個softmax來預測這個詞,80%采用masked,10%隨機選擇其他詞填充,10%使用原詞,這個平衡了masked和fine-tune)、Next Sentence Prediction(預測第二個句子是否可以自然的接在第一個句子后面,是一個二分類問題,用于理解句子間的關系)
是一個12層的網絡,學到位置信息,多頭attention公式見上圖右邊,I是原始輸入,輸出key,value,query。