更多來自于GitHub:Reflection_Summary.
Bert的雙向體現(xiàn)在什么地方?
mask+attention往声,mask的word結合全部其他encoder word的信息
Bert的是怎樣實現(xiàn)mask構造的挪挤?
- MLM:將完整句子中的部分字mask,預測該mask詞
- NSP:為每個訓練前的例子選擇句子 A 和 B 時皿伺,50% 的情況下 B 是真的在 A 后面的下一個句子滋捶, 50% 的情況下是來自語料庫的隨機句子,進行二分預測是否為真實下一句
在數(shù)據(jù)中隨機選擇 15% 的標記疟丙,其中80%被換位[mask]颖侄,10%不變、10%隨機替換其他單詞享郊,這樣做的原因是什么览祖?
- mask只會出現(xiàn)在構造句子中,當真實場景下是不會出現(xiàn)mask的拂蝎,全mask不match句型了
- 隨機替換也幫助訓練修正了[unused]和[UNK]
- 強迫文本記憶上下文信息
為什么BERT有3個嵌入層穴墅,它們都是如何實現(xiàn)的?
- input_id是語義表達温自,和傳統(tǒng)的w2v一樣玄货,方法也一樣的lookup
- segment_id是輔助BERT區(qū)別句子對中的兩個句子的向量表示,從[1,embedding_size]里面lookup
- position_id是為了獲取文本天生的有序信息悼泌,否則就和傳統(tǒng)詞袋模型一樣了松捉,從[511,embedding_size]里面lookup
bert的損失函數(shù)?
- MLM:在 encoder 的輸出上添加一個分類層,用嵌入矩陣乘以輸出向量馆里,將其轉(zhuǎn)換為詞匯的維度,用 softmax 計算mask中每個單詞的概率
- NSP:用一個簡單的分類層將 [CLS] 標記的輸出變換為 2×1 形狀的向量,用 softmax 計算 IsNextSequence 的概率
- MLM+NSP即為最后的損失
手寫一個multi-head attention隘世?
tf.multal(tf.nn.softmax(tf.multiply(tf.multal(q,k,transpose_b=True),1/math.sqrt(float(size_per_head)))),v)
長文本預測如何構造Tokens?
- head-only:保存前 510 個 token (留兩個位置給 [CLS] 和 [SEP] )
- tail-only:保存最后 510 個token
- head + tail :選擇前128個 token 和最后382個 token(文本在800以內(nèi))或者前256個token+后254個token(文本大于800tokens)
你用過什么模塊鸠踪?bert流程是怎么樣的?
- modeling.py
- 首先定義處理好輸入的tokens的對應的id作為input_id,因為不是訓練所以input_mask和segment_id都是采取默認的1即可
- 在通過embedding_lookup把input_id向量化营密,如果存在句子之間的位置差異則需要對segment_id進行處理,否則無操作;再進行position_embedding操作
- 進入Transform模塊痢虹,后循環(huán)調(diào)用transformer的前向過程,次數(shù)為隱藏層個數(shù)主儡,每次前向過程都包含self_attention_layer奖唯、add_and_norm、feed_forward和add_and_norm四個步驟
- 輸出結果為句向量則取[cls]對應的向量(需要處理成embedding_size)丰捷,否則也可以取最后一層的輸出作為每個詞的向量組合all_encoder_layers[-1]
知道分詞模塊:FullTokenizer做了哪些事情么寂汇?
- BasicTokenizer:根據(jù)空格等進行普通的分詞
- 包括了一些預處理的方法:去除無意義詞瓢阴,跳過'\t'這些詞,unicode變換健无,中文字符篩選等等
- WordpieceTokenizer:前者的結果再細粒度的切分為WordPiece
- 中文不處理,因為有詞綴一說:解決OOV
Bert中如何獲得詞意和句意液斜?
- get_pooled_out代表了涵蓋了整條語句的信息
- get_sentence_out代表了這個獲取每個token的output 輸出,用的是cls向量
源碼中Attention后實際的流程是如何的少漆?
- Transform模塊中:在殘差連接之前,對output_layer進行了dense+dropout后再合并input_layer進行的layer_norm得到的attention_output
- 所有attention_output得到并合并后示损,也是先進行了全連接,而后再進行了dense+dropout再合并的attention_output之后才進行l(wèi)ayer_norm得到最終的layer_output
為什么要在Attention后使用殘差結構始鱼?
殘差結構能夠很好的消除層數(shù)加深所帶來的信息損失問題
平時用官方Bert包么脆贵?耗時怎么樣医清?
- 第三方:bert_serving
- 官方:bert_base
- 耗時:64GTesla卖氨,64max_seq_length,80-90doc/s
- 在線預測只能一條一條的入?yún)啬澹瑢嶋H上在可承受的計算量內(nèi)batch越大整體的計算性能性價比越高
你覺得BERT比普通LM的新穎點系吭?
- mask機制
- next_sentence_predict機制
elmo、GPT村斟、bert三者之間有什么區(qū)別抛猫?
- 特征提取器:elmo采用LSTM進行提取孩灯,GPT和bert則采用Transformer進行提取。很多任務表明Transformer特征提取能力強于LSTM峰档,elmo采用1層靜態(tài)向量+2層LSTM,多層提取能力有限掀亩,而GPT和bert中的Transformer可采用多層欢顷,并行計算能力強。
- 單/雙向語言模型:GPT采用單向語言模型抬驴,elmo和bert采用雙向語言模型。但是elmo實際上是兩個單向語言模型(方向相反)的拼接布持,這種融合特征的能力比bert一體化融合特征方式弱。
- GPT和bert都采用Transformer按傅,Transformer是encoder-decoder結構胧卤,GPT的單向語言模型采用decoder部分,decoder的部分見到的都是不完整的句子灌侣;bert的雙向語言模型則采用encoder部分,采用了完整句子