今年四月份做了關(guān)于elmo復(fù)現(xiàn)和微調(diào)方面的工作玄柏。近期在內(nèi)部和鳳巢做了兩次關(guān)于elmo的分享八拱,感覺大家對(duì)這個(gè)模型較為陌生柱恤,發(fā)現(xiàn)其中有些細(xì)節(jié)和經(jīng)驗(yàn)值得拿出來說一說,希望對(duì)你會(huì)有所幫助拷况。
? ? ? ? ELMo全稱Embeddings from Language Models作煌,是2018年allen nlp的發(fā)布的大規(guī)模語義模型,paper為《Deep contextualized word representations》赚瘦。
? ? ? ? 既然有Bert為什么要講ELMo粟誓?個(gè)人認(rèn)為,其實(shí)ELMO微調(diào)方式有一定創(chuàng)新性起意,給人以啟發(fā)鹰服。
? ? ? 以下是根據(jù)個(gè)人經(jīng)驗(yàn)梳理出來的你值得關(guān)注的一些細(xì)節(jié)。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
細(xì)節(jié)一:elmo的網(wǎng)絡(luò)結(jié)構(gòu)是雙向雙層的lstm,如何實(shí)現(xiàn)雙向的lstm的呢揽咕?
? ? ? 與Bert在預(yù)訓(xùn)練目標(biāo)中使用masked language model來實(shí)現(xiàn)雙向不同悲酷,ELMo的雙向概念實(shí)際是在網(wǎng)絡(luò)結(jié)構(gòu)中體現(xiàn)的。輸入的embedding通過lstm的hidden state作為正向輸出亲善,embedding做reverse后的結(jié)果再通過lstm的hidden state反向輸出舔涎,正向輸出與反向輸出做concat。最后輸出實(shí)際是個(gè)lauguage model逗爹,基于前面的詞計(jì)算下一個(gè)詞的概率。
細(xì)節(jié)二:與Bert的相比,ELMo微調(diào)是如何實(shí)現(xiàn)的掘而?
? ? ? ELMo的微調(diào)從嚴(yán)格意義上來說挟冠,不是真正的微調(diào),預(yù)訓(xùn)練網(wǎng)絡(luò)結(jié)果是fix的袍睡。 整體來說知染,是把句子輸入到預(yù)訓(xùn)練網(wǎng)絡(luò)的embedding,與下游任務(wù)word embedding做concat斑胜,concat的結(jié)果整體作為下游NLP任務(wù)的輸出控淡。圖為上游ELMO網(wǎng)絡(luò)遷移到下游閱讀理解bidaf網(wǎng)絡(luò)中。
ELMo遷移到下游NLP任務(wù)
細(xì)節(jié)三:ELMo的語義表示輸出是如何處理的止潘?
ELMo的語義表示輸出計(jì)算公式如下:
其中掺炭,hk 代表三層的輸出(分別是embedding層,第一層lstm凭戴,第二層lstm)涧狮,與W相乘的權(quán)重參數(shù), 通過 個(gè)softmax得到? , 權(quán)重參數(shù)W加入 L2 正則么夫,防止擬合者冤。
r是整體的縮放因 ,為的是與下游的任務(wù) embedding概率分布統(tǒng)一 档痪。
代碼里還有個(gè)小技巧涉枫,word embeding層是256維,所以他把相同word embedding做個(gè)concat腐螟,與lstm輸出的516維統(tǒng)一起來愿汰。
從這些細(xì)節(jié)處理可以看出ELMo在微調(diào)階段的處理與Bert有挺大的不同。
細(xì)節(jié)四:elmo適合哪些下游NLP 任務(wù)遭垛?
ELMo在短本任務(wù)上表現(xiàn)好尼桶。ELMo遷移到下游網(wǎng)絡(luò)中, 一個(gè)是答案較短的數(shù)據(jù)集锯仪,提升有3-4個(gè)點(diǎn)泵督, 一個(gè)答案較長(zhǎng)的數(shù)據(jù)集,提升只有0.5 左右庶喜。在實(shí)驗(yàn)中小腊,我們對(duì)比過詞法分析和閱讀理解任務(wù),其在詞法分析效果好于閱讀理解久窟。
細(xì)節(jié)五:elmo還有哪些值得注意的參數(shù)細(xì)節(jié)秩冈?
1. dropout的處理方式:訓(xùn)練時(shí)候設(shè)置為0.5,為防止過擬合斥扛。infer階段dropout設(shè)置為0入问。
2.r值對(duì)微調(diào)階段影響很大。r值對(duì)語義表示的輸出調(diào)節(jié)與下游NLP任務(wù)的閾值有較大幫助。
3.No L2 和 L2效果差不多芬失。elmo的語義表示輸出公式中權(quán)重參數(shù)W中加入了L2正則楣黍,從實(shí)驗(yàn)結(jié)果來,沒有L2正則對(duì)結(jié)果影響不大棱烂,猜想可能是dropout的設(shè)置過大租漂,導(dǎo)致L2對(duì)結(jié)果不產(chǎn)生影響。
圖為ELMo遷移到下游網(wǎng)絡(luò)的結(jié)果颊糜,紅色的baseline為百度詞法分析LAC哩治。
細(xì)節(jié)六: 如何訓(xùn)練自己的elmo中文預(yù)訓(xùn)練模型?
? ? ? 準(zhǔn)備約3G的中文文檔數(shù)據(jù)衬鱼。GPU:8卡GPU业筏,顯存大于22GB,調(diào)節(jié)batch_size馁启,適合于顯存大小驾孔,最大限度利用顯存資源。訓(xùn)練時(shí)間約為一周惯疙,7天翠勉。
細(xì)節(jié)七:ELMO微調(diào)訓(xùn)練周期長(zhǎng)的下游任務(wù),如何在較短時(shí)間看是否靠譜霉颠?
? ? ? 有個(gè)技巧是把finetune階段dropout往大了調(diào)对碌,使其快速過擬合≥镔耍看峰值是否符合預(yù)期朽们。