VD-BERT:用BERT搭建統一的視覺對話模型

2021-02-14 PaperWeekly

論文標題:

VD-BERT: A Unified Vision and Dialog Transformer with BERT

論文作者:

Yue Wang, Shafiq Joty, Michael R. Lyu, Irwin King, Caiming Xiong, Steven C.H. Hoi

論文連結:

https://arxiv.org/abs/2004.13278

視覺對話(Visual Dialog)指的是給定一張圖、它的標題和問題,我們需要給出這個問題的答案,在VD中,對話往往有多輪,而後面的問題會和前面的對話相關。

本文提出統一的視覺對話VD-BERT模型,聯合編碼視覺信息和文本信息,既適用於判別式方法,也適用於生成式方法。VD-BERT在視覺對話數據集VisDial實現了單個模型和集成模型上的最佳效果

人類感知世界是「多模態」的而非「單模態」,學習知識也是在多模態的條件下進行的。

在所有的感知模態中,視覺和文本(語言),是其中最為重要的兩類,而文本又是人類所獨有的能力。

通過將視覺感知到的內容轉換為文本信息,是我們了解世界的重要途徑。視覺對話任務就是在模擬這個過程。

給定一副圖片(或視頻等視覺內容)和一個問題,我們可以根據圖片內容去回答這個問題。

之後,我們還可以連續問若干問題,每個問題都有回答,如此根據圖片和之前的對話進行下一輪對話,就是視覺對話,而找到每個問題的答案,就是視覺對話的目標。

這可以形式化為:

其中是視覺信息,是視覺信息的說明(如標題),是第輪的問題,是第輪的回答。

有兩種方法可以找到,一是「判別式」——從給定的一些回答候選中選一個,二是「生成式」——直接生成回答。

從上式可以看到,視覺對話實際上有四個部分:視覺信息V,對話歷史H,當前問題Q和當前回答A。

過去對視覺對話的研究大都採用注意力的方法,讓回答A去關注Q,V和H。然而,這種方法不能直接讓V和H之間建立聯繫,從而可能忽略過去的對話內容。

基於此,本文提出VD-BERT,用BERT去建模多個部分的聯繫,任意兩個部分之間就可以通過自注意力完成交互,從而不丟失歷史對話信息,如下圖所示:

和BERT一樣,本文使用MLM和NSP兩個訓練任務去訓練VD-BERT,然後再通過Rank的方法微調VD-BERT,從而可以使用一個模型同時完成判別式和生成式兩種生成方法。

總的來說,本文貢獻如下:

VD-BERT的結構和流程十分簡單。下圖是VD-BERT的模型結構:

模型流程分為幾步:得到視覺表徵,得到文本表徵,模型訓練,模型微調。

視覺表徵

本文使用Faster R-CNN得到36個對象視覺表徵,用於編碼圖片的視覺信息,記為。這些特徵將作為BERT的輸入的一部分。

文本表徵

為了編碼文本信息並讓其和視覺信息充分結合,本文按照BERT,把歷史對話以[EOT]為分隔符拼接起來,作為VD-BERT的文本部分,從而得到,其中是一個候選回答。

模型訓練

在得到視覺輸入和文本輸入後,把這兩個再拼接起來作為VD-BERT整個的輸入,得到。注意到,我們使用了預訓練的BERT去初始化VD-BERT,讓它得到一些文本的先驗知識。

為了訓練VD-BERT,本文提出兩個,也是BERT所提出的訓練任務:MLM和NSP。MLM和BERT一致,隨機掩碼文本部分15%的詞,讓模型去預測它。

NSP有所不同,VD-BERT所做的是,讓模型的[CLS]去預測當前的候選回答是不是真正的回答,即輸出一個0-1之間的概率。

對於判別式方法,只需要從候選回答集中採樣一些回答,然後再用NSP去預測是否正確即可;對於生成式方法,只需要一步一步預測即可,類似自回歸模型。

模型微調

除了一個回答是否是正確答案之外(0或1),VisDial v1.0還為每個候選答案給出了相關性得分,用於評判每個答案和正確答案之間的語義相關性,得分範圍為0-1之間。於是,VD-BERT就可以使用NSP在此基礎上進一步微調,而在推理的時候,只需要選擇得分最大的那個答案即可。

本文在視覺對話數據集VisDial v0.9和VisDial v1.0上實驗,使用BERT-base作為VD-BERT骨幹,使用Recall@K、MRR、Mean Rank和NDCG作為測評指標,其他實驗細節詳見原文。

下表是在VisDial v1.0上的結果,可以看到,VD-BERT在幾乎所有指標上都超越了之前的模型。

特別注意到,微調的VD-BERT(*)只在NDCG上表現更好,而在其他指標上表現更差,這是因為NDCG衡量的回答的相關度,微調可以提高其表現,但是反而降低了在其他指標上的效果。

下表是在VisDial v0.9上的結果,可以看到,無論是判別式方法還是生成式方法,VD-BERT都能取得一致更好的效果。

下面來看看視覺信息和文本信息的交互情況。從下圖可以看到,文本和圖片中的對象是對應的。motorcycle關注了5和8(都是motorcycle),而he關注了4(人),helmet關注了4和8。

本文提出VD-BERT,使用預訓練的BERT作為統一的視覺對話模型,通過MLM和NSP的訓練,VD-BERT能夠很好建模視覺信息和文本信息及其之間的相互聯繫。

VD-BERT簡單有效,不需要任何模型結構設計,也不需要多餘的損失函數優化,更不需要額外的標註數據,就能實現SOTA表現。

多模態是近些年發展很快的一個領域,因為和人類獲取信息的過程更接近,多模態能夠更大地推動CV和NLP在現實的應用和落地。更好、更快的多模態模型是未來的一個持續性研究方向。

🔍

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

關於PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報導人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。

相關焦點

  • 從 one-hot 到 BERT,帶你一步步理解 BERT
    這也是神經網絡語言模型的一個好處。我們通過神經網絡語言模型得到一個詞向量。當然我們也可以用其他的任務來做,一樣得到詞向量,比如句法分析,但是那些任務大部分是有監督的學習,需要大量的標註信息。語言模型是非監督的,資料獲取不需要很大的成本。word2vec和神經網絡語言模型不同,直接來學習這個詞向量,使用的基本假設是分布式假設,如果兩個詞的上下文時相似的,那麼他們語義也是相似的。
  • 【BERT】如何訓練並使用Bert【持續更新】
    以上的兩個pretraining都用了同樣的objective function【語言模型】,且都用了unidirectional language models來學習general的語言表示。重點來了:提出了當前的瓶頸一是單向的語言模型作為學習。
  • BERT模型超酷炫,上手又太難?請查收這份BERT快速入門指南!
    除了這篇博文,我還準備了一份對應的 notebook 代碼,連結如下:https://github.com/jalammar/jalammar.github.io/blob/master/notebooks/bert/A_Visual_Notebook_to_Using_BERT_for_the_First_Time.ipynb。
  • bert之我見-attention
    (風格依舊,不會重複別人寫過的東西)今天給大家談的是bert中的attention,通篇可能不會有太多篇幅對著bert講,而是把attention講懂,然後再去看bert中的attention幹了什麼,這樣大家能對bert中的attention,甚至整個注意力機制有更加深刻的理解。
  • 快速搭建對話機器人,就用這一招!
    本文藉助Google開源的Bert模型結合Milvus開源向量搜尋引擎,快速搭建基於語義理解的對話機器人。整體架構本文通過語義相似度匹配來實現一個問答系統,大致的構建過程:獲取某一特定領域裡大量的帶有答案的中文問題(本文將之稱為標準問題集)。
  • 谷歌開源 BERT 模型原始碼
    驚鴻一瞥後,人們都在期待谷歌何時會放出 BERT 模型原始碼。直至今日,谷歌終於一鼓作氣發布了包括 BERT 模型 TensorFlow 代碼、BERT-Base 與 BERT-Large 模型的預訓練檢查點、微調實驗結果的自動化復現 TensorFlow 代碼、預訓練數據生成和數據訓練的代碼在內的「BERT 模型大禮包」。
  • 三分鐘帶你讀懂 BERT
    它在視覺和語言任務方面都取得了巨大成功。關於attention的回顧,請參考此處:http://mlexplained.com/2017/12/29/attention-is-all-you-need-explained/BERT卓越的性能基於兩點。
  • 如何用 Python 和 BERT 做多標籤(multi-label)文本分類?
    疑問之前我寫了《如何用 Python 和 BERT 做中文文本二元分類?》一文,為你講解過如何用 BERT 語言模型和遷移學習進行文本分類。不少讀者留言詢問:王老師,難道 BERT 只能支持二元分類嗎?當然不是。
  • 使用 keras-bert 實現文本多分類任務
    數據集劃分為:訓練集: 5000 * 10,測試集: 1000 * 10。模模型訓練模型訓練腳本model_train.py的完整代碼如下:# -*- coding: utf-8 -*-import jsonimport codecsimport pandas as pdimport numpy as npfrom keras_bert import load_trained_model_from_checkpoint
  • BERT詳解:開創性自然語言處理框架的全面指南
    這是因為在一個大型文本語料庫上訓練一個模型時,模型開始獲得對語言工作原理的更深入的理解。這些知識是瑞士軍刀,幾乎對任何自然語言處理任務都有用。第三,BERT是一個「深度雙向」的模型。雙向意味著BERT在訓練階段從所選文本的左右上下文中汲取信息。模型的雙向性對於理解語言的真正意義很重要。
  • 大神教程乾貨:使用BERT的多類別情感分析!(附代碼)
    (『yelp_review_full_csv\\test.tsv』, sep=』\t』, index=False, header=True)訓練BERT模型我們將加載經過預訓練的基於BERT的Uncased模型權重,並在Yelp審查數據集上訓練模型。
  • 乾貨| BERT fine-tune 終極實踐教程
    對下載的壓縮文件進行解壓,可以看到文件裡有五個文件,其中bert_model.ckpt開頭的文件是負責模型變量載入的,而vocab.txt是訓練時中文文本採用的字典,最後bert_config.json是BERT在訓練時,可選調整的一些參數。
  • NLP中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert
    5、bert為什麼並不總是用實際的[MASK]token替換被「masked」的詞彙?一、文本表示和各詞向量間的對比1、文本表示哪些方法?下面對文本表示進行一個歸納,也就是對於一篇文本可以如何用數學語言表示呢?2、怎麼從語言模型理解詞向量?怎麼理解分布式假設?
  • 教你用BERT進行多標籤文本分類
    這讓我們可以通過對下遊特定任務(例如情緒分類,意圖檢測,問答等)進行微調來使用預先訓練的BERT模型。本文將手把手教你,用BERT完成一個Kaggle競賽。數據展示數據用類InputExample來表示。
  • 中文最佳,哈工大訊飛聯合發布全詞覆蓋中文BERT預訓練模型
    TensorFlow 版本(1.12、1.13、1.14 測試通過)Google:https://storage.googleapis.com/hfl-rc/chinese-bert/chinese_wwm_L-12_H-768_A-12.zip訊飛云:https://pan.iflytek.com
  • 文本挖掘從小白到精通(十六)--- 像使用scikit-learn一樣玩轉BERT
    bert,好用是好用,但延展性、靈活性不足,主要是很難加入各種自定義特性(比如pipeline、和數值型特徵混合使用等)。但是,總覺得少了些啥~本教程的目的是用BERT和Sci-kit Learn建立一個最簡單的句子級分類的例子。筆者不打算詳細討論BERT是什麼,也不打算討論它的內部機理,筆者只是想以最小的工作量向你展示如何利用Sci-kit Learn來「二次開發」bert特徵抽取器,兼顧易用性和靈活性。
  • 老周帶你讀Bert文本分類代碼 (pytorch篇一)
    其中需要注意的是要--bert_model選擇使用哪一個bert的預訓練模型,關於各個模型的區別請參考論文或github。還有是--task_name這個參數,在這個demo中提供3個標準數據的預處理函數,如果要使用標準數據集就需要把--task_name命成標準數據集的名字。
  • 手把手教你用BERT進行多標籤文本分類
    該模型還在兩個無監督任務(「遮蔽語言模型」和「下一句預測」)上進行了預訓練。這讓我們可以通過對下遊特定任務(例如情緒分類,意圖檢測,問答等)進行微調來使用預先訓練的BERT模型。本文將手把手教你,用BERT完成一個Kaggle競賽。在本文中,我們將重點介紹BERT在多標籤文本分類問題中的應用。
  • BERT在情感分析ATSC子任務的應用
    去掉之後就可以用最後pip install 安裝apex了。準備fine-tuning BERT語言模型的數據這個步驟是準備fine-tuning(其實是在BERT基礎模型的基礎上繼續pretraining)語言模型的數據,作者也提供了他fine-tuning之後的模型,如果讀者不想自己fine-tuning語言模型可以跳過這一步。
  • bert之我見-positional encoding
    近期我會一連幾篇談談bert中的關鍵細節,這個position encoding是我看到的bert(實質上是transformer中提出的)中最為驚喜的但是卻被很多人忽略(可以理解為媒體鼓吹最少的)一個細節,這裡給大家談談。什麼是position encoding顧名思義,就是基於位置的一套詞嵌入方法,說得簡單點,就是對於一個句子,都有對應的一個向量。