--- tags: Knock Knock! Deep Learning --- Day 15 / DL x NLP / 心有不甘的 Project Talk —— An Exploration in L2 Word Embedding Alignment === DL x NLP 的核心和尖端的研究結果介紹差不多告一段落了。接下來兩篇分別介紹自己做的 project 和 NLP 發展。 這次要介紹的是我在 Stanford CS224n 修課時做的 project "An Exploration in L2 Word Embedding Alignment"。這個 project 其實成果很差,老實說還滿猶豫要不要改成介紹另一個更早在中研院做的 SeqGAN,成果比較好看一點。 但想一想,既然是以學生角度撰寫的文章,不能總是展示好的東西。在摸索階段肯定會失敗,從失敗中也有很多東西可以觀察跟分享,挺有趣的。 當時在決定主題上因為先前有過比較好的 NLP project 的經驗了,所以決定實現一個大膽一點的點子。雖然等等大家就知道這點子撞壁了,但我還是想說一件事:**學生不要怕失敗,因為只有在還是學生的時候可以不斷失敗**! 這次的 project 放在 [pyliaorachel/bridge-with-l2](https://github.com/pyliaorachel/bridge-with-l2),包括 [report](https://github.com/pyliaorachel/bridge-with-l2/blob/master/report/FinalReport.pdf) 和 [poster](https://github.com/pyliaorachel/bridge-with-l2/blob/master/report/poster.pdf)。 > 對我在中研院用 SeqGAN 做 paraphrase generation(轉述句生成)有興趣的,code 和 report 都放在 [pyliaorachel/SeqGAN-paraphrase-generation](https://github.com/pyliaorachel/SeqGAN-paraphrase-generation)。 ## Problem NLP 中有個任務叫做 **cross-lingual word embedding alignment**,是將兩種語言的 word embedding 各自訓練好後,找到方法讓這些 word vectors 在空間中對應。如此一來,就能以 unsupervised 的方式取得兩種語言之間的字詞翻譯:  *—— Unsupervised word embedding alignment。[1]* 而我當時的 hypothesis 是:假設我們想從中文對應到英文的 word embedding,兩個都是建立在母語人士的 corpus 上。那如果能把英文 word embedding 訓練在中文母語者講英文的 corpus 上,那麼因為文法上會摻雜更多中式思維,訓練出來的英文 embedding 就能跟中文 embedding 更接近,也更能自然對應了。  *—— L2 word embedding alignment。* 母語人士說自己語言的 corpus 稱為 L1 corpus,而非母語人士說另一種語言的 corpus 稱為 L2 corpus。這個 project 就是要來研究 L2 target word embedding 和 L1 source word embedding 更接近這個 hypotheses 到底能不能成立。 > 當初想到這個 idea 已經是 proposal 死線,也就沒管太多實行上的問題,先寫起來再看看 mentor 怎麼說。而我的 mentor 就是教授 Christopher Manning 本人。他的 feedback 是,想法感覺是成立的,並指引我可以去 arXiv 撈一些 L2 data 來訓練。這條不歸路就這麼開始了⋯⋯ ## Dataset 主要針對 Chinese to English alignment 研究。這邊會需要三種 dataset: 1. Source L1 corpus (Chinese, by Chinese speakers) - Wikipedia, Wikipedia by arXiv categories, Weibo 2. Target L2 corpus (English, by Chinese speakers) - arXiv, English learning essay corpus 3. Target L1 corpus (English, by English speakers) - arXiv, Twitter, Common Crawl L2 corpus 比較難找,mentor 建議我去 [arXiv](https://arxiv.org/)(paper 資料庫)用爬蟲爬一些中文人士寫的英文 paper 作為 L2 data,我也覺得是個不錯的點子。還有在網路上找很久收集到的 English learner essay corpus,收集了中文地區人士寫英文 essay 的資料。 Source 和 target L1 corpus 都滿多選擇的,最後 source L1 用 Wikipedia、微博、以及 Wikipedia 根據 arXiv 分類篩選的 corpus。 Target L1 也選用 arXiv,不過不篩中文母語作者。另外還有 Twitter 和 Common Crawl 這兩種。 這些 L1 corpus 都有選用和 arXiv 相關的 corpus,主要是怕資料的 domain 差太多影響結果,所以盡量讓他們接近。 ## Approach 跑實驗的方法有兩步驟:訓練 word embedding、align word embedding。 這兩個都有現成的程式可以跑,所以其實這方面不需要額外寫太多 code。訓練 word embedding 用之前介紹的 Gensim 即可。Word embedding alignment 則是用原本做 unsupervised word embedding alignment 這篇 paper [1] 中開源的[程式碼和 script](https://github.com/facebookresearch/MUSE),相當方便。 簡單介紹一下他們的 model。目標是學習一個 mapping $W$ 來將一個 embedding $X$ 對應到另一個 embedding $Y$ 上,也就是減少將 $X$ 透過 $W$ 轉換之後和 $Y$ 的差距: $$ W^* = {\arg\min}_{W \in M_d(\mathbb{R})} \|WX - Y\|_F $$ 這個形式的問題稱為 [orthogonal Procrustes problem](https://en.wikipedia.org/wiki/Orthogonal_Procrustes_problem),藉由 SVD (Singular Value Decomposition) 就能解。但有個條件是 $X$ 和 $Y$ 必須是 parallel data,也就是在已經知道 $X$ 和 $Y$ 之間的 mapping 的情況下才能找到轉換 matrix $W$。這是我們想學但沒有的,怎麼辦呢? 作者用了 GAN (Generative Adversarial Network) 的架構來訓練 $W$,這個架構我們之後會介紹到。簡單來說,我們訓練一個 generator 來預測正確的 $W$ mapping,但同時訓練一個 discriminator 判斷一個字來自 source 或 target,如果能正確判斷,就代表 generator 做得不好,要繼續調整;反之不能判斷,就代表 discriminator 做得不好,要繼續調整。兩邊互相學習的情況下,最終就能訓練出一個不會被 discriminator 打槍的 generator 來預測正確的 $W$。 ## Evaluation Method 我們用 word translation 結果的準確度來進行 evaluation。這邊跟 paper [1] 用了一樣的兩種方法來取每個 embedding 在另一個語言中最靠近的 embedding: 1. Nearest Neighbors (NN) - 很經典的 [k-NN](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm) 2. Cross-Domain Similarity Local Scaling (CSLS) - k-NN 的結果並不對稱,也就是 $x$ 是 $y$ 的前 $k$ 近的鄰居不代表 $y$ 是 $x$ 的前 $k$ 近的鄰居。CSLS 使用 cosine similarity 來改善這一點。 用兩種方法對每個 source word 找出 $k$ 個最近的 target word 後,我們用 **translation [precision@k](https://en.wikipedia.org/wiki/Evaluation_measures_(information_retrieval)#Precision_at_K)** 來檢驗結果。 ## Results & Analysis 我們用做了幾組實驗,也就是不同 source-target dataset pair 用 NN 或 CSLS 取 $k$ 個 translation 後,計算 precision@k。除了 unsupervised 我們也試了 superivsed alignment 作為 topline result。 結果如下:  *—— Word translation precision@k results。`wiki_t` 是主題篩選過的 Wikipedia corpus。`arxiv_lx` 是 arXiv 的 L1 或 L2 corpus。Precision 結果 `U/S` 代表 `unsupervised / supervised` alignment。* `wiki-wiki (full)` 是 paper [1] 的結果。淡金色區域是不考慮 L2 corpus,用大型 L1 corpus 來檢驗 corpus 大小和 domain 對 alignment 結果的影響。白色灰色區域則是 align L1 和 L2 的結果,但用了不同的 embedding method (`f = fastText`,`w = Word2Vec`)。 結果非常慘,alignment 可以說是完全沒訓練起來。但有很多東西值得一一分析: ### Corpus 大小的影響 從灰白區域不同 corpus 大小(`# Sent (tgt)`)的實驗中可以看出,880K 大都表現得比 480K 好。但從 `wiki-wiki (full)` 和 `wiki-wiki` 的結果可以看到 `wiki-wiki` 遠遠比不上 `wiki-wiki (full)`,但是這兩者只差在 vocabulary 的大小。也就是說,**大一點的 corpus 確實有幫助,但主要原因是因為 vocabulary 也會因此變大**。 ### Corpus Domain 的影響 `wiki-wiki` 和 `wiki-crawl` 差在 corpus domain 是否一樣。而從結果來看,`wiki-crawl` 也是遠遠不及 `wiki-wiki`。也就是儘管 Wikipedia 和 Common Crawl 都很大,**domain 之間差越大,結果越差**。 ### L1 和 L2 結果比較 從 `wiki_t-arxiv_l1` 和 `wiki_t-arxiv_l2` 比較可以看出,不管是 unsupervised 或 supervised,差距都不大。但因為結果都太慘了,所以 hypothesis 也不太有辦法印證。 不過我覺得結果差的主要原因不是 hypothesis 錯了,而是 corpus domain 的差距太大。這點從 `wiki-crawl` 跟其他實驗的結果一樣慘就能說明。雖然我們為了平衡差距對 Wikipedia 做了主題篩選,也沒辦法提升結果。 另外兩邊 corpus 都用 Wikipedia 其實已經很犯規了,因為不同語言的 Wikipedia 有很自然的對應關係,基本上跟其他 dataset pair 比起來是穩操勝券啊! ## 結語 其實回頭看這個 project 還是覺得這個點子很有趣,但實行起來才會發現很多盲點,例如找到品質再好的 L2 corpus 其實都比不上 Wikipedia 的自然對應。 再來整個 project 有很多時間都投入在爬 data 上,這也是當時做得很崩潰的原因,因為爬到後來一直被 arXiv 鎖。我還以為我在做 NLP project 呢,原來是爬蟲 project!更崩潰的是教完報告 mentor 才跟我道歉說忘了 arXiv 有禁爬蟲的政策,應該早點跟我說的。沒事,我沒事⋯⋯ 最後 hypothesis 也因為 domain 差距這個問題沒辦法證實。不過心得就是這篇 paper 原來很作弊,使用 Wikipedia 才得到這麼好的結果,否則用其他 corpus 那個 GAN 根本訓練不起來啊。 > ## 後記 > > 雖然這個 project 成果並不好,但在隔年申請 CS224n 助教的時候,還是雀屏中選。還好這次的失敗沒有讓我喪失這個寶貴的機會(在 Stanford 當助教,學費全免還有優渥薪水拿),或許是教授有看出我有想法,或許是有之前的成果作靠山,也或許是教授對之前沒有指引我正確方向心有愧疚?! > > 總之儘管這個 project 讓我當時做到痛不欲生,甚至做到一半想直接換主題,但還算是帶給我很多實質上的收穫! ## 參考資料 1. [(Conneau et al., 2017) Word Translation Without Parallel Data](https://arxiv.org/pdf/1710.04087.pdf)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up