生活随笔
收集整理的這篇文章主要介紹了
【数据竞赛】NLP竞赛中99%上升的技巧!
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:杰少
強化Transformer的語意表示的策略
簡介
在諸多NLP等的問題中,我們會使用預訓練模型并在其最后一層進行微調,例如我們就會經常采用下面的微調方式:
然而,由于Transformer經常是多層的結構,不同的層可以捕獲到不同的表示信息。可以學習到更為豐富的語言信息層次,即:
最下層的表面特征;
中間層的句法特征;
更高層的語義特征。
BERT的作者通過將不同的向量組合作為輸入特征輸入到命名實體識別任務的BiLSTM,并觀察結果F1分數,來測試單詞嵌入的策略。最后四層的連接產生了最好的結果
也就是說,如果我們處理NLP的相關問題時:
示例代碼
class?AttentionHead(nn.Module):def?__init__(self,?h_size,?hidden_dim=512):super().__init__()self.W?=?nn.Linear(h_size,?hidden_dim)self.V?=?nn.Linear(hidden_dim,?1)def?forward(self,?features):att?=?torch.tanh(self.W(features))score?=?self.V(att)attention_weights?=?torch.softmax(score,?dim=1)context_vector?=?attention_weights?*?featurescontext_vector?=?torch.sum(context_vector,?dim=1)return?context_vectorclass?CLRPModel(nn.Module):def?__init__(self,transformer,config):super(CLRPModel,self).__init__()self.h_size?=?config.hidden_sizeself.transformer?=?transformerself.head?=?AttentionHead(self.h_size*4)self.linear?=?nn.Linear(self.h_size*2,?1)self.linear_out?=?nn.Linear(self.h_size*8,?1)def?forward(self,?input_ids,?attention_mask):transformer_out?=?self.transformer(input_ids,?attention_mask)all_hidden_states?=?torch.stack(transformer_out.hidden_states)cat_over_last_layers?=?torch.cat((all_hidden_states[-1],?all_hidden_states[-2],?all_hidden_states[-3],?all_hidden_states[-4]),-1)cls_pooling?=?cat_over_last_layers[:,?0]???head_logits?=?self.head(cat_over_last_layers)y_hat?=?self.linear_out(torch.cat([head_logits,?cls_pooling],?-1))return?y_hat
小結
在NLP所有用到預訓練模型的問題中,我們都應該嘗試將最后幾層一起拼接使用的策略。
參考文獻
http://jalammar.github.io/illustrated-bert/
https://towardsdatascience.com/my-first-gold-in-kaggle-tips-and-tricks-for-an-nlp-competition-cec48dda5895
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯
AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件
本站qq群955171419,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【数据竞赛】NLP竞赛中99%上升的技巧!的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。