nmt
1.0.0
此儲存庫使用 Seq2Seq + Global Attention 模型實作土耳其語到英語的神經機器翻譯系統。還有一個可以在本地運行的 Flask 應用程式。您可以輸入文字、翻譯並檢查結果以及注意力視覺化。我們在後台運行波束大小為 3 的波束搜索,並返回按相對分數排序的最可能的序列。
此專案的資料集取自此處。我使用了 Tatoeba 語料庫。我刪除了資料中發現的一些重複項。我還對資料集進行了預標記。最終版本可以在資料資料夾中找到。
為了標記土耳其語句子,我使用了 nltk 的 RegexpTokenizer。
puncts_ except_apostrope = '!"#$%&()*+,-./:;<=>?@[]^_`{|}~'TOKENIZE_PATTERN = fr"[{puncts_ except_apostrope}]|w+|[ 'w ]+"regex_tokenizer = RegexpTokenizer(pattern=TOKENIZE_PATTERN)text = "泰坦尼克號15 Nisan pazartesi saat 02:20'de battı。 "tokenized_text = regex_tokenizer.tokenize(text)print("ken_in()print(".join(tokenizer.tokenize(text)print("ken_in())print(".輸出:泰坦尼克號15 Nisan pazartesi saat 02 : 20 'de battı .# “02 : 20”上的分割屬性與英語分詞器不同。是否分佈。
為了標記英語句子,我使用了 spacy 的英語模型。
en_nlp = spacy.load('en_core_web_sm')text = "泰坦尼克號於4 月15 日星期一02:20 沉沒。"tokenized_text = en_nlp.tokenizer(text)print(" ".join([tok.text for tok in tokenized_text ]))# 輸出:泰坦尼克號於 4 月 15 日星期一 02:20 沉沒。
土耳其語和英語句子預計位於兩個不同的文件中。
file: train.tr tr_sent_1 tr_sent_2 tr_sent_3 ... file: train.en en_sent_1 en_sent_2 en_sent_3 ...
請執行python train.py -h
以取得完整的參數清單。
Sample usage: python train.py --train_data train.tr train.en --valid_data valid.tr valid.en --n_epochs 30 --batch_size 32 --embedding_dim 256 --hidden_size 256 --num_layers 2 --bidirectional --dropout_p 0.3 --device cuda
計算語料庫層級的藍色分數。
usage: test.py [-h] --model_file MODEL_FILE --valid_data VALID_DATA [VALID_DATA ...] Neural Machine Translation Testing optional arguments: -h, --help show this help message and exit --model_file MODEL_FILE Model File --valid_data VALID_DATA [VALID_DATA ...] Validation_data Sample Usage: python test.py --model_file model.bin --validation_data valid.tr valid.en
要在本地運行應用程序,請運行:
python app.py
確保config.py
檔案中的模型路徑已正確定義。
模型文件
詞彙文件
使用子詞單位(土耳其語和英語)
不同的注意力機制(學習不同的注意力參數)
本計畫的骨架代碼取自史丹佛大學的 NLP 課程:CS224n