Task04:機器翻譯及相關技術;注意力機制與Seq2seq模型;Transformer
學習筆記見:https://www.cnblogs.com/guohaoblog/p/12324983.html
機器翻譯及其技術
1、數據預處理中分詞(Tokenization)的工作是?
A、把詞語、標點用空格分開
B、把字符形式的句子轉化為單詞組成的列表
C、把句子轉化為單詞ID組成的列表
D、去除句子中的不間斷空白符等特殊字符
解析:選B
# 將text中句子轉化為源語言單詞列表和目標語言單詞列表
num_examples = 50000 source, target = [], [] for i, line in enumerate(text.split('\n')): if i > num_examples: break parts = line.split('\t') if len(parts) >= 2: source.append(parts[0].split(' ')) target.append(parts[1].split(' ')) source[0:3], target[0:3] --------------------------------------- Out: ([['go', '.'], ['hi', '.'], ['hi', '.']], [['va', '!'], ['salut', '!'], ['salut', '.']])
2、不屬於數據預處理工作的是?
A、得到數據生成器
B、建立詞典
C、分詞
D、把單詞轉化為詞向量
答案:D
文本預處理步驟:①讀入文本 ②分詞 ③建立字典(詞典)
單詞轉化為詞向量是模型結構的一部分,詞向量層一般作為網絡的第一層
3、下列不屬於單詞表里的特殊符號的是?
A、未知單詞
B、空格符
C、句子開始符
D、句子結束符
答:選B
數據預處理時,空格一般會被處理掉。本課時講的特殊符有:<bos> <eos> <unk>
4、集束搜索(Beam Search)說法錯誤的是
A、集束搜索結合了greedy search和維特比算法。
B、集束搜索使用beam size參數來限制在每一步保留下來的可能性詞的數量。
C、集束搜索是一種貪心算法。
D、集束搜索得到的是全局最優解。
答:選擇D
貪心算法(greedy search)
維特比算法:選擇整體分數最高的句子(搜索空間太大) 集束搜索:
從A~E中選擇概率最大的兩個,得到A、C,再求與A、C相鄰的最大概率兩個,以此類推,最后可得到兩個序列,找出最大的一個。不是全局搜索,全局搜索相當於把每個節點都檢索一遍,並計算,比較耗時。維特比是啟發式(或貪心)的算法
5、不屬於Encoder-Decoder應用的是
A、機器翻譯
B、對話機器人
C、文本分類任務
D、語音識別任務
答:選擇C
Encoder-Decoder常應用於輸入序列和輸出序列的長度是可變的,如選項一二四,而分類問題的輸出是固定的類別,不需要使用Encoder-Decoder
6、關於Sequence to Sequence模型說法錯誤的是
A、訓練時decoder每個單元輸出的單詞作為下一個單元的輸入單詞
B、預測時decoder每個單元輸出得到的單詞作為下一個單元的輸入單詞
C、預測時decoder單元輸出為句子結束時跳出循環
D、每個batch訓練時encoder和decoder都有固定長度的輸入。
答:選擇A
訓練
預測
每個batch訓練時encoder和decoder都有固定長度的輸入,每個batch輸入需要形狀一致。
注意力機制與Seq2seq模型
1、以下對於注意力機制敘述錯誤的是:
A、注意力機制借鑒了人類的注意力思維方式,以獲得需要重點關注的目標區域。
B、在計算注意力權重時,key 和 query 對應的向量維度需相等。
C、點積注意力層不引入新的模型參數。
D、注意力掩碼可以用來解決一組變長序列的編碼問題。
答:選擇B
在Dot-product Attention中,key與query維度需要一致,在MLP Attention中則不需要。
2、以下對於加入Attention機制的seq2seq模型的陳述正確的是:
A、seq2seq模型不可以生成無窮長的序列。
B、每個時間步,解碼器輸入的語境向量(context vector)相同
C、解碼器RNN仍由編碼器最后一個時間步的隱藏狀態初始化。
D、引入注意力機制可以加速模型訓練。
答:選擇C
A項:seq2seq模型的預測需人為設定終止條件,設定最長序列長度或者輸出[EOS]結束符號,若不加以限制則可能生成無窮長度序列
B項:不同,每個位置都會計算各自的attention輸出
D項:注意力機制本身有高效的並行性,但引入注意力並不能改變seq2seq內部RNN的迭代機制,因此無法加速。
3、關於點積注意力機制描述錯誤的是:
A、高維張量的矩陣乘法可用於並行計算多個位置的注意力分數。
B、計算點積后除以以減輕向量維度對注意力權重的影響。
C、可視化注意力權重的二維矩陣有助於分析序列內部的依賴關系。
D、對於兩個有效長度不同的輸入序列,若兩組鍵值對完全相同,那么對於同一個query的輸出一定相同。
答: 選擇D
有效長度不同導致 Attention Mask 不同,屏蔽掉無效位置后進行attention,會導致不同的輸出。
現在我們創建了兩個批,每個批有一個query和10個key-values對。我們通過valid_length指定,對於第一批,我們只關注前2個鍵-值對,而對於第二批,我們將檢查前6個鍵-值對。因此,盡管這兩個批處理具有相同的查詢和鍵值對,但我們獲得的輸出是不同的。
atten = DotProductAttention(dropout=0) keys = torch.ones((2,10,2),dtype=torch.float) values = torch.arange((40), dtype=torch.float).view(1,10,4).repeat(2,1,1) atten(torch.ones((2,1,2),dtype=torch.float), keys, values, torch.FloatTensor([2, 6]))
# attention_weight # tensor([[[0.5000, 0.5000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, # 0.0000, 0.0000]], # [[0.1667, 0.1667, 0.1667, 0.1667, 0.1667, 0.1667, 0.0000, 0.0000, # 0.0000, 0.0000]]])
輸出:
tensor([[[ 2.0000, 3.0000, 4.0000, 5.0000]], [[10.0000, 11.0000, 12.0000, 13.0000]]])
Transformer
1、關於Transformer描述正確的是:
A、在訓練和預測過程中,解碼器部分均只需進行一次前向傳播。
B、Transformer 內部的注意力模塊均為自注意力模塊。
C、解碼器部分在預測過程中需要使用 Attention Mask。
D、自注意力模塊理論上可以捕捉任意距離的依賴關系。
答:選擇D
A項:訓練過程1次,預測過程要進行句子長度次
B項:Decoder 部分的第二個注意力層不是自注意力,key-value來自編碼器而query來自解碼器
C項:不需要
D項:正確,因為自注意力會計算句子內任意兩個位置的注意力權重
2、在Transformer模型中,注意力頭數為h,嵌入向量和隱藏狀態維度均為d,那么一個多頭注意力層所含的參數量是:
答:參考MultiHeadAttention模塊的定義。
h個注意力頭中,每個的參數量為3d^2,最后的輸出層形狀為h×d ×d,所以參數量共為4hd^2。
3、下列對於層歸一化敘述錯誤的是:
A、層歸一化有利於加快收斂,減少訓練時間成本
B、層歸一化對一個中間層的所有神經元進行歸一化
C、層歸一化對每個神經元的輸入數據以mini-batch為單位進行匯總
D、層歸一化的效果不會受到batch大小的影響
答: 選擇C
批歸一化(Batch Normalization)才是對每個神經元的輸入數據以mini-batch為單位進行匯總。
補充:Transformer還有一個重要的相加歸一化層,它可以平滑地整合輸入和其他層的輸出,因此我們在每個多頭注意力層和FFN層后面都添加一個含殘差連接的Layer Norm層。這里 Layer Norm 與7.5小節的Batch Norm很相似,唯一的區別在於Batch Norm是對於batch size這個維度進行計算均值和方差的,而Layer Norm則是對最后一維進行計算。層歸一化可以防止層內的數值變化過大,從而有利於加快訓練速度並且提高泛化性能。