Multimodal —— 看圖說話(Image Caption)任務的論文筆記(一)評價指標和NIC模型

      看圖說話(Image Caption)任務是結合CV和NLP兩個領域的一種比較綜合的任務,Image Caption模型的輸入是一幅圖像,輸出是對該幅圖像進行描述的一段文字。這項任務要求模型能夠識別圖片中的物體、理解物體間的關係,並用一句天然語言表達出來。html

      應用場景:好比說用戶在拍了一張照片後,利用Image Caption技術能夠爲其匹配合適的文字,方便之後檢索或省去用戶手動配字;此外它還能夠幫助視覺障礙者去理解圖像內容。相似的任務還有Video Caption,輸入是一段視頻,輸出是對視頻的描述。git

(一)任務描述

      目前來講,Image Caption任務主要集中在英文上,數據集包括微軟的COCO(CodaLab組織了一個排行榜;本地評測在這裏)、Flickr8k、Flickr30k和SBU等。下圖是 [1] 給出的統計信息,其中除了SBU外,每一個圖片都有5我的工參考描述,而且SBU來自用戶上傳時所配,噪聲較大。github

此外,今年ACL上出現了日文的數據集web

      根據 [1] ,將理解圖片和生成描述這兩個子任務統一到一塊兒的話,那麼Image Caption任務的訓練過程能夠描述爲這個形式:對於訓練集的一張圖片 $I$ ,其對應的描述爲序列 $S=\{S_1,S_2,...\}$(其中 $S_i$ 表明句子中的詞)。對於模型 $\theta$ ,給定輸入圖片$I$ ,模型生成序列 $S$ 的機率爲網絡

$$P(S|I;\theta)=\prod_{t=0}^NP(S_t|S_0,S_1,...,S_{t-1},I;\theta)$$架構

      拆解成連乘的形式後,問題就變成了建模條件機率 $P(S_t|S_0,S_1,...,S_{t-1},I;\theta)$ 。一般來講,RNN是當仁不讓的第一選擇,由於理論上它能夠保留所有上文信息(對於「長時依賴」問題,使用LSTM來緩解),而不像 n-gram 或者 CNN 那樣只能取一個窗口。框架

      將似然函數取對數,獲得對數似然函數:ide

$$\log P(S|I;\theta)=\sum_{t=0}^N\log P(S_t|S_0,S_1,...,S_{t-1},I;\theta)$$函數

模型的訓練目標就是最大化所有訓練樣本的對數似然之和:學習

$$\theta^*=\arg\max_{\theta}\sum_{(I,S)}\log P(S|I;\theta)$$

式中 $(I,S)$ 爲訓練樣本。這種極大似然估計的方式等價於使用對數損失函數的經驗風險最小化。

      訓練好模型後,對於生成過程,則是根據輸入的一張圖片 $I$ ,推斷出最可能的序列來輸出:

$$\arg\max_{S}P(S|I;\theta^*)$$

固然,計算所有序列的機率而後選出機率最大的序列固然是不可行的,由於每一個位置都有詞表規模的詞做爲候選,搜索規模會隨序列的長度而指數級增加,因此須要用beam search來縮小搜索空間。

      看到這,想到了什麼?是否是機器翻譯,自動摘要,encoder-decoder……

