NLP 跨語言 Word embedding — 什麼是跨語言模型

簡介

NLP(Natural Language Preprocessing)又稱為自然語言處理,由於工作專案中需要處理跨語言語料的問題(e.g. 文本當中包含了英文、法文、德文),因此開啟了 Cross-Lingual Word Embedding(跨語言詞嵌入) 的研究領域,Word embedding 是將字詞映射到一個向量空間,是一種 Word representation 的方式。

下面是 2018 年自從 BERT 問世以來,與預訓練語言模型相關的代表性工作,本篇設定為跨語言模型所涉及的一些基本概念的整理,黃框是文章後面會介紹到的模型,希望對大家初探跨語言數據的預處理有所幫助。

Cross-Lingual 在 Pre-trained model 體系圖當中的定位 (Source: THUNLP)

跨語言詞嵌入是什麼?

讓我們先從詞嵌入的介紹開始,以及為什麼我們需要進行文本的向量轉換,單語言的詞嵌入的原理又是什麼,進而一步步理解什麼是跨語言詞嵌入吧!

簡單介紹 Word Embedding (詞嵌入)

Embedding 是將源數據透過函數映射到另一個空間的向量表示方式,數學上可表示成: f(X) → Y 。它將『字詞/句子/文件』轉換成『向量』形式,可以把對文本內容的處理簡化為向量空間中的向量運算,計算出向量空間上的相似度,來表示文本語義上的相似度。關於詞向量可以參考這篇:自然語言處理入門- Word2vec小實作

2020 年以來,COVID19 (新冠病毒)改變了我們的生活方式,你知道 『Virus』 在向量空間如何表示嗎? 透過 Google embedding projector ,我們可以看到 『Virus』 在向量空間的表示如下:

上圖是在 Wor2Vec10K 訓練集上,將每一個字詞轉成以一條 200 維的向量在向量空間中的位置。舉例:Virus 可以表示成 [-1.1, 0.2, 0.3, …., -0.4] 。每個字詞都轉成了以 200 維的向量之後,可視化工具以 PCA 方式將 200 維向量進行降維,並投影到二維空間。其次,由於每一個字詞都有其向量表示,透過 Consine Similarity 的計算,我們可以得到與 Virus 距離最接近的五個字詞依序是:itseslf 自身、genocide 種族滅絕、genome 基因、worm 寄生蟲、outbreak 流行病。

有了這個向量表示之後,我們可以進行許多與 NLP 有關的任務(不僅僅是跨語言的詞嵌入而已),因為這些代表字詞轉換成向量空間中的某一點後,在下游任務的訓練當中是有意義的。

為何我們需要將字詞轉換為 N 維的向量表示?

首先,最直覺的也最粗暴的就是,餵進給模型理解與使用。訓練詞嵌入的方式主流為 Skip-gram & CBOW ( Continuous bag-of-words ) 模型,去猜測相鄰字詞任務,當訓練完成之後,Embedding 的向量即是從此網絡當中的隱藏層(Hidden Layer)所取出的。通常會根據當前任務不同決定是否要:直接引用預訓練好的詞向量模型 or 適配任務自行訓練 or 基於現有的 Word2Vec model 進行遷移訓練。

舉例而言, Airbnb 將用戶在有效 session 內點擊房源偏好的列表,以 List Embedding 的形式,去做相似房源推薦的任務 ( Real-time Personalization using Embeddings for Search Ranking at Airbnb; 2018)

Airbnb 選擇以 Skip-gram model 的方式去取得 List Embedding

所以跨語言的詞嵌入表示是什麼?

上面我們了解將文字轉換成向量之後,這些 N 維的向量表示是如何計算出來的,接下來,讓我們擴展到跨語言語料。跨語言的詞嵌入表示有兩個知識點,第一個是奠基於單語言模型的計算方法,第二個是如何基於單語言模型的原理擴展到多語言,也就是英文的 Hello法文的 Bonjour 在同一個向量空間中的表示是相近的。

  1. 借鑑單語言模型

