下圖是利用之前提到的 Seq2Seq 來做影像文字註解:
在之前幾篇藉由機械翻譯作為例子而介紹的 Seq2Seq 架構,使得以兩種不同的特徵空間表示法,得以透過 encoder 和 decoder 來完成 翻譯 的工作。既然,Seq2Seq 架構可以運用在機械翻譯中,那麼研究者們開始探索利用 Seq2Seq 架構來 轉譯 視覺影像的特徵到自然語言特徵空間中,這個部分的應用則為上述的影像文字註解。
課程中的投影片引用的三篇與影像註解相關文獻中,我們以 Goolge 2016 年的 “Show and Tell: A Neural Image Caption Generator” 來解釋如何使用 Seq2Seq 建立一個深度學習的影像註解生成模型,簡稱 NIC (Neural Image Caption)模型。
輸入:影像,I
目標標式:已 tokenize 的不定長度影像註解序列,S = {S1, S2, ...St},S 的長度為 t
目標函式:最大化似然機率(likelihood)P(S|I)
模型架構:模型架構仍與用於機械翻譯的 Seq2Seq 相似,除了encoder 的部分用 CNN 代替,在論文中則是用 Inception v3 來萃取特徵向量。decoder 的部分則仍然用 LSTM。
實踐細節:
而架構可以從該 paper 擷取下來的圖解,獲得更清楚的概念:
那麼影像註解用什麼量測標準來評估模型的好壞呢?可以應用我們在前一張機械翻譯所提到的 BLEU score,現在就來詳細的說明 BLEU score 的計算方式。
BLEU 是 Bilingual Evaluation Understudy 的縮寫,其量度翻譯品質的方法是和一組經過挑選的人類翻譯結果進行比對,量測機械翻譯結果命中人類翻譯結果集合的精準度。此精準度可以依據使用者的需求以及對文本的依賴性而採用比單一詞彙(1-gram 或 uni-gram)更長長度的來量測,如選定 2-4 個字詞長度(2-4 gram),在不失去詞語間的順序,來量測機械翻譯命中人類翻譯的精準度。
我們先以單一詞彙或 unigram 來解說如何計算精準度。在分類問題中,精準度(Precision),指的是在分類器分類的結果中,有多少例子是屬於正確的。基於此定義我們可以知道精準度的分母是分類器分類為正的總個數,而分子則為和正確的標示聯集的部分。但,這樣的定義應用在機械翻譯就會產生以下問題。
我們可以看到下面的投影片截圖,我們擁有兩個人類產生的翻譯結果當作標準。若機械翻譯的結果是 7 個 "the",則根據上述的精準度定義,會得到精準度為 1 的完美分數。這是因為機械翻譯產生七個字詞,所以計算精準度的分母為 7,而 這七個 "the" 都有在人類翻譯中出現,所以聯集的部分也為 7,所以就導致了精準度為 1 的結果。
為了解決如此不精準的問題,BLEU 使用另一種修改過的精準度定義。在此修改的版本中,分子不再採取翻譯中的單詞只要有出現在任一當作參考的人類翻譯結果就計數為一,而是改為該單詞在人類翻譯結果中出現的最大次數。因為不再累加,而是使用 clip 的方式,所以就避免了以上的問題,修改過的精準度在上述例子中降為 2/7,因為 "the" 這個單詞在任一人類翻譯結果中出現的最大次數為二。
這種以單詞的頻率為主所得到的精準度,雖然可以有效的減少“多者全拿”的錯誤(只要預測較常出現的單詞,就能獲得較高的精準度)而不考慮單詞出現的位置,卻也出現使用 uni-gram字頻為主的語言模型,也就是無法保持字詞間的相依性。此時,我們可以延伸 uni-gram 為 bi-gram 或是更長的字詞。下面投影片則介紹了使用 bi-gram 計算修改精準度例子。
最後,通常最後的 BLEU 分數,我們會使用多個 n-gram 計算出的修改精準度,將其加總得出。然而,同樣的如在機械翻譯中計算機率,此 BLEU 分數會有偏好較短翻譯的問題(分母較小),所以同樣的,也使用了一個名為 Brevity Penalty 的參數來調整長度的效果。我們可以見下面投影片截圖來說明該如何計算 Brevity Penalty 已得到最後的 BLEU 分數。
Seq2Seq 架構的應用是愈來愈廣,從文字之間的翻譯,到影像和文字間的翻譯。然而,這樣的翻譯結果,不一定是對影像產生註解,也可以用來讀唇語,或是做視覺 Q&A 的工作,再加上 Attention 機制的加持,而使類神經網路模型不再是個外人參不透的黑盒子,而能透過學習到的 Attenion 權重,為它自己發言。