(二)評價指標

      ok,下面說一下自動評價方法的評價指標。在2015年COCO比賽的排行榜上(C40的意思是每張測試集的圖片有40我的工給出的參考caption),能夠看到經常使用的指標是BLEUMeteorROUGECIDErSPICE。前兩個是評測機器翻譯的,第三個是評測自動摘要的,最後兩個應該是爲caption定製的。下面簡單介紹一下前四個。

      對於英文來講,模型生成的caption和人工給出的參考caption都通過了預處理:詞條化(tokenization),去除標點。通常來講,評價生成的序列與參考序列的差別時,都是基於 n-gram 的,進而考察局部性質而非只考察單個詞。另外,COCO官方提到 n-gram 中的詞沒有通過詞幹還原(stemming,啓發式地去掉單詞兩端詞綴)這個步驟。

      1. BLEU(BiLingual Evaluation Understudy

      BLEU是事實上的機器翻譯評測標準,n 常取1到4,基於準確率(precision)的評測。咱們首先看一下它在機器翻譯裏是怎麼作的。如下內容參考自 [6] :

      須要明確,在機器翻譯中,翻譯的評測是以句子爲單位的

      (1) 首先來看一個最簡單的思路:對於一個源語言句子,計算模型生成的譯文中的 n-gram 的個數,而後再計算這些 n-gram 中有多少是同時出如今了參考譯文(不止一句)中,從而計算出一個百分比來做爲 precision 。

      但這樣的作法存在一些問題:好比說參考句子1是「the cat is on the mat」,參考句子2是「there is a cat on the mat」,而模型生成的句子是「the the the the the the the」,那麼按照上述定義,考察 n=1 的狀況,也就是unigram,模型生成的句子包含7個 unigram ,這7個 unigram 所有出如今了參考句子集合中,因此將獲得 7/7 這樣的滿分,可是這樣的譯文顯然沒有意義。爲了得到較高的指標,模型徹底能夠在任何位置都去生成一個「百搭」的詞,使得分子隨着分母的增加而增加。

      (2) 爲了解決「百搭」詞的問題,須要修正 precision 的計算方式。考慮模型生成的句子 $c$ 的所有 n-gram ,考察其中的任一 n-gram :首先計算其在 $c$ 中出現的次數 $Count(n\text{-gram})$ ;而後統計其在各參考句子中分別出現的次數的最大值,將該值與 $Count(n\text{-gram})$ 的較小者記做該 n-gram 的匹配次數 $Count_{\text{clip}}(n\text{-gram})$ 。以後,再把每一個 n-gram 的計算結果累加起來,獲得句子的結果。因此precision能夠用以下方式計算:

$$p_n=\frac{\displaystyle\sum_{c\in\{\text{Candidates}\}}\sum_{n\text{-gram}\in c}Count_{\text{clip}}(n\text{-gram})}{\displaystyle\sum_{c\in\{\text{Candidates}\}}\sum_{n\text{-gram}\in c}Count(n\text{-gram})}$$

式中 $\{\text{Candidates}\}$ 表明須要評測的多句譯文的集合。當n取1時,$\displaystyle\sum_{n\text{-gram}\in c}Count(n\text{-gram})$ 就是句子 $c$ 的長度。

      回過頭來看上面那個例子,譯文句子的 unigram 只有「the」,它在譯文中出現了7次,故 $Count(\text{the})=7$;在參考句子1中出現2次,參考句子2中出現1次,最大值爲2,因此「the」的匹配次數爲  $Count_{\text{clip}}(\text{the})=\min\{7, 2\}=2$ ,所以precision爲 2/7 。

      (3) 可是這樣的計算方式仍然存在問題:好比模型生成的句子是「the cat is on」,那麼從 n 不論取一、二、3仍是4,得分都是1,滿分。換言之,因爲評價的是precision,因此會傾向於短句子,若是模型只翻譯最有把握的片斷,那麼就能夠獲得高分,所以要對短句子進行懲罰

      懲罰的方式就是在原先的評價指標值上乘一個懲罰因子(brevity penalty factor):當模型給出的譯文句子 $c$ 的長度 $l_c$ 要比參考句子的長度 $l_s$ 長時,就不進行懲罰,即懲罰因子爲1,好比說有三個參考句子的長度分別爲十二、1五、17,模型給出的譯文句子長度爲12,那麼就不進行懲罰,比較的是各參考句子長度裏最接近的那個;不然就懲罰:

$$BP=\begin{cases}1, & l_C>l_S;\\\exp(1-\dfrac{l_S}{l_C}), & l_C\leq l_S\end{cases}$$

式中的 $l_C$ 表明模型給出的測試集所有句子譯文的長度總和,$l_S$ 表明與模型給出譯文句子長度最接近的參考譯文的長度(語料級別)。

      綜合起來,BLEU的評分公式採用的是對數加權平均值(這是由於當n增大時評分會指數級減少),再乘上懲罰因子:

$$BLEU@N=BP\cdot \exp(\sum_{n=1}^Nw_n\log p_n)$$

式中的 N 一般取4,權重 $w_n$ 一般取 $\dfrac1N$(幾何平均)。最終評分在0到1之間,1表示徹底與人工翻譯一致。

      BLEU的優勢是它考慮的粒度是 n-gram 而不是詞,考慮了更長的匹配信息;BLEU的缺點是無論什麼樣的 n-gram 被匹配上了,都會被同等對待。好比說動詞匹配上的重要性從直覺上講應該是大於冠詞的。

      (4) 在caption任務中,處理方式和機器翻譯是同樣的:多張圖片就至關於翻譯裏的多個源語言句子。爲了描述清楚仍是給一下公式:

      對於測試集的一張圖片 $I_i$ ,模型生成的caption記爲 $c_i\in C$( $C$ 是所有 $c_i$ 構成的集合),且將任一 n-gram 記做 $\omega_k$ ;人工給出的參考caption的集合爲 $S_i=\{s_{i1},s_{i2},...,s_{im}\}\in S$( $S$ 是所有 $S_i$ 構成的集合),$s_{ij}$ 爲句子,$m$ 爲參考caption的數量(數據集裏的一張圖片一般會有多個參考caption,好比Flickr、COCO數據集上每張圖片都有5個參考caption)。將某個 n-gram $\omega_k$ 出如今句子 $c_i$ 中的次數記做 $h_k(c_i)$ ,相似地,可定義 $h_k(s_{ij})$ 。

      在整個測試集上,precision值爲

$$p_n(C,S)=\frac{\displaystyle\sum_i\sum_k\min\{h_k(c_i),\max_{j\leq m}h_k(s_{ij})\}}{\displaystyle\sum_i\sum_kh_k(c_i)}$$

懲罰因子的值爲

$$BP(C,S)=\begin{cases}1, & l_C>l_S;\\\exp(1-\dfrac{l_S}{l_C}), & l_C\leq l_S\end{cases}$$

因此BLEU@N的值爲

$$BLEU@N(C,S)=BP(C,S)\cdot \exp(\sum_{n=1}^Nw_n\log p_n(C,S))$$

      2. ROUGE

      ROUGE是出於召回率來計算,因此是自動摘要任務的評價標準。詳情可見以前寫過的一篇關於摘要的博客

      3. Meteor

      如下內容參考自 [6] :

      Meteor也是來評測機器翻譯的,對模型給出的譯文與參考譯文進行詞對齊,計算詞彙徹底匹配、詞幹匹配和同義詞匹配等各類狀況的準確率、召回率和F值。

      首先計算 unigram 狀況下的準確率 P 和召回率 R(計算方式與BLEU、ROUGE相似),獲得調和均值(F值)

$$F=\frac{(\alpha^2+1)P}{R+\alpha P}$$

若是 $\alpha>1$ 就說明 R 的權重高。看到這可能尚未什麼特別的。

      Meteor的特別之處在於,它不但願生成很「碎」的譯文好比參考譯文是「A B C D」,模型給出的譯文是「B A D C」,雖然每一個 unigram 都對應上了,可是會受到很嚴重的懲罰。懲罰因子的計算方式爲

$$Penalty=\gamma (\frac{\#chunks}{\#unigrams\_matched})^{\theta}$$

式中的 $\#chunks$ 表示匹配上的語塊個數,若是模型生成的譯文很碎的話,語塊個數會很是多;$\#unigrams\_matched$ 表示匹配上的 unigram 個數。因此最終的評分爲

$$Meteor=(1-Penalty)\cdot F$$

用於機器翻譯評測時,一般取 $\alpha=3$ 、$\gamma=0.5$ 和 $\theta=3$ 。

      4. CIDEr(Consensus-based image description evaluation)

      這個指標將每一個句子都看做「文檔」,將其表示成 tf-idf 向量的形式,而後計算參考caption與模型生成的caption的餘弦類似度,做爲打分。換句話講,就是向量空間模型。考慮一張圖片 $I_i\in I$( $I$ 是所有測試集圖片的集合):

      對於一個 n-gram $\omega_k$ 和參考caption $s_{ij}$ ,tf-idf 計算方式爲

$$g_k(s_{ij})=\frac{h_k(s_{ij})}{\displaystyle\sum_{\omega_l\in\Omega} h_l(s_{ij})}\log\biggl(\frac{|I|}{\displaystyle\sum_{I_p\in I}\min\{1,\sum_qh_k(s_{pq})\}}\biggr)$$

式中的 $\Omega$ 是所有 n-gram 構成的詞表。能夠看出 idf 的分母部分表明的是 $\omega_k$ 出現於參考caption的圖片個數。

      那麼,CIDEr的值能夠用餘弦類似度的平均值來計算:

$$CIDEr_n(c_i,S_i)=\frac1m\sum_j\frac{\boldsymbol{g^n}(c_i)^{\top}\boldsymbol{g^n}(s_{ij})}{||\boldsymbol{g^n}(c_i)||\cdot ||\boldsymbol{g^n}(s_{ij})||}$$

相似於BLEU的作法:

$$CIDEr(c_i,S_i)=\sum_{n=1}^Nw_nCIDEr_n(c_i,S_i)$$

      這個指標的motivation之一是剛纔提到的BLEU的一個缺點,就是對全部匹配上的詞都同等對待,而實際上有些詞應該更加劇要。

(三)NIC(Neural Image Caption)模型論文筆記

      泛讀了幾篇論文,這是第一篇,也是很簡單的一篇:

      [1] NICv2模型:Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge

      這篇文章的原版是2015年CVPR的那篇show and tell,NIC模型。這篇增長了一些內容,講了相比於原先的模型都作了哪些改進,進而取得了2015年COCO比賽的第一名。

      0. 模型結構

      NIC模型的結構很是「簡單」:就是利用encoder-decoder框架,首先利用CNN(這裏是GoogLeNet)做爲encoder,將 Softmax 以前的那一層固定維數的向量做爲圖像特徵;再使用LSTM做爲decoder,其中圖像特徵輸入decoder(圖像特徵僅在開始時刻輸入,後面就沒用了)。模型的訓練就是和任務描述那裏介紹的同樣,使用最大化對數似然來訓練,而後在測試階段採用beam search來減少搜索空間。

      須要注意的是,這個結構與傳統的encoder-decoder有點區別。引用我在 seq2seq 作自動摘要的那篇博客的一張slides:

      能夠看出,NIC 模型僅在decoder的開始時刻輸入了圖像特徵,而不是在每一個解碼時刻都輸入了圖像特徵。做者給出的理由是,若是在每一個時刻都輸入圖像特徵,那麼模型會把圖像的噪聲放大,而且容易過擬合。實際上,後面的一些文章在基於attention來作caption,那麼就必然要每一個時刻都輸入。所以本文的模型是很是簡單的。

      另外多提一點,文章中提到了一個baseline:Multimodal Recurrent Neural Networks (m-RNN),這個是 Baidu Research 在14年10月的一個工做(發表在NIPS的workshop,也就是 [2] ),後來還有一個版本(15年ICLR的版本,也就是 [3] ),是比較早期的用深度學習架構來作 Image Caption 任務的工做。

      從這兩大類序列to序列的任務上不難發現encoder-decoder的優勢:很是靈活,不限制輸入和輸出的模態,也不限制兩個網絡的類型;encoder-decoder的缺點:當輸入端是文本時,將變長序列表達爲固定維數向量,存在信息損失,而且目前還不能處理太長的文本。

      1. 訓練細節

      在訓練過程當中,固定學習率且不加動量(momentum);詞條化後去掉了詞頻小於5的詞;在ImageNet上預訓練GoogLeNet,而且在訓練caption模型時這部分的參數保持不變;在大型新聞語料上預訓練詞向量,可是效果並無明顯提高;使用dropout和模型ensemble,並權衡模型的容量:隱層單元個數與網絡深度;512維詞向量;使用困惑度(perplexity)來指導調參。

      我的以爲,這種簡單粗暴的模型結構,參數的設置真的過重要了。

      2. 自動評價與人工評價

      做者在論文中屢次強調,須要更好的自動評價計算方式。由於以自動評價指標來評測的話,模型的評測結果在不少時候要比人寫的caption的評測結果還要好,但人工評價的結果顯示,實際上模型的caption相比於人寫的caption還有很大差距。

      3. 遷移學習與數據標註的質量

      一個很容易想到的問題是,是否能夠把在某個數據集下訓練的模型遷移到另外一數據集?高質量的標註數據和更多的數據能夠補償多少領域錯配問題?

      首先來看遷移學習的問題,做者首先指出,在Flickr8k和Flick30k這兩個數據集上,若是用Flickr30k來訓練,效果會提高4個BLEU,更大量的數據帶來了更好的效果,凸顯data-driven的價值。可是若是用COCO作訓練,儘管數據量五倍於Flickr30k,但因爲收集過程不統一,帶來了詞表的差異以及較大的領域錯配,效果降低了10個BLEU。PASCAL數據集沒有提供訓練集,使用COCO訓練的效果要比使用Flickr30k的效果要好。

      而後再看標註質量的問題。此前已經提到過,SBU數據集的噪聲較大,因此能夠看做是「弱標註」的(weak labeling),但儘管如此,若是使用COCO來訓練,效果依舊會降低。

      4. 生成的caption是否具有多樣性

      做者探討了模型生成的描述是否有新穎性,是否同時具有多樣性和高質量。

      首先來看多樣性(diversity)。做者挑了測試集裏的三個圖片的caption,每張圖片都有模型生成的3-best描述(加粗的是沒在訓練集中出現過的),能夠看出這些描述能夠展示圖像的不一樣方面,所以做者認爲該模型生成的caption具有多樣性。

      再來看質量。若是隻考慮模型生成的最佳候選caption,那麼它們中的80%在訓練集中出現過;若是考慮top15,則有一半是徹底新的描述,但仍然具有類似的BLEU分,所以做者認爲該模型生成的caption兼具了多樣性和高質量。

      5. NIC模型的改進:NICv2

      做者列舉了使他們成爲2015COCO比賽第一名的幾點重要改進。

      (1)Batch Normalization:在encoder的GoogLeNet中引入了Batch Normalization

      (2)encoder端的fine-tuning

      剛纔提到,encoder端的CNN在預訓練後,是不參與caption模型的訓練的,其參數值是保持不變的。而這裏他們進行了微調:首先固定encoder的參數,訓練500k步decoder,以獲得一個不錯的LSTM;而後encoder和decoder聯合訓練100k步。做者特別強調,CNN不能陪着LSTM一塊兒從頭開始就聯合訓練,而必須在LSTM已經不錯的狀況下再進行聯合訓練,不然預訓練的CNN也會被「帶跑」。另外,做者說使用K20單機訓練了超過三週,而並行訓練時會使效果變差。

      CNN的fine-tuning帶來的效果是,一些例子能夠正確描述顏色。做者認爲,在ImageNet預訓練的過程,使得「顏色」這樣的和分類無關的特徵被拋棄了。

      (3)RNN的訓練使用Scheduled Sampling:對應於2015NIPS的文章,RNN的訓練trick

      對於 Image Caption 和 Machine Translation 等一系列生成變長序列的任務,RNN的訓練和測試過程其實存在不統一的地方:訓練時,對於輸入 I 和目標序列 S 構成的樣本 (I, S) ,目標是最大化似然函數 P(S|I) ,進而 train 出來模型的參數。咱們知道,似然函數是被拆解成條件機率的連乘形式,而每一個詞的條件機率求解過程當中,RNN接受的輸入信息包括上一時刻的隱狀態、encoder的編碼向量以及上一時刻的詞。

      問題就出在,「上一時刻的詞」在訓練過程當中是被指定爲目標序列 S 中的詞的,也就是說它是「正確的」;而在測試時,「正確的」上一時刻目標詞是不知道的,取而代之的是由模型生成的詞(雖然仍然是Softmax計算出詞表中機率最大的那個詞,可是訓練過程會使模型去彌合Softmax計算的詞與正確的詞之間的loss;而測試過程就真的只是生成一個詞以後就無論了,由於沒有監督信號),這就帶來了訓練和測試的不統一(discrepancy)。若是測試過程當中的某個時刻生成了錯誤的詞,那麼這個錯誤會被快速放大,由於生成的這段序列頗有可能沒在訓練過程當中出現過。

      在我看來,測試過程當中使用softmax來取機率最大的詞(並結合 beam search )已是很「正確」的作法了。做者在RNN的訓練過程當中作一些變化:Scheduled Sampling就是指RNN在訓練時會隨機使用模型真實輸出來做爲下一個時刻的輸入,而不像原先那樣只會使用目標詞來做爲下一時刻的輸入。做者認爲,這種方式能夠強迫模型在訓練過程當中「學會」如何處理錯誤。

      我認爲這和 negative sampling 策略(如 word2vec 等模型所採用的加速訓練策略,NCE 的簡化版本)正好相反,由於在負採樣中,訓練過程當中構造的負樣本的似然是要最小化的,而在這裏卻做爲了強迫模型在訓練過程當中學習到新知識的一種方式,可是從「錯誤」的樣本里能學出來什麼呢?

      關於各類改進的RNN訓練方法的比較,能夠參考這篇文章

      (4)模型ensemble:改變一些訓練條件,訓練出多個模型。做者訓練了5個Scheduled Sampling模型和10個fine-tuning CNN模型。

      (5)減少beam search的候選結果個數(k)

      在NIC模型中,做者只取了1和20兩個值。在改進過程當中,發現k取3是最好的搜索規模。按道理說,k越大應該越好,但其實是較小的k取得了最好的結果,說明目標函數與人工的標準不匹配,或者模型過擬合;做者同時發現,減小k能夠提高新穎性(生成的caption出如今訓練集的比例從80%降到了60%),因此認爲模型是過擬合了。這樣的話,減小k能夠視做一種正則化。

      6. 展望

      做者提到,一個方向是但願模型可以給出有針對性的描述,例如根據用戶提問來給出caption,這就成了一種VQA任務;另一個就是須要更好的自動評價指標。

      最後給出例子欣賞一下~~

 

      

 

參考:

[1] Show and Tell: Lessons learned from the 2015 MSCOCO Image Captioning Challenge(前一個版本在2015CVPR)

[2] Explain Images with Multimodal Recurrent Neural Networks 

[3] Deep Captioning with Multimodal Recurrent Neural Networks (m-RNN)

[4] Deep Visual-Semantic Alignments for Generating Image Descriptions

[5] 深度學習之Neural Image Caption

[6] 統計天然語言處理

[7] 由RNN的Discrepancy現象聯想到深度學習與GAN

相關文章
相關標籤/搜索