大多數早期的方法,是從單語言模型 ( Monolingual Embedding Model ) 的概念延伸而成雙語詞嵌入 ( Bilingual Embedding ),下面是一些常見的單語言模型使用到的方法:

  • Latent Semantic Analysis ( LSA ) :潛在語義分析是基於在文本當中出現的字詞所實現基於詞與詞之間的共現矩陣 ( co-occurrence matrix )。
  • Word2Vec:Skip-gram & CBOW

Skip-gram with negative sampling (SGNS) 是透過中間字詞預測上下文的模型,負採樣則有助於提高訓練速度。不同於更新所有訓練樣本的權重,負採樣僅更新一小部分的參數權重,降低梯度下降過程中的計算量。 以下圖為例,假設真實向量為一個 1X5 的矩陣,在模型訓練過程中,原本須更新 5 個值,經過負採樣後,向量 C 是將向量 B 當中某些 negative word 改為 0 ,output word 改為 1 ,其餘字詞對應的概率不變。因此當參數在反向傳播更新的時候,只需計算 input word 與 negative word 相關的權重。

CBOW 則是透過上下文預測中間字的模型,與 Skip-gram 剛好相反。其也可以負採樣的方式加速訓練,與上述類似。

  • Global Vectors ( GloVe ):在 2015 年由 Stanford 提出,是一個非常經典的詞向量表達方法,主要結合了 LSA 的矩陣分解以及 Word2vec 的思想。(Paper傳送門Github Repo

2. 多語言共享同一個向量空間

然而當我們考慮要做些多語言理解任務時,我們希望跨語言的同義字,經過 Word Embedding 到同一個向量空間後,他們的距離越接近越好。因此我們需要一個跨語言模型去實現:將跨語言文本嵌入到同一個向量空間。

論文參考:A Survey of Cross-lingual Word Embedding Models

下面兩張圖為兩種語言在同一個向量空間中將字詞進行轉換的向量表示:英語(綠色)與義大利語(粉色)。左圖可以明顯看到,兩種語言的詞向量分別投射到不同的區域且分得非常開,group 和 gruppo 並沒有進行 alignment ;而右圖則是在我們理想中得到的詞向量表示,group 和 gruppo 在同一向量空間當中的向量表示是在相近的位置。

左圖 Unaligned monolingual embedding Vs 右圖 Joint cross-lingual embedding

進入正題:跨語言模型

經過前面介紹,我們的終極目標是—— 在同一個向量空間產生跨語言文本的向量表示。更明確地細分,我們可以將文本顆粒度拆分為三種輸出:字詞(Word)/ 句子(Sentence) / 文本(Document)。研究大多集中在字詞級別(Word-level alignment),近期發現在句子級別上( Sentence-level alignment)可以透過 sub-word 建立一個跨語言共享的詞表,達到讓冷門語料也能受益於相近語系的高資源語料,例如後面會介紹的跨語言模型 LASER。

此外,訓練數據對於我們的輸出 Embedding 的質量也非常重要,主要可分為平行語料(Parallel data)以及可比語料(Compatible Data)。

跨語言模型所需要的訓練語料

1. 平行語料(Parallel data)用於探索同一內容如何使用兩種語言表達,互有翻譯關係的文本,有對齊關係。例如Open source Parallel corpora

2. 可比語料(Compatible data)是兩種語言或多種語言的語料庫,其文本是在說同一個主題,但他們不是彼此的翻譯,無對齊關係。例如 Wiki 可比語料 (43M+ Wiki 文章、253種語言)。

3. 結合圖片+句子敘述的語料(Grounding language in image ):可用在跨語言查詢時(e.g. EN, DE, CN, ..),獲得圖片結果的任務。Multi30K 是源自於 flickr30k 的擴展,涵蓋了 30,000+ 張圖片,每張圖片包含了 5 個英文句子、對應的德文翻譯以及透過群眾外包獲得的圖片描述。

平行語料與可比語料,兩者有何不同呢?比較好的理解是有無『對齊關係』。那什麼是對齊關係呢?來看下面這個例子:這是一張在描述兩個人在修磚瓦的照片,左右各包含了兩句敘述,第一句是英語,第二句是德語(綠色文字是從 google 翻譯)。

Source from Multi30K: Multilingual English-German Image Descriptions

可以看到,左圖的兩個句子架構,彼此互為翻譯關係;而右圖的第一句是表達:鷹架上的兩個人在幫忙建造一個紅磚牆,第二句從德語表達較為精簡只說了:兩個泥瓦匠正在一起蓋房子。

如果訓練語料沒有對齊該怎麼辦呢? 可以使用詞對齊工具 FastAlign 衡量句子的對齊程度,在數據清理的階段排除質量不佳的平行語料 or 可比語料。它可以提供一個分數,這個分數代表了來源語言與目標語言互為彼此翻譯的機率,以及給出字詞級別的最佳對齊方式。

訓練的方法

1. Mapping — Based 是一個映射為主的方法,旨在學習將單語言的詞嵌入,映射到目標語言的詞嵌入空間。例如透過線性回歸的方式,將來源語言(Source Language)的向量經由線性轉換到目標語言(Target Language)的空間,例如:將德語的詞向量映射到英語的向量空間。

Mapping-based approaches aim to learn a mapping from the monolingual embedding spaces to a joint cross-lingual space.

2. Joint Method:定義一個目標函數建立模型進行訓練,『同時』考慮來源語言與目標語言的輸入。例如使用平行語料的語言模型,給定前 N 個字詞,預測當前字詞的概率,會使得模型會去學習到來源語言與目標語言中相對應到的字詞。

They jointly optimize a source language and target language model together with a cross-lingual regularization term that encourages words that are often aligned with each other in a parallel corpus to be similar.

常見的跨語言模型有哪些?

1. M-Bert (Multilingual-Bert, 2019)

BERT 是 Google 當年發表後在 NLP 界風雲叱吒的模型,有關於 BERT 的細節,我強烈推薦此篇文章:進擊的 BERT:NLP 界的巨人之力與遷移學習

Source: 李宏毅老師的 ELMO, BERT, GPT

至今仍有許多 NLP 的任務是基於 BERT 去做改良的研究。而 M-BERT 的結構與單語 BERT 一樣,使用共享的 Wordpiece 表示,Wordpiece 是一種將字詞拆成 Subword,借鑒了機率的方法去找到字根字尾進行編碼。M-BERT 使用了 104 種語言進行訓練,陸續也釋出和改良了一些表現更好、更輕量的 pre-trained model 可以下載使用,可以參考 M-BERT 的 Github 列表

論文連結:Cross-lingual ability of multilingual bert

2. LASER (Language-Agnostic SEntence Representations, 2019)

可以將多達 90+多種語言投射到單一的向量空間,是 Facebook AI Research ( FAIR ) 開源的 Toolkit,使用方法可以參考 Github

LASER 使用的模型架構

核心思想是以單一模型獲得跨語種的句子表示向量(Sentence embedding),模型使用的是 Encoder — Decoder 架構,構建一個跨語種的 BPE ( Byte Pair Encoding ),在 Encoder 端內部有一個雙向的 LSTM,將前向和後向隱向量拼接,以 max-pooling 的方式產生 Sentence embedding 餵進給 Decoder ; 在 Decoder 端,透過 Encoder 端的 Sentence embedding 、前一個句子的 BPE 以及輸出語種 id ,最終能產生目標語言的句子向量。

CS224n 講義傳送門:講解 Byte Pair Encoding (Source: CS224n, P17–24)

LASER 做到能夠以單一模型去輸出跨語種句子向量的關鍵是它構建了一個跨語種的 BPE,讓模型對語種不敏感,且儘可能地運用不同語種之間的關係,研究發現跨語種的 Vocabulary 經由 BPE 表示之後,他們的 Symmetrized KL 距離在相同語系的語種上距離相近,跟語言學家手動定義的語言類別是高度吻合的。那麼 BPE 如何理解呢?BPE 與 Wordpiece 類似,是一個將字詞拆成 Subword,借鑒了頻率統計方法去找到字根字首進行編碼。例如字典中儲存了 low, lower, newest, widest 字詞以及它們的頻率,先以字母出發 → 根據前 N 個字母去找到可能的字根字尾 est 。

論文連結:Massively Multilingual Sentence Embeddings for Zero-Shot Cross-Lingual Transfer and Beyond

3. Efficient multi-lingual language model fine-tuning (MultiFiT, 2020)

單語言模型的 Fine-Tuned 加上跨語言模型(LASER)的訓練引導,進行知識蒸餾(Distillation),其研究結果在 MLDoc 與新聞領域有關的測試集上,都能獲得比 M-BERT 以及 LASER 更好的表現。MultiFit 的模型架構如下:

The steps of the cross-lingual bootstrapping method for zero-shot cross-lingual transfer

第一步引用了目標語言的單語預訓練模型(以 Wiki 語料作為訓練數據),第二步訓練一個 LASER 的語言分類模型,預測出的語種作為一個偽標籤,以 Bootstrapping 的方法對單語模型進行 Fine-tuned;最後結合兩者,使用 LASER 的語言分類模型的預測結果,引導單語模型做訓練,提取了領域相關的特徵參與下游分類模型的訓練。

論文連結:MultiFiT: Efficient Multi-lingual Language Model Fine-tuning

4. Cross-lingual Language Model (XLM, 2019)

XLM 同樣來自於 FAIR,使用了 BERT 的方法去學習雙語之間的關係,並結合了 LASER 當中提到的 BPE 算法進行 Tokenization,效益如前所述,低資源語種可以在訓練時從高資源獲益。

XLM 模型架構

核心模塊分為兩部分:上圖是基於單一語料的無監督學習 MLM ( Masked Language Modeling ), 其中,在特徵提取的部分使用了 Transformer 架構的 CLM (Causal Language Modeling ),給定前面 N 個詞預測當前詞的概率。下圖是基於跨語言平行語料的有監督學習 TLM ( Translation Language Modeling ),訓練方法是將平行語料進行拼接之後隨機遮蔽字詞,希望讓模型借助另一個語言的訊息來還原被遮蔽的字詞。

論文連結:Cross-lingual Language Model Pretraining

應用場景

跨語言的詞向量表示主要可以做為 NLP 跨語言任務的模型輸入,進行文本分類、句法結構、跨語言理解等任務,同時也可以做到跨語言知識遷移(Cross-Lingual Transfer),例如一個以英語為主的訓練模型,可應用在另一個語言上,因為他們的向量表示是共享同一個向量空間。

提到跨語言知識遷移,就必須介紹由 Facebook 開源的 XNLI ( Cross-Lingual Natural Language Inference ) ,這是一個很經典用來研究跨語言理解的數據集,為模型在不同語言之間進行遷移提供了橋樑。前面提到的 XLM 與 M-BERT 都曾使用它衡量其跨語言向量的表現。XNLI 數據集涵蓋了 15 種語言,去判斷兩句話之間是蘊含(Entailment)、中性(Neutral)、矛盾/相反(Contradict)關係,下面是數據集的範例:

Source: XNLI: The Cross-Lingual NLI Corpus

總結

以上就是跨語言向量表示的綜述筆記,如果想了解更多理論與研究細節,強烈推薦參考資料第一篇論文,作者群包含了 Sebastian Ruder,我剛接觸 NLP 領域時,很喜歡看他的部落格,可以了解當前 NLP 的技術發展以及未來趨勢,當然還有他的 Github!✌️

看到這邊,你是否對跨語言模型躍躍欲試了呢?下面是我所整理的一些可以直接上手的 Open Source:

1.跨語言向量表示

LASER ( PyTorch ) / XLM ( PyTorch ) / M-BERT ( Google Hugging Face )

2.常見的預訓練詞向量

從資料分析入門課開始建立數據思維,4 週養成數據洞察力與實戰問題解決力

參考資料