歡迎光臨
每天分享高質量文章

Byte Cup 2018國際機器學習競賽奪冠記

9 月份,我們兩位同學一起組隊,參加 Byte Cup 2018 機器學習比賽。本次比賽由中國人工智慧學會和位元組跳動主辦,IEEE 中國代表處聯合組織。比賽的任務是文章標題自動生成。最終,我們隊伍獲得了第一名。

比賽介紹

 

本次比賽的任務是給定文章文字內容,自動生成標題。本質上和文字摘要任務比較類似。本次比賽有 100 多萬篇文章的訓練資料。 

 

資料介紹 

 

詳細參見:

 

http://biendata.com/competition/bytecup2018/data/

 

本次競賽使用的訓練集包括了約 130 萬篇文字的資訊,驗證集 1000 篇文章, 測試集 800 篇文章。 

 

資料處理 

 

  • 文章去重,訓練資料中包含一些重覆資料,清洗,去重; 

  • 清洗非英文文章。 

 

評價指標 

 

本次比賽將使用 Rouge(Recall-Oriented Understudy for Gisting Evaluation)作為模型評估度量。Rouge 是評估自動文摘以及機器翻譯的常見指標。它透過將自動生成的文字與人工生成的文字(即參考文字)進行比較,根據相似度得出分值。

 

 

模型介紹

 

本次比賽主要嘗試了 Seq2Seq的方法。參考的模型包括 Transformer 模型和 pointer-generator 模型。模型如下圖:

 

 

其實就是將 pointer-generator 的 copy 機制加到 Transformer 模型上。同時,嘗試了將 ner-tagger 和 pos-tagger 資訊加入到模型中,如下圖所示:

 

問題分析

 

最開始我們嘗試了最基本的 Transformer 模型,透過檢視資料,遇到以下幾類明顯錯誤: 

 

  • OOV (out of vocabulary); 

  • 數字,人名,地名預測錯誤; 

  • 詞形預測錯誤。

 

OOV 問題的主要原因是資料集詞表太大,模型能夠實際使用的詞表較小;數字,人名,地名預測錯誤,主要原因是低頻詞 embedding 學習不充分;詞形預測錯誤,主要原因是模型中沒有考慮詞的形態問題(當然,如果訓練資料足夠大,是能避免這個問題的)。 

 

為瞭解決這些問題,我們嘗試了以下方法。

重要元件

 

Copy機制 

 

對於很多低頻詞,透過生成式方法生成,其實是很不靠譜的。為此,我們借鑒 Pointer-generator 的方法,在生成標題的單詞的時候,透過 Attention 的機率分佈,從原文中複製詞。 

 

Subword 

 

為了避免 OOV 問題,我們採用 subword 的方法處理文字。這樣可以將詞表大小減小到 20k,同時 subword 會包含一些單詞詞形結構的資訊。 

 

NER-Tagger和POS-Tagger資訊 

 

因為 baseline 在數字,人名,地名,詞形上預測錯誤率較高,所以我們考慮能不能將 NER-Tagger 和 POS-Tagger 資訊加入到模型中。如上圖所示。實驗證明透過加入這兩個序列資訊能夠大大加快模型的收斂速度(訓練收斂後,指標上基本沒差異)。 

 

Gradient Accumulation 

 

在實驗過程中,我們發現 Transformer 模型對 batch_size 非常敏感。之前,有研究者在機器翻譯任務中,透過實驗也證明瞭這一觀點。然而,對於文章標題生成任務,因為每個 sample 的文章長度較長,所以,並不能使用超大 batch_size 來訓練模型,所以,我們用 Gradient Accumulation 的方法模擬超大 batch_size。 

 

Ensemble 

 

採用了兩層融合。第一層,對於每一個模型,將訓練最後儲存的 N 個模型引數求平均值(在 valid 集上選擇最好的 N)。第二層,透過不同隨機種子得到的兩個模型,一個作為生成候選標題模型(選擇不同的 beam_width, length_penalty), 一個作為打分模型,將候選標題送到模型打分,選擇分數最高的標題。

 

失敗的方法

 

將 copy 機制加入到 Transformer 遇到一些問題,我們直接在 decoder 倒數第二層加了一層 Attention 層作為 copy 機制需要的機率分佈,訓練模型非常不穩定,並且結果比 baseline 還要差很多;

 

我們嘗試了 BERT,我們將 bert-encoder 抽出的 feature 拼接到我們模型的encoder的最後一層,結果並沒有得到提升;

 

word-embedding 的選擇,我們使用 GloVe 和 fastText 等預訓練的詞向量,模型收斂速度加快,但是,結果並沒有 random 的方法好。

 

結束語

非常感謝主辦方舉辦本次比賽,透過本次比賽,我們探索學習到了很多演演算法方法和調參技巧。

 

參考文獻

[1] Sennrich, Rico, Barry Haddow, and Alexandra Birch. “Neural machine translation of rare words with subword units.” arXiv preprint arXiv:1508.07909 (2015). 

[2] Vaswani, Ashish, et al. “Attention is all you need.” Advances in Neural Information Processing Systems. 2017. 

[3] See, Abigail, Peter J. Liu, and Christopher D. Manning. “Get to the point: Summarization with pointer-generator networks.” arXiv preprint arXiv:1704.04368 (2017).

 

附冠軍採訪

Q:能否分別介紹一下所有隊員的情況? 

 

A:我們隊伍包括兩位同學,隊長薑興華和隊員嚴雨姍。

 

隊長薑興華,浙江大學計算機學院計算機專業的研三學生,主要方向為自然語言處理,機器學習等。 

 

 

隊員嚴雨姍,浙江大學管理學院創業管理專業博一學生,主要研究方向為創業與大資料相關課題。 

 

 

Q:能否介紹一下學術背景? 

 

A:隊長從本科大三開始接觸機器學習,從事過計算機視覺和自然語言處理相關研究工作。研究生導師是蔡登/何曉飛教授。目前研究方向為自然語言處理-文字生成相關。 

 

Q:能否介紹一下參加比賽的經歷? 

 

A:這次比賽是我們第一次參加資料競賽。之前也沒什麼比賽經驗。參加 Byte Cup 2018,主要是覺得該比賽解決的問題非常有趣並且在學術界和工業界都是非常有意義的。 

 

Q:在比賽中做了哪些嘗試?遇到了哪些困難? 

 

A:比賽初期我們調研了很多文字生成,機器翻譯等相關方向的論文和開原始碼,做出了很多嘗試。比賽過程中,也遇到了很多問題,包括計算資源不足和程式碼實現錯誤等問題。我們的模型是基於 Transformer 模型的改進。比賽中經常遇到的問題就是,Baseline+A,Baseline+B 會有很好的效果,但是 Baseline+A+B 就不能達到同等量級的提升。

 

同時,調參也遇到了很多的問題,比如:對於不同的模型結構需要使用不同的學習率策略才能達到很好的效果。改進模型是一個不斷迭代的過程,新模型,看資料(找到資料明顯錯誤),分析問題,改進模型。

 

再比如,我們實驗過程中,會遇到 OOV (out-of-vocabulary) 問題,數字預測錯誤,單詞詞形預測錯誤,生成陳述句重覆,生成陳述句長度太短等若干問題,每次迭代,都會在對應問題上得到提升。 

 

Q:以後想在什麼具體的領域發展或想解決什麼問題?希望做科研還是找工作?如果未來會參加比賽,希望參加什麼樣的比賽(對參加比賽的標準是什麼)? 

 

A:之後,我們主要做自然語言處理相關工作,主要會關註內容生成/創作等方向。預計之後會去工業界從事相關工作,因為工業界有更多的實際場景和資料,相對來說,會比較有成就感一些。

贊(0)

分享創造快樂