computer

課程資料

11-731 - Machine Translation and Sequence-to-sequence Models

開課:Graham Neubig

修課年度:2018 Fall

上課的內容可以在課程網站上找到:Machine Translation and Sequence-to-sequence Models

主要是介紹各種 deep learning 在機器翻譯上的技巧和應用,不過也會介紹一些比較傳統的機器翻譯方法。

主題包括一開始基本的語言模型Seq2Seq 架構、Attention、Self-Attention 和 CNN 等等。後來則有各種情境的訓練方法,像是同時進行多種語言的翻譯,如何處理資源稀少的語言,如何使用沒有標記的資料增進模型的效果,Subword 模型等等。

上課方式

筆者上的時候,講者會在每次上課的前幾天放出上課的講義。然後每次上課就會考一些簡單的關於該講義的題目,確保大家會預習。

上課的時候就直接使用該講義聊聊相關的話題,或者一起看一些相關的論文。感覺相對於事先設計簡報的課程,稍微比較沒有組織一些。但課程內容會引入許多新鮮的論文,所以能夠學到一些最新的技術。

有 Piazza 課程討論區,不過平常幾乎不太有人在上面發問。作業程式碼則是透過 GitHub 繳交。

考試作業

考試的部份就只有每次上課前的小考,通常是只要有看講義就答的出來,是屬於比較偏知識性的考試,而不會有數學計算之類。不過也有時候會碰到不太確定答案的問題。幸好會把最低分的幾次考試去除計算,所以小考要拿滿分應該是有可能的。

主要的作業有三個,都是團體作業,所以一開始就要分好組別。

第一個作業是實做基本的 sequence to sequence 模型來進行機器翻譯。助教會提供基本的程式架構,但實做基本上都要自己來,也不能引用現成的程式碼。

筆者修的時候因為之前沒用過 PyTorch,也沒實做過語言相關的 deep learning 模型,所以第一份作業花了不少時間。

第二個作業每次好像都會是不同的主題,筆者當初修的時候是沿用第一次作業的機器翻譯模型,去處理資源很少的機器翻譯。主要就是實做一些論文裡提到的方法,透過較多資源的語言來幫助較少資源的語言。

因為其實沒有指引實做哪種比較好,而且同樣不能引用已經存在的程式碼,所以能不能達到較好的效能也有一點運氣的成份。雖然我們是以基本的 LSTM 模型做為基底,但後來發現其他效能很強的組別大多都實做了 Transformer

最後一個作業其實就是 final project,可以做任何跟 seq2seq 有關的主題,同時也可以引用任何已存在的程式碼,基本上就是當作像正常在做研究寫論文一樣。我們這組是嘗試使用了 Capsule Networks 來進行機器翻譯。整體上來說其實花的時間反而比其他作業少,或許是因為期末太忙加上沒有明確評分規定,所以就自動放鬆了。

每一份作業都是要繳交程式碼和一份報告,不過期末 project 還要做個海報然後在某個時間和同學分享。因為作業會用到大量的 GPUs,所以也會分發一些 AWS credits,不過筆者的經驗感覺這些 credits 有點不夠,如果不是實驗室也有 GPUs 資源,或者是自己有 GPUs 的話,可能修起來會有點辛苦。

結語

事後回顧,雖然當初修起來有點崩潰,但其實若不是因為對 Seq2Seq 模型沒有任何實際的經驗,作業本身其實也不是太複雜。感覺若能事先寫過簡單的專案,應該能更加游刃有餘。

尤其,雖然不能引用其他人的程式碼,但是卻可以引用自己以前寫的程式碼,所以如果早就寫過 NLP 的相關應用或者就是做過了機器翻譯的專案的話,作業一和二或許是可以迅速完成的。而如果以前曾經自己實做過 Transformer,也會有相當大的優勢。

另外就是,由於是分組作業,所以難免有些溝通和協調的事情要煩心。可能也是當初覺得崩潰的原因之一。但或許也有人很喜歡分組作業也不一定。

評分上,感覺其實有點硬。雖然如果要達到 A 還算可行,但最後的 project 因為是當成真正的研究在評分,所以除非真的做了非常 novel 的東西,不然幾乎是難以得到 A+ 的。

在課程中能夠接觸到許多最新出來沒多久的論文,若是對機器翻譯有興趣,應該相當有幫助。同時透過實做,學到了機器翻譯的基礎技術。不過因為很多主題都是很快帶過,所以比較不像大學部的課一樣會很有組織的習得知識。而比較多自己摸索的部份。

整體來說,筆者在這堂課最大的收穫大慨是練習了很多 PyTorch 在 NLP 應用上的實做和實際訓練。對第二學期之後的學習有很大的幫助。