該存儲庫介紹了我碩士論文期間所做的工作,標題是“通過轉移學習改善相關語言的低資源神經機器翻譯”,由愛丁堡大學的Alexandra Birch和Rachel Bawden建議。它於2020年8月提交。它通過利用諸如XLM-Roberta(XLM-R)等蒙版模型[1]研究了神經機譯(NMT)系統的一些轉移學習方法。該項目主要是基於基於基於變壓器的NMT系統的蒙版語言模型(MLM)的上下文化單詞表示形式的融合[2]。它還基於參考工作[3],通過對該系統中的注意力頭的分析進行了經驗來追溯句法知識的轉移。本指南提供了必要的安裝說明以及一個小型工作示例,使用IIT IIT英語印度平行數據集的一小部分[4]。這項工作中使用的所有超參數都可以從論文中訪問。
目錄
- 概述基於注意力的融合
- 安裝
- 預處理
- 基線NMT系統
- XLM-R型NMT系統
- FINETUNING XLM-R
- 腳本轉換
- 句法分析
- 其他信息
- 參考
1。基於注意的融合的概述
- 我們使用基於注意力的融合在工作之後將XLM-R與基於變壓器的NMT系統連接[2]。
- 我們稱其為XLM-R-FUSE NMT系統,該系統由標準NMT編碼器和NMT模塊以外的其他XLM-R模塊組成。
- 輸入句子將傳遞給XLM-R和NMT編碼器,該句子為句子提供了兩種不同的表示。來自XLM-R的上下文化單詞表示使用基於注意力的融合融合了NMT編碼器表示。同樣,XLM-R表示與解碼器融合。
2。安裝
2.1。要求
- Python> = 3.5
- pytorch> = 1.5.0
- TensorFlow == 1.13.1
- 擁抱面變壓器== 2.11.0
- matplotlib
- 海洋
- Scikit-Learn
- Sacrebleu> = 1.4.10
- 句子> = 0.1.91
- 指示NLP庫> = 0.6
- MosesDecoder
2.2包裝目錄中的安裝
- 在此位置下載,提取並安裝MosesDecoder。
- 在此位置下載,提取並安裝指示NLP庫。另外,提取在此位置指示NLP資源。如果我們不使用指示語言,我們可以跳過此步驟。
- 在此位置下載,提取並安裝HuggingFace Transfereers庫。
2.3安裝Fairseq
- 克隆這個存儲庫。它的父目錄將充當本工作中所有預處理,培訓和評估腳本的主目錄。
- 從主目錄運行以下命令。
cd 'work/systems/baseline-NMT/fairseq'
pip install --editable ./
- 它將基於Fairseq庫及其依賴項安裝基線-NMT系統。請注意,我們使用了位於此位置的多個版本的Fairseq系統。因此,我們始終使用培訓和評估文件的確切路徑來避免衝突。
2.4下載和提取XLM-R
- 從HuggingFace Hub下載與XLM-R關聯的所有文件。使用選項“列出模型中的所有文件”來查看和下載文件,即config.json,pytorch_model.bin,stondpiece.bpe.model和tokenizer.json 。
- 將這些文件放在此目錄中。
3。預處理
- 請訪問Fairseq和Bert-NMT圖書館,以熟悉我們的工作構建的基本預處理,培訓和評估步驟。
- 我們使用MosesdeCoder預處理英語數據集,但切換到印度語,古吉拉特語,孟加拉語和Marathi等指示語言的INDIC NLP庫。
- 我們將句子BPE用於單詞分割。當源和目標語言共享實質性字符時,我們使用此腳本使用聯合BPE處理了數據集。否則,使用了不同的腳本。
- 對於用於演示這項工作的英語印地語數據集,我們使用了後一個腳本。
- 將home_dir設置為此存儲庫的父目錄。
- 我們已經在RAW_DATA_DIR上放置了火車,測試和開發文件。您可以使用相同的命名約定將它們更改為文件。
- 我們將培訓數據與大量的單語數據集合併,以學習更好的BPE細分。將這些數據集放在raw_monolingual_data_dir上。我們在工作中使用了大量的奧斯卡語料庫,但是對於此演示,我們只是使用了相同的火車文件。
- 如腳本中所示,通過評論clean_norm_tok函數來根據語言進行切換。
- 運行此腳本,該腳本預處理所有文件並保存在Preprocessed_data_dir上。令牌BPE目錄包含標準化,令牌化等以及所有最終BPED文件後的所有中間文件。
- 然後,此腳本將基於FairSeq的系統使用的數據二進制,並保存在二進制目錄中。它使用FairSeq Binariser從XLM-R型系統中使用的,將基線的文件以及XLM-R-R-Fused系統的文件進行二重性。它使用-bert-Model-name訪問XLM-R Tokenizer來代幣化源文件,因為XLM-R組件也將它們與XLM-R-R-Fuse系統中的標準NMT編碼器一起使用。
- (可選)請注意,該系統主要基於XLM-R,但是我們還可以使用HuggingFace Transformers庫提供的其他蒙版語言模型。我們需要進行一些更改,如下所示:
- 如第2.4步所述,下載並提取新的語言模型。
- 從XLM-R-Fuse系統中的HuggingFace Transfereers庫中導入相應的令牌和模型,默認一個系統,如下所述:
from transformers import XLMRobertaModel
BertModel = XLMRobertaModel
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- 我們需要在以下文件中導入它們:
- 工作/系統/XLM-R-FUSE/BERT-NMT/Preprocess.py
- Work/Systems/XLM-R-FUSE/BERT-NMT/Interactive.py
- 工作/系統/XLM-R-FUSE/BERT-NMT/FAIRSEQ_CLI/PREPROCESS.PY
- 工作/系統/XLM-R-FUSE/BERT-NMT/FAIRSEQ_CLI/Interactive.py
- 工作/系統/XLM-R-FUSE/BERT-NMT/FAIRSEQ/tasks/translation.py
- 工作/系統/XLM-R-FUSE/BERT-NMT/FAIRSEQ/MODFEL/Transformer.py
- 工作/系統/XLM-R-Fuse/bert-nmt/fairseq/binarizer.py
- 此外,我們需要根據新語言模型更改這些文件中的啟動
(<s>)和結束(</s>)令牌。
4。基線NMT系統
4.1培訓基線NMT系統
- 使用此腳本訓練基於變壓器的基線系統。
- 它將積累梯度以形成更大的有效批量尺寸。批量尺寸=(gpus的數量) *( -max-tokens ) *( - update-freq )。
- 它使用早期停止驗證策略,並確定BLEU分數下降的最大檢查點數量。
- 我們的工作使用變壓器體系結構: transformer_iwslt_de_en默認。 XLM-R型系統從基線系統還原參數,因此它們的體系結構應匹配。我們還可以為基線系統使用其他較大的體系結構,但是我們還需要為XLM-R-FUSE系統提供相同的基礎體系結構。檢查此文件是否實現基於注意力的融合的其他架構。
- 它將檢查點保存在baseline_nmt_checkpoints_dir上。
4.2評估基線NMT系統
- 使用此腳本評估基線系統。
- 我們需要使用最佳檢查點評估BPED測試文件。使用- 示例bpe =句子以從輸出文件中刪除BPE分割。
- 使用指示NLP或摩西來折疊輸出文件,如腳本所示。
- 該腳本使用Sacrebleu使用目標語言的未觸及的測試文件來計算最終的BLEU分數。
5。 XLM-R融合的NMT系統
5.1培訓XLM-R融合的NMT系統
- 使用此腳本訓練XLM-R型系統,該腳本將在此位置使用該系統。
- BERT_NAME存儲該系統使用的XLM-R變體的路徑。我們可以在此處使用預訓練或填充變體。
- 該腳本從基線系統複製了最佳檢查點,並恢復了使用XLM-R型系統進一步培訓的參數。
- 該系統是建立在Fairseq的早期版本上的,該版本沒有提供早期停止,因此此腳本將所有檢查站保存用於- 最大加速培訓步驟,然後在後面進行評估。
- 為了在編碼器和解碼器方面的注意力融合,請使用-ararch作為transformer_s2_iwslt_de_en ,而對於僅解碼器的融合,請使用transformer_iwslt_de_en 。
- 確保使用較小的學習率,因為參數已經接近最佳水平。
5.2評估XLM-R型NMT系統
- 使用此腳本評估XLM-R-Fuse系統,該系統類似於用於基線系統的腳本。
- 該腳本使用特定的檢查點計算BLEU分數,而另一個腳本將其擴展以計算所有檢查點的分數。
- 就像之前提到的那樣,此系統沒有早期的停止功能。因此,我們每隔幾個時期保存了所有檢查點,並通過驗證集對其進行了評估。然後,可以使用以前的腳本中的BEST_CHECKPONT設置最佳檢查點,以進行測試集評估。
- 它將路徑使用到兩個不同的測試文件,這些文件由XLM-R型NMT系統的不同組件使用。 test_src_bped指向標準NMT編碼器使用的文件,而test_src_raw指向XLM-R組件使用的原始源文件。 XLM-R需要原始文件,因為它使用HuggingFace Transformers庫提供的令牌化合物使用了自己的內部令牌化。確保BERT_NAME指向相應的XLM-R變體目錄,以便它可以訪問其相應的令牌。
6。 finetuning XLM-R
6.1多語言和單語變體
- 我們對XLM-R模型進行了填補,以創建原始預訓練模型的多語言和單語變體。
- Indo-Aryan-XLM-R-Base是多語言變體,它是通過使用相關語言的XLM-R基礎(印地語,古吉拉特語,Marathi和孟加拉語)創建的。它利用了他們的句法,形態學,拼寫和詞彙相似性。
- Gujarati-XLM-R-base和Gujarati-Xlm-R-Large是用單個Gujarati數據集進行的單語變體。此外,Gujarati-dev-XLM-R-Base是使用Gujarati語言轉換為Devanagari腳本的。這些型號已在此處可用的HuggingFace Hub上發布。
- 我們使用此處可用的XLM-R的Pytorch變體作為預訓練的模型。
6.2準備數據
- 我們主要遵循本教程,我們鼓勵您在下次繼續前進。
- 使用此腳本準備數據。它準備了使用RAW_MONO_SOURCE設置路徑的單個單語數據集的培訓和驗證文件。然後,使用INDIN NLP庫進行預處理,如上面的培訓文件所做的。
- 在此腳本中, BERT_NAME指向原始驗證的XLM-R模型,該模型用於訪問其字典。
- 然後,使用此處可用的FairSeq庫的另一個變體將其二進制。它使用XLM-R Tokenizer,該器可確保我們的數據以與原始數據相同的方式進行標記化,以預處理XLM-R。
- (可選)如果您想對任何其他蒙版語言模型進行填補,則需要在此文件中導入該語言模型。進行以下更改:
- 導入相應的令牌,而不是我們的默認Xlmrobertatokenizer
from transformers import XLMRobertaTokenizer
BertTokenizer = XLMRobertaTokenizer
- 在此處替換型號
dict = BertTokenizer.from_pretrained("xlm-roberta-base")
- 替換類似於預處理中建議的開始和末端令牌。
- 同樣,如果要創建多語言模型,請準備其他語言的數據。
6.3培訓和評估模型
- 使用此腳本來遵守單語變體。
- 它使用相同的基線NMT系統,該系統在步驟4.1中使用,以捕捉模型。在這裡, Restore_point指向預訓練的模型檢查點。將-task用作蒙版_LM進行單語變體。
- similalrly,使用此腳本創建多語言變體。它使用-task作為多語言_masked_lm ,該數據合併了來自不同語言的數據。
- 它還對其進行重新示例,以最大程度地減少數據不平衡的影響,而較大的數據集則超越了較小的數據集。使用-Multilang-Smpling-Alpha來調整採樣比。有關詳細信息,請參見原始的XLM-R紙[1]。
- 我們定期保存檢查點,並以最小驗證損失選擇了模型。
6.4使Pytorch檢查點與擁抱面變壓器兼容
- 我們需要將保存的Pytorch檢查點轉換為與Huggingface Transfereers庫兼容的不同版本。
- 我們假設您已經在軟件包目錄中安裝了變形金剛庫。然後,使用以下命令。
python packages/transformers/src/transformers/convert_roberta_original_pytorch_checkpoint_to_pytorch.py --roberta_checkpoint_path best_ck_dir/ --pytorch_dump_folder_path ./
- 在這裡, best_ck_dir包含名為model.pt , dict.txt和句子的填充XLM-R檢查點。 bpe.model。後2個文件對於預訓練和填充模型都是相同的,可以在此處訪問。 pytorch_dump_folder_path指的是兼容pytorch版本的目錄。
- 請注意,變形金剛庫在文件convert_roberta_original_pytorch_checkpoint_to_pytorch.py上存在一些問題,我們將其修復並添加到Utils目錄中。替換此文件並重建庫。
- (可選)我們可以直接使用HuggingFace指南來捕捉模型,而無需首先使用Fairseq庫。由於擁抱面提供的多GPU支持差,我們發現這種方法非常慢。他們通過多處理實施了多線程,這會導致GPU使用不平衡。 Fairseq實施了自己的模塊來處理此功能,這將在此處討論。
- 填充後,只需使用最終的Pytorch版本來替換原始的預訓練模型,以訓練和評估XLM-R-R-FUSE系統。
7。腳本轉換
- 我們使用了一些腳本轉換策略,我們試圖通過使用常見腳本來利用相關語言之間的詞彙相似性。我們使用指示NLP庫將其轉換相同。
- 由於XLM-R型系統在XLM-R中處理相同的輸入句子以及NMT編碼器時,我們嘗試了這些模塊的腳本的不同組合。例如,對於Gujarati-Hindi對,我們將Gujarati腳本句子傳遞給了XLM-R模塊,但是Devanagari腳本中的Gujarati轉到了NMT編碼器中,以最大程度地將其與目標語言的詞彙重疊。
- 不同腳本中的句子具有相同的語義含義,因此他們的基於注意力的融合是可能的。檢查論文以獲取更多詳細信息。
- 可以通過更改為XLM-R進行二進制的源文件來將此功能用於XLM-R-FUSE系統。可以通過使用此腳本來完成,該腳本將這些文件轉換為目標腳本。
- 同樣,該腳本可用於將源文件的腳本轉換為XLM-R以及標準的NMT編碼器。
- 然後,使用初始培訓腳本,訓練基線和XLM-R融合的NMT系統。
- 使用初始評估腳本和以前一樣評估這些系統。如果將目標語言轉換為源語言的腳本,則需要將其轉換回其初始腳本,作為後處理步驟。這可以通過使用基線和XLM-R型系統腳本“腳本”目錄中的評估腳本來完成。
8。句法分析
請熟悉[3]的工作,該代碼可在此處找到。我們的工作擴展了它,以追踪XLM-R-R型系統中句法知識的傳遞。
8.1準備數據
- 處理通用依賴項(UD)數據集
- 我們使用印地語UD數據集[5] [6]進行句法分析。
- 使用此腳本處理原始的UD火車和測試文件。它將從UD文件中提取句法頭和相應的句法關係。
- 然後,使用此腳本使用此處的說明將上述文件轉換為JSON格式。
- 最後,使用此腳本從上面的文件中提取原始句子。
- 處理Fairseq推斷的源文件
- 將上述文件與原始句子一起用作源測試文件。我們使用這些文件評估了最佳的基線和XLM-R型系統檢查點。
- 如第3步(預處理)中提到的預處理這些文件,並為FairSeq準備二進製文件。由於這裡沒有任何目標側數據,因此我們使用修改後的預處理腳本僅處理源側文件。
8.2從基線和XLM-R型系統中提取注意圖
- 使用上述二元數據使用評估腳本從XLM-R-fuse系統中提取注意圖。同樣,使用此腳本從基線系統中提取地圖。
- 這些腳本使用基線NMT系統和XLM-R型NMT系統建立的兩個不同的系統,分別可以在此處和此處訪問。
- 這些系統為所有變壓器編碼層中所有註意力頭提取自我發項圖。此外,通過XLM-R-Fuse構建的系統還提取了XLM-R表示和NMT編碼器表示的基於注意力的融合而產生的BERT注意地圖。
- 使用其他參數-SAVE_ATTN_MAPS提供保存注意圖的路徑。創建文件夾 - 內部的自我, bert和batch_sentences來存儲相應的地圖。 batch_sentences存儲相應的句子按順序提取了注意圖。該文件可用於驗證處理過的句子的順序。
- 這些地圖將保存在單個文件中包含與批處理大小的句子的數量的Numpy數組中。
- 使用此腳本進一步處理注意圖。
- 它使用注意圖和JSON文件創建泡菜對象。
- 然後,它將BPE級令牌的注意力圖轉換為單詞級別。檢查論文以獲取更多詳細信息。
- 為了測試我們的代碼,您可以將我們的泡菜文件用於基線和XLM-R-FUSE系統,可在此處使用。在此位置下載並提取壓縮文件。這些泡菜文件將與已提到的位置已經存在的印地語UD預處理數據一起使用。
8.3可視化注意圖和基於注意的探測分類器
- 在此處提供運行句法分析筆記本。 Point Train_path和Dev_Path上述火車和測試醃製文件。在這裡,我們的開發文件和測試文件是相同的,因為我們不使用任何超參數。
- 從基線和XLM-R型系統獲得的權重來確定不同層和注意力頭的正確句法頭。
- 它有一些定性的例子,可以成功預測句法頭。
- 最後,它通過訓練和評估基於注意力的探測分類器來提供最終的UAS得分。它採用了所有層和注意力頭給出的自我發場權重的加權組合,以總體衡量句法知識。
9。其他信息
- 許可證:請注意,我們的工作是根據MIT許可證獲得許可的。但是,我們使用了具有自己許可證的其他一些作品和數據集。具體而言,所有基於FairSeq庫的系統都均在其各自目錄中列出了相應的許可證。此外,請通過使用README文件中的給定鏈接來檢查英語印度IIT bombay Parallel Dataset和印地語通用依賴關係數據集的許可證。類似地,請檢查Huggingface Transfereers庫的許可證,因為我們修改了README中提到的一個文件之一。
- 如果您需要任何幫助,請提出問題。如果您覺得這項工作有用,請隨時使用它,也請引用我的論文。
10。參考
[1] Conneau,Alexis等。 “無監督的跨語性表示學習。” Arxiv預印ARXIV:1911.02116(2019)
[2] Zhu,Jinhua等。 “將Bert納入神經機器翻譯中。”國際學習表現會議。 2019
[3]克拉克(K.伯特看什麼?對伯特注意的分析。在2019年ACL研討會BlackBoxNLP論文集:分析和解釋NLP的神經網絡(第276-286頁)。
[4] Anoop Kunchukuttan,Pratik Mehta,Pushpak Bhattacharyya。 IIT孟買英語印地語平行語料庫。語言資源和評估會議。 2018。
[5] Riyaz Ahmad Bhat,Rajesh Bhatt,Annahita Farudi,Prescott Klassen,Bhuvana Narasimhan,Martha Palmer,Owen Rambow,Dipti Misra Sharma,Ashwini Vaidya,Sri Ramagurumurumurthy Vishnu和Fei Xia。印地語/烏爾都樹庫項目。在語言註釋手冊(由Nancy Ide和James Pustejovsky編輯)中,Springer Press。 2015。
[6] Martha Palmer,Rajesh Bhatt,Bhuvana Narasimhan,Owen Rambow,Dipti Misra Sharma,Fei Xia。印地語語法:註釋依賴關係,詞彙謂詞題材結構和短語結構。 2009年12月14日至17日,在印度海得拉巴的第七屆國際自然語言處理會議論文集。