Google Quest冠军访谈:3个秘诀8条建议,还有人在华为做NLP研究员
Anna Vander Stel 發布在 Unsplash 上的照片
近日,由 Google 舉辦的 Quest 問答標簽大賽結果出爐,由 Dmitry Danevskiy、Yury Kashnitsky、Oleg Yaroshevskiy 和 Dmitry Abulkhanov 組成的四人團隊「Bibimorph」斬獲冠軍。
在 QUEST 問答標簽大賽中,參與者被要求為不同的問答構建預測算法。比賽提供的數據集包含數千個問答對,大部分來自 StackExchange。問答對被貼上了標簽,以反映問題好壞以及答案是否相關。大賽的結果將有助于促進問答系統的發展。
在獲獎者訪談中,Bibimorph 團隊公布了他們解決這一挑戰的獨特方法。
Q1:請分享一下你的背景,包括你是如何開始 Kaggle 之旅的?
Dmitriy Danevskiy
我擁有應用數學和物理學背景。4 年前,我開始主攻工業應用方面的機器學習。兩年來,我一直在一家小型人工智能服務公司工作,負責分割時間序列、人臉識別、語音處理及實現復雜的深度學習解決方案。現在我在一家名為 Respeecher 的初創公司工作,是從事音頻合成前沿研究的首席工程師之一。
我參加不同的 Kaggle 競賽很多年了,我認為現代的深度學習方法非常普遍,幾乎可以應用于任何非結構化和結構化的數據。這聽起來可能有爭議,但我用經驗證明它能夠在圖像、文本、音頻和表格數據比賽中獲得金牌。在 Google Quest 問答標簽競賽中獲勝對我來說尤為重要——我成功地獲得了 Grandmaster 頭銜。
Yury Kashnitsky
我是物理和應用數學博士。小時候,我熱衷于航空技術,于是進入莫斯科物理技術學院航空專業學習。那時,我開始編程,并學習用 Python 處理 VR 應用程序的數據庫。在從事數據庫和商業智能相關的工作幾年后,我回到學校,開始應用數學的全日制博士課程。后來我去了俄羅斯 IT 巨頭 Mail.Ru 集團擔任該公司第一個數據科學家,目前在荷蘭生活和工作,主要在荷蘭國家實驗室從事研發工作。在過去的 3 年里,我一直在領導 ML course.ai,這是一個開放的 ML 課程,非常關注 Kaggle 比賽。
談到 Kaggle,我經歷了長期的學習、掙扎、再學習的過程。直到兩年前我才開始認真參加 NLP 比賽。很長一段時間里,當我在 mlcourse.ai 的學生一次又一次斬獲金牌時,我只幸運地爬上了銀牌區的頂端。在 Google Quest 問答標簽比賽中獲勝,終于給我帶來了期待已久的 Master 頭銜。
這是拿著 Nvidia Quadro P6000 卡的 Elmo:
Oleg Yaroshevskiy
我有應用統計學和計算機科學的背景。作為一名學生,我對技術對社會的影響很感興趣。在 Andrej Karpathy 的著名文章「The Unreasonable Effectiveness of Recurrent Neural Networks」的鼓勵下,我決定從軟件工程轉向機器學習。
作為一名研究工程師,我從一開始就為語音處理、機器翻譯、機器理解和其他 NLP 任務設計深度模型。2017 年 7 月,我了解了 transformers,這改變了我的職業生涯。我對文學和文字藝術充滿熱情,希望有一天能看到人工智能創作的戲劇。
今天我是一名研究工程顧問和積極的 Kaggler。我相信 Kaggle 有助于在訓練深度神經網絡和模式識別背后建立深度直覺。我鼓勵其他人嘗試數據科學競賽,并加入這個快速增長的 Kaggle 愛好者社區。
Dmitriy Abulkhanov
我在莫斯科物理技術學院和 Yandex 數據分析學院學習,擁有數學和物理學背景。作為一名學生,我參加了許多數據科學黑客競賽。從這些比賽中,我得出一個結論:只要時間足夠,沒有無法解決的問題。我相信參加比賽能夠提供有用的專業知識,以解決數據科學中的各種問題。
目前,我在華為擔任 NLP 研究員。
Q2:你們團隊是如何組建、如何協作的?
在 TensorFlow 2.0 問答挑戰賽中,我們與冠軍失之交臂。為了證明自己,我們參加了 Google QUEST 問答標簽比賽。
幸運的是,這次比賽的形式和我們之前參加的兩次編碼比賽一樣!因此,在 Google QUEST 問答標簽比賽的前 2-3 周里,雖然出現了很多讓其他參與者抓狂的問題,但這些對我們來說都很容易。
我們四個人進行了合并,Dmitriy A 提出了一種使用 StackExchange 數據進行語言模型預訓練的強大技術。
Oleg 從一個基于一個公共 notebook 的簡單 PyTorch 基線(https://www.kaggle.com/phoenix9032/pytorch-bert-plain)開始,他還訓練了 BART 模型。Dmitriy A. 和 Yury 主要研究預訓練語言模型。Dmitriy D. 領導團隊訓練模型,制定驗證方案和模型混合方案。
我們認為團隊協作是一份寶貴的經歷,奪冠是大家一起努力的結果。
Q3:你們團隊最重要的發現是什么?
簡而言之:遷移學習。考慮到我們在這場競賽中擁有一個非常小的公共數據集,利用好大量未標記的數據是關鍵。
但實際上,我們有三個主要的秘訣:
-
語言模型預訓練
-
偽標簽
-
后處理預測
秘訣 1:語言模型預訓練
我們使用了大約 700 萬個 StackExchange 問題,通過一個屏蔽語言模型任務(MLM)和一個額外的句子順序預測任務來微調 BERT 語言模型。
除此之外,我們還建立了額外的輔助目標:在微調 LM 的同時,我們還預測了 5 個指標——問題得分、問題查看數、問題最喜愛計數、答案得分、答案計數,這些目標是我們基于 StackExchange 數據設計的。
我們使用定制的擴展詞匯表的原因很簡單:StackExchange 問題通常不僅包含純口語,還包含數學和代碼。用 LaTeX 符號、數學公式和部分代碼片段擴展詞匯表有助于捕捉這一事實。
一般來說,LM 預訓練在改進我們的模型方面起到了關鍵作用:
-
遷移學習。我們的模型在使用競賽數據訓練之前已經「看到」了 10 倍以上的數據。
-
領域適應。由于 LM 微調的自定義詞匯表和輔助目標,使我們的預訓練模型更好地適應手頭的數據。
秘訣 2:偽標簽
偽標簽曾經是 Kaggle 的一個熱門話題,但現在它已經成為一種眾所周知的常用技術。
圖片來源:Vinko Kod?oman 的「Pseudo-labeling a simple semi-supervised learning method」教程
這個想法總結在上圖中。有關詳細信息,請參閱上面提到的教程。簡而言之,對于某些未標記的數據集,可以使用模型預測作為「偽標簽」來擴展已標記的訓練數據集。
我們使用來自 StackExchange 問題轉儲的 20k 和 100k 樣本的偽標簽來改進四分之三的訓練模型。
秘訣 3:后處理預測
為比賽選擇的標準是 Spearman 關聯。對于 30 個目標標簽中的每一個,計算預測和真實值之間的 Spearman 相關性。然后平均 30 個 Spearman 相關系數產生最終度量。
正如在這篇關于 Kaggle 文章(https://www.kaggle.com/c/google-quest-challenge/discussion/118724)中所觀察到的,Spearman 關聯對某些預測的相等與否相當敏感:
上面的示例表明,預測向量 b 可以「閾值化」生成 b2,從而將其與 a(真值)的 Spearman 關聯從 0.89 增加到 1。
實際上,這是整個競賽的缺點之一——目標指標對閾值預測等黑客攻擊有點過于敏感。許多團隊將各種閾值啟發式方法應用于后期處理,通常對每一個目標都這樣操作。我們清楚地認識到這是過分的。但是,我們仍然對模型預測采取了一些后處理。
我們沒有對預測進行閾值化,而是根據訓練集中的分布將預測離散。其思想是使特定目標列的預測分布與訓練數據集中相應列的相應分布相匹配。有關其他詳細信息,請參閱我們共享的解決方案代碼:https://github.com/oleg-yaroshevskiy/quest_qa_labeling/blob/yorko/step11_final/blending_n_postprocessing.py#L48。
Q4:你們的最終解決方案是什么樣的?
基線模型
我們的基線模型幾乎是 vanilla BERT 與平均池隱藏狀態之上的線性層。至于輸入,我們只傳遞了用特殊標記分隔的問題標題、問題正文和答案正文。
除了上面描述的三個「秘密」之外,還有一些技巧,包括所有 BERT 層中隱藏狀態的 softmax 規范化權重和多樣本丟失。
最終融合
最后的解決方案是將四個模型(兩個 BERT 基模型、一個 RoBERTa 基模型和一個大的 BART)的折疊預測與上述三個「秘密」相結合:預訓練語言模型、偽標簽和后處理預測。
Q5:你們從這次比賽中學到了什么?
我們學到了很多!
-
不要過早參加比賽。先打好技術基礎。
-
對于小的訓練數據集,重點是以適當的方式利用額外的大數據集。
-
遷移學習不僅適用于計算機視覺任務,在自然語言處理中也同樣重要。
-
如果是小型訓練數據集,請特別注意驗證。
-
尋找能夠在技能、方法、模型等方面為最終解決方案引入多樣性的隊友。
你對那些剛開始學數據科學的人有什么建議嗎?
我們可以從視頻「How to jump into Data Science」中總結 Yury 的建議(視頻網址:https://www.youtube.com/watch?v=FGuGg9F2VUs)。
有 8 個主要步驟:
-
Python。通過 Kaggle Learn、Dataquest、codearcademy 或類似工具學習這種編程語言的基礎知識。初級數據科學家幾乎不需要高級 Python 技巧,但是在工作中使用 Python 是很好的。
-
SQL 語言。學習基本知識,Kaggle Learn 也能做到,在面試前更新你的 SQL 技能,剩下的你將在工作中學習。
-
數學。微積分、線性代數、統計學等基礎知識對于理解將要使用的工具集是必不可少的。開放的麻省理工課程可能是最好的資源。
-
算法。在多大程度上需要算法,這是一個有爭議的問題,但你可以學習 R. Sedgewick 和 T. Roughgarden 的經典課程,leetcode 也會有幫助。
-
開發技巧。有軟件工程背景者優先考慮。「ML 工程師」這個詞現在實際上比「數據科學家」要熱門得多,因為這項業務不是在 Jupyter notebook 上運行的,你必須將其部署到生產中。無論如何,你最好至少知道如何使用 git 和 Docker。
-
機器學習。mlcourse.ai 中包含基本的 ML 課程。一些 Coursera 專業也將是一個很好的切入點。至于深度學習,斯坦福大學的 cs231n 或 fast.ai 是兩個不錯的選擇。
-
項目或比賽。這是很好的證明,你做了一個最低限度的可行的產品。通過練手項目,你可以學到很多。比賽是一個很好的選擇,但不要抱著游戲的心態,要最大限度地利用你在 Kaggle 獲得的知識。
-
面試。不要只是坐在家里學習,做些面試練習,嘗試、失敗、學習、迭代,總有一天你會成功的。
資源
-
在 GitHub 上共享的解決方案:https://github.com/oleg-yaroshevskiy/quest_qa_labeling/tree/yorko
-
Kaggle Notebook 再現了解決方案的推理部分:https://www.kaggle.com/ddanevskyi/1st-place-solution
-
Kaggle 上的冠軍解決方案:https://www.kaggle.com/c/google-quest-challenge/discussion/129840
via:https://medium.com/kaggle-blog/the-3-ingredients-to-our-success-winners-dish-on-their-solution-to-googles-quest-q-a-labeling-c1a63014b88
總結
以上是生活随笔為你收集整理的Google Quest冠军访谈:3个秘诀8条建议,还有人在华为做NLP研究员的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个女生霸道的个性签名!
- 下一篇: 2020年的罗永浩,盯上了王自如和李佳琦