本文首發於 Medium 網站,由 InfoQ 翻譯並分享。

在過去幾年裏,機器翻譯領域發生了一場革命。利用深度學習構建的新翻譯系統取代了語言學家利用統計學領域幾十年的研究成果構建的舊系統。像 Google Translate 這樣的熱門翻譯產品,已經將其內部結構換掉,用新的深度學習模型取代了舊的代碼。

這對大家來說,是極好的。深度學習的方法不僅更準確,而且你不必擁有語言學研究生學歷就能理解。從理論上講,它很簡單,只要有足夠的訓練數據和算力,誰都可以構建自己的語言翻譯系統。話雖如此,但要自己開發一個翻譯系統還是有一定的難度,因爲對於一般的玩票來說,所需的數據量和算力讓人望而卻步。

但就像機器學習中的其他東西一樣,機器翻譯也在迅速成熟。工具越來越容易使用,GPU 也越來越強大,訓練數據比以往任何時候都要豐富得多。現在,你可以使用現成的硬件和軟件來構建語言翻譯系統了,這些硬件和軟件都已經足夠好,足以用於實際項目了。最棒的是,你無需向 Google 支付任何 API 費用,就可以使用它。

那就讓我們開始吧!讓我們構建一個西班牙語到英語的翻譯系統,可以準確地將包含未列入詞彙表中的詞彙的文本進行翻譯。

基於神經網絡的文本翻譯

我們這個翻譯系統的核心將是一個神經網絡,它接受一條句子並輸出該句子的翻譯結果。我以前寫過 關於機器翻譯系統的歷史,以及我們如何使用神經網絡來翻譯文本 ,下面是簡短版本:

神經翻譯系統實際上是兩個神經網絡連接在一起,端到端的神經網絡。第一個神經網絡學習將單詞序列(即句子)編碼成代表其意義的數字數組。第二個神經網絡學會將這些數字解碼成一系列意思相同的單詞。訣竅是,編碼器接受一種語言的單詞,但解碼器輸出的是另一種語言的單詞。因此,實際上該模型通過中間的數字編碼,來學習一種人類語言到另一種語言的映射。

爲了對句子的意思進行編碼和解碼,我們將使用一種特殊類型的神經網絡,稱爲遞歸神經網絡。一個標準的神經網絡是沒有記憶的。如果你給它同樣的輸入,它每次都會得出同樣的結果。相比之下,遞歸神經網絡之所以被稱爲遞歸,是因爲上一次的輸入會影響下一次的預測。

這很有用,因爲句子中的每個單詞都不是獨立存在的。每個單詞的意思要取決於它在句子中的上下文。通過讓句子中的每個單詞影響下一個單詞的值,可以讓我們捕獲到上下文的一些內容。

因此,如果你向神經網絡顯示單詞 “My”、“name”、“is”,然後要求它對 “Adam” 這個詞的含義進行編碼,它就會用前面的詞來知道表示 “Adam” 這個詞作爲名字的意思。如果你想了解更多有關其工作原理的細節, 請查看我之前寫的文章

如果你非常精通機器學習,那麼,一提到遞歸神經網絡,你可能會打哈欠。如果是這樣,請跳到下面的 Linux shell 命令,開始訓練你的模型吧。我知道,機器學習是一個發展迅速的領域,幾年前絕對是革命性的東西,擱到現在已經成了古老的事物。

事實上,還有一種更新穎的語言翻譯方法,它使用了一種叫做 Transformer 的新型模型。Transformer 模型更進一步,通過對每一個單詞之間的交叉關係進行建模,而不是僅僅考慮單詞的順序,試圖捕獲句子中每個單詞的上下文意義。 我也寫過關於 Transformer 模型的文章 ,但爲了保持合理的訓練時間,我們將在這個項目中使用遞歸神經網絡。別擔心,效果還是會很好的!

完整的翻譯管道

很好,我們將使用兩個遞歸神經網絡來翻譯文本。我們將訓練第一個神經網絡對西班牙語的句子進行編碼,然後訓練第二個神經網絡將其解碼爲英語。如果你相信我在 reddit 上的評論,那麼每個已安裝 Python 的高中生都已經知道如何創建一個遞歸神經網絡了。所以,是時候開始了,對吧?

別這麼快!我們還需要一種策略,來處理凌亂的真實數據。人類非常擅長在沒有任何幫助的情況下從混亂的數據中提取信息。例如,你可以毫不費力地讀下面這句話:

cOMPuTERs are BAd at UNderStandING Messy DAtA…

一個用格式完美的文本進行訓練的神經網絡根本不會知道這句話是什麼意思。神經網絡並沒有能力在訓練數據之外進行推斷。如果神經網絡之前沒有見過 “cOMPuTERs” 這個詞,它不會自動地知道這個詞跟 “computers” 的意思是一樣的。

解決方案是將文本進行歸一化,我們希望消除儘可能多的格式變化。我們將確保單詞在相同的上下文總是以相同的方式大寫,我們將修復標點符號前後的任何奇怪的格式,並清理 MS Word 軟件隨機添加的任何奇怪的引號,等等。整個想法就是,無論用戶如何輸入,都會確保相同的句子總是以完全相同的方式輸入。

下面是文本歸一化的一個示例:

請注意,無論用戶的 Shift 鍵用得多糟糕,“He visited London”這句話是如何以同樣的方式進行歸一化的。注意,“London”總是大寫,而其他單詞沒有大寫,因爲它通常被用作專用名詞。確保文本格式清晰,會讓神經網絡的工作變得輕鬆很多。

下面是我們完整的翻譯流程,用我們想要翻譯的文本說明,用翻譯後的版本來結束:

首先,我們需要將文本分割成句子。我們的神經網絡每次只能翻譯一個句子,如果我們試圖一次性把整段的句子饋入,效果會很差。

將文本分割成句子看起來似乎很容易,但實際上是一個棘手的任務,因爲有人可以用各種不同的方式來嵌套標點和格式。在這個項目中,我們將使用一個用 Python 編寫的簡單的句子分割器來減少你需要安裝的第三方庫。但是 NLP 庫 (如 spaCy ) 包含了複雜的句子分割模型,如果還不能滿足你的需求,你就可以使用這些模型。

接下來,我們將對文本進行歸一化處理。這是最難的部分,如果你在這一步上偷工減料的話,最終的結果會很難看的。而一旦我們將文本成功歸一化後,就可以將它饋入到翻譯模型中了。

記住,你還需要反轉文本歸一化和句子分割步驟來生成最終的翻譯。所以,我們會有一個去歸一化的步驟,然後再把文本重新組合成句子的步驟。

軟件及硬件要求

Python 3

我們將使用 Python 3 編寫膠水代碼來對文本進行歸一化、執行翻譯,並輸出結果。

Marian NMT(機器翻譯深度學習框架)

你可能以爲我們會使用像 TensorFlow 或 PyTorch 之類的通用機器學習框架來實現我們的翻譯模型。取而代之的是,我們使用 Marian NMT,這是一個基於 C++ 的機器學習框架,專門爲機器翻譯而設計,主要由 Microsoft Translator 團隊開發。它已經內置了多個神經翻譯模型架構。

雖然 TensorFlow 和 PyTorch 非常適合用來實驗或嘗試新的神經網絡設計。但是,一旦你搞清楚了模型架構,並試圖擴展你的設計來處理真實世界的用戶,你就可以不再需要通用工具了。

Marian NMT 是一種專用工具,旨在讓你能夠輕鬆地快速構建生產級翻譯系統。你沒有必要“重新發明輪子”。這是一個例子,說明隨着機器學習從研究實驗室進入日常使用,軟件是如何變得更加成熟的。

帶有 GPU 的臺式計算機

要運行 Marian,我們需要一臺 Linux 計算機。任何一臺計算機都可以,只能性能足夠強,應該都可以運行。我使用的是一臺臺式機計算機,裝的是 Ubuntu Linux 18.04,配置了 Intel i7 處理器和 32GB 內存。爲了存儲訓練數據,我使用的是普通的 SSD 硬盤。

重要的是,計算機要有一個好的 NVIDIA GPU,還要有足夠的顯存。GPU 要承擔大部分的計算工作,所以 GPU 就是你應該投資的地方。我使用的是 NVIDIA TITAN RTX,顯存爲 24GB。至少,你需要一個最低 8GB 顯存的 GPU。至於其他不錯的消費級 GPU,如 GTX 1080 Ti 或 GTX 2080 Ti 是可以用的;像 NVIDIA TESLA 或 Quadro 系列這樣服務器級的 GPU 也是可以的。

你可以將 Marian 與單個 GPU 或多個 GPU 並行使用來加快速度,但每個 GPU 都需要有足夠的內存來單獨保存模型和訓練數據。也就是說,兩個 4GB 顯存的 GPU 並不能代替一個 8GB 顯存的 GPU 工作。

準備你的計算機

安裝 Ubuntu Linux 18.04 LTS

儘管得到了 Microsoft 的支持,但 Marian 尚無法在 Windows 上運行。而且也不能在 Mac OS 上運行。所以,你要麼在你的計算機上安裝 Linux,要麼考慮從你最喜歡的雲服務提供商哪裏租用一臺雲端中的 Linux 機器。

我建議,爲這個項目安裝 Ubuntu Linux 18.04 LTS。儘管最近發佈了 Ubuntu Linux 20.04 LTS,但是 GPU 驅動程序和深度學習庫都需要時間來更新以適應新版本的 Ubuntu。所以,千萬不要嘗試使用最新版本的 Ubuntu,除非你願意面對額外的、令人頭疼的問題,並自己解決安裝問題。

安裝 NVIDIA 的 CUDA 和 cuDNN 庫

NVIDIA 的 CUDA 和 cuDNN 庫可以讓 Marian 利用你的 GPU 來加速訓練過程。因此,在我們繼續之前,如果你還沒有安裝 CUDA 和 cuDNN 的話,請先安裝這些。

在 Ubuntu Linux 18.04 上,我建議安裝 CUDA/cuDNN 版本 10.1,這些版本適用於 Marian。

如果你安裝了不同的版本,就必須調整下面的命令來匹配。NVIDIA 因爲在 CUDA 的新版本中做了一些微小的改動而臭名昭著,這些改動會導致舊版本軟件出現不兼容性。因此,如果你偏離了標準路徑,請再次做好自己調試的準備。

安裝 Marian 和訓練腳本

在編譯 Marian 之前,你需要安裝比 Ubuntu 18.04 默認包含的更新版本的 CMake。你還需要安裝一些其他必備條件。

不過,你不用擔心,這沒什麼大不了的,你只需運行下面終端命令即可:

複製代碼

#Install newer CMake via 3rd-party repo
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null |
sudo apt-key add -
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'
sudo apt-get install cmake git build-essential libboost-all-dev

請注意,這些命令將從第三方軟件包倉庫中拉取軟件包。因此,請檢查命令正在執行的操作,以確保沒有問題。

安裝了這些必備條件後,運行以下命令並編譯 Marian(包括示例和助手工具,它們分佈在不同的 git repo 中):

複製代碼

# Download and compile Marian
cd~
git clone https://github.com/marian-nmt/marian
cdmarian
mkdir build
cdbuild
cmake -DCOMPILE_SERVER=on -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.1/..
make -j4
# Grab and compile the Marian model examples and helper tools
cd~/marian/
git clone https://github.com/marian-nmt/marian-examples.git
cdmarian-examples/
cdtools/
make

最後,我分享了我們用 Marian 訓練西班牙語到英語模型的腳本。這些腳本是基於 Marian 附帶的羅馬尼亞語翻譯示例,但針對西班牙語到英語進行了修改,並將其擴展到更大的數據集。

複製代碼

# Download the Spanish-to-English scripts for this article
cd ~/marian/marian-examples
git clonehttps://github.com/ageitgey/spanish-to-english-translation
# Install the Python modules we'll use later
cd spanish-to-english-translation
sudo python3 -m pip install -r requirements.txt

你可以自由地調整這些腳本,使其適用於你想要翻譯的任何語言對。像法語或意大利語這樣的基於拉丁語的語言幾乎不需要什麼修改;而像普通話這樣的不太相似的語言就需要更多的工作了。

怎樣找到訓練數據

要訓練一個翻譯模型,我們需要數百萬對完全相同的句子,只是它們已經被翻譯成兩種語言,這就是所謂的平行語料庫(parallel corpora)。

每行爲一句話。這兩個文件中的句子是相配的。

我們擁有的句子對越多,模型就能更好地學習如何翻譯不同類型的文本。要創建工業級強度的模型,就需要數千萬個訓練句子,甚至更多。而且最重要的是,這些句子需要覆蓋整個人類表達的所有方面,從正式文件到俚語和笑話。

糟糕的翻譯系統和像 Google Translate 這樣強大的翻譯系統之間最大的區別在於:訓練數據的數量和種類!幸運的是,在 2020 年,我們可以在很多地方找到偶然創建的並行數據,並可以通過一些巧妙的技巧將其轉換成訓練句子對。

對於正式文件和法律文本,我們有來自歐盟的禮物。它們將其法律文件翻譯成成員國的所有語言,其中就包括了英語和西班牙語。沿着同樣的思路,我們可以從其他國際機構找到交叉翻譯的法律文本,如聯合國和歐洲央行。

對於歷史寫作,我們可以從已經被翻譯成不同語言的經典書籍中找到句子對。我們可以拿沒有版權的書籍,將這些作品的不同譯本進行配對,以創造句子對,我們知道這些句子對說的是同一件事。

對於非正式的談話,我們有 DVD 的禮物。自 20 世紀 90 年代末推出 DVD 格式以來,幾乎所有的電影和電視節目都包含了多種語言的字幕,這些字幕機器可讀。我們可以對同一部電影和電視節目的不同翻譯進行配對,以創建並行數據。同樣的想法也適用於帶有字幕的新內容,比如藍光和 YouTube 視頻。

現在,我們知道在哪裏可以找到這些數據了,但要把這些數據全部清理並準備好,還是有很多工作要做的。幸運的是, 開放平行語料庫 (Open Parallel Corpus,OPUS)的那些人已經完成了收集多種語言的句子對工作,這些人非常了不起。你可以 在他們的網站上瀏覽並下載他們所有的平行句子數據 。這將大大加快我們的項目,所以請務必在本文文末查看他們工作的引文。

我們稍後將運行的訓練腳本 將自動從 OPUS 下載這些數據源 ,這爲我們提供了近 8500 萬個翻譯過的句子對,而且不需要任何工作。這太棒了!

OPUS 按語言對提供文件。因此,如果你想創建一個比如說芬蘭語到意大利語的翻譯模型,而不是西班牙語到英語,你可以通過下載該語言對的文件來實現。請記住,對於使用不太廣泛的語言,是很難找到句子對的。另外,還請記住,有些語言需要獨特的文本歸一化方法,而本文的這個例子中並沒有涉及到這些方法。

圖爲來自 OPUS 的歐洲議會數據的可用語言對錶。請注意,與英語等使用較廣泛的語言相比,使用範圍較小的語言的文件更小,數據也更少

同時請注意,這些數據來自不同的地方,質量良莠不齊。這些下載中肯定會存在一些錯誤或重複的數據。當你使用龐大的數據集時,數據質量將永遠得不到保證,並且,你還需要經常親自動手來發現和修復任何明顯的問題。

合併和準備訓練數據

我提供的用於訓練模型的腳本會自動爲你下載並準備數據,但如果你要爲其他語言對構建翻譯模型,還是有必要討論一下所涉及的步驟。

我們從 OPUS 下載的每個數據源都會包含兩個文本文件。一個文本文件有一個英語句子列表,另一個文本文件有一個與之相配的西班牙語句子列表,順序相同。因此,我們最終會有許多文本文件,如下圖所示。

我們需要經過幾個步驟來準備訓練數據:

  1. 合併 :將所有英語文本合併成一個大型文本文件。同樣地,將所有的西班牙語文件合併起來,確保保持所有的句子順序,以便英語和西班牙語文件仍然相配。
  2. 隨機洗牌 :將每個文件中句子的順序進行隨機洗牌(Shuffle),同時保持英語和西班牙語中句子的相對順序相同。將不同來源的訓練數據混合在一起,可以幫助模型學習在不同類型的文本中進行泛化,而不是先學習翻譯正式數據,然後在學習翻譯非正式數據,以此類推。
  3. 分割 :將煤種語言的主數據文件分割成訓練、開發和測試部分。我們將根據大量的訓練數據對模型進行訓練,但保留一些句子來測試模型並確保其工作正常。這就確保了我們測試模型時使用的句子是它在訓練中從未見過的,因此我們可以確定它不只是記住了正確的答案。

用子詞分割處理生僻新詞

訓練數據永遠不可能覆蓋所有可能的單詞,因爲人們無時無刻不在編造新的單詞。爲了幫助我們的翻譯系統處理從未見過的單詞,我們可以使用一種叫做 子詞分割(Subword Segmentation) 的方法。

子詞分割就是我們將單詞分成更小的片段,並教會模型在每個單詞的每個片段之間進行翻譯,我們希望的是,如果模型看到一個從未見過的單詞,它至少能夠通過翻譯構成它的子詞來猜測這個單詞的意思。

想象一下,我們的訓練數據中包含了 low、lowest、newer 和 broad 等單詞。我們可以將這些詞分成詞根和後綴(又稱詞尾,是一種後置於其他詞素後的詞綴)。

  • 詞根 :low、new、wid
  • 後綴 :est、er

現在想象一下,我們被要求翻譯 widest 這個詞。即使這個詞從來沒有出現在訓練數據中,但模型會知道如何翻譯 wid 和 est,所以通過把這兩個子詞的翻譯放在一起,它就能很好地猜測出 widest 的意思。雖然這並不總是完美的,但它在很多情況下都能很好地工作,這將使翻譯模型整體上更加準確。

我們將使用的子詞分割的具體實現稱爲 BPE,即字節對編碼(Byte Pair Encoding)。你可以在 最初的研究論文 瞭解它的工作原理。

爲了利用 BPE 的優勢,我們需要訓練一個新的 BPE 模型來適應我們的訓練數據集,然後在文本歸一化過程中加入一個額外的步驟,在這一步驟中,通過 BPE 模型運行文本。同樣的,我們還需要在去歸一化過程中增加一個步驟,以便重新連接最終翻譯中被 BPE 模型分割成單獨單詞的任何單詞。

訓練完整的翻譯管道

下載訓練數據、準備數據、創建 BPE 模型以及與 Marian 一起訓練實際翻譯模型的整個過程都在一個腳本中完成。要啓動所有操作,請運行以下命令:

複製代碼

cd~/marian/marian-examples/spanish-to-english-translation/
./run-me.sh

你可以看看 run-me.sh 腳本,看看每一步都發生了什麼。腳本寫得非常簡單明瞭:它下載訓練數據、將其合併,進行歸一化,然後啓動 Marian 訓練過程。

如果要構建一個生產級的翻譯系統,你可以隨意用自己的實現來替換這個腳本。這個腳本只是起到指導你需要執行哪些步驟的作用。

在數據準備好並且模型開始訓練之後,你將會看到如下圖所示的輸出:

複製代碼

[2020-05-0110:09:23] Ep.1: Up.1000: Sen.154,871: Cost70.37619781: Time370.45s :5024.86words/s

下面解釋了縮寫的含義:

  • Ep. = Epoch(輪數),指整個訓練數據集的通過次數。
  • Up. = Updates(更新)
  • Sen. = Sentences(句子)

這條消息是說,我們目前正在進行第一個輪數(即第一次通過訓練數據集),到目前爲止,模型已經更新了 1000 次,處理了 154871 個句子對。

成本值爲 70.3 告訴你模型訓練過程中找到最優解決方案的程度。當成本值爲 0.0 時,則意味着模型是完美的,能夠將任何西班牙語句子轉換爲訓練數據中完美相配的英語翻譯。但這永遠不會發生,因爲模型永遠不可能是完美的,而且每個句子也不會只有一個正確的翻譯。但是成本值越低,訓練過程就越接近於完成。

隨着時間的推移,成本值應該會下降,最終,訓練將會自動結束。在我的系統中,訓練過程大約需要一天的時間,但也有可能需要更長的時間,這取決於你的 GPU 性能和收集的訓練數據量。

訓練過程中,偶爾會出現暫停,以便在一個小的句子集上驗證模型,這些句子不在訓練集中。這是爲了確保模型在新數據中運行良好,而不僅僅是記憶訓練數據。

訓練完成後(1~2 天后),所有模型文件都將保存在 /models/ 子文件夾中。這些文件是你在另一個程序中使用翻譯模型來翻譯新文本所需要的。

我沒時間,可以下載你的預訓練模型嗎?

如果你不想等上一兩天訓練結束就繼續下一個步驟,可以下載我的西班牙語轉英語的預訓練模型:

複製代碼

cd ~/marian/marian-examples/spanish-to-english-translation/
wgethttps://github.com/ageitgey/spanish-to-english-translation/releases/download/0.1/model-spanish-to-english.tar.gz
tar -zxvf model-spanish-to-english.tar.gz

使用模型翻譯新文本

現在進入有趣的部分,讓我們試一下我們的新翻譯系統!

要翻譯文本,我們需要將文本通過與訓練數據相同的文本歸一化步驟,讓神經網絡對文本進行翻譯,然後再將文本歸一化步驟逆向輸出。

由於 Marian 模型本身相當大,因此在轉換過程中,最慢的步驟之一是將模型加載到內存中。爲避免這種延遲,Marian 可以在“服務器模式”下運行,在這種模式下,它保存在內存中,並允許你將其發送翻譯請求。我們將使用服務器模式。

要啓動 Marian 服務器,請在終端窗口中運行以下命令:

複製代碼

cd~/marian/marian-examples/spanish-to-english-translation/
../../build/marian-server--port8080-c model/model.npz.best-translation.npz.decoder.yml-d0-b12-n1 --mini-batch64--maxi-batch10--maxi-batch-sortsrc

上述命令是告訴服務器監聽端口 8080 上的連接,並使用文件 model.npz.best-translation.npz.decoder.yml 中描述的模型文件。

記住,Marian 服務器只處理我們管道中的翻譯步驟,它不進行任何文本歸一化步驟。無論如何,都不要犯這個錯誤:把原始的、未經歸一化處理的文本直接發送到 Marian 服務器。如果你這樣做的話,會得到很糟糕的結果!我們翻譯的新文本需要與訓練數據的格式完全相配。這意味着我們需要對翻譯的任何新文本應用相同的文本歸一化步驟進行處理。

讓我們來運行我編寫的一個 Python 腳本,它可以翻譯一些示例文本。在 Marian 服務器已經運行的情況下,打開一個新的終端窗口並鍵入如下命令:

複製代碼

python3translate_sentences_example.py

現在,我已經用 Python 代碼調用 Marian 包含的相同 Perl 腳本來對訓練數據進行歸一化處理。這雖然不是超級乾淨,但它很好用。如果你想把它作爲生產系統的一部分來部署,可以用純 Python 重寫這些 Perl 腳本,以避免這些 shell 調用,並加快過程,

Python 腳本中的示例文本是小說《哈利·波特》第一部西班牙語版的第一段。你應該得到這樣的輸出:

複製代碼

Input:
El niñoquevivió.
Elseñor ylaseñora Dursley,quevivíanenelnúmero 4dePrivet Drive, estaban orgullososdedecirqueeran muy normales, afortunadamente.
Output:
The boy who lived.
Mr. and Mrs. Dursley, who lived at number 4onPrivet Drive, were proud to say they were very normal, fortunately.
They were the last people who would expect to find themselves related to something strange or mysterious, because they weren'tforsuch nonsense.

注意,如果出現“Connection Refused error”(連接拒絕錯誤),請檢查一下是否啓動了 Marian 服務器,並且它仍在另一個終端窗口中運行。

下面是我們翻譯的《哈利·波特》與英文原著的對比:

相當不錯啊!雖然我們的譯文並不完全符合這本小說的英文版本,但它確實傳遞了同樣的意思。如果你看過西班牙語,你會發現我們的翻譯的更接近西班牙語的文本。

你可以將腳本中的示例文本替換爲你想要翻譯的任何內容!現在你已經有了一個可以從 Python 調用的翻譯模型,那麼,世界就在你的掌握之中。你可以隨意地將它包含在你創建的任何其他程序中。以下是一些(或許不怎麼樣的)想法:

  • 使用 feedparser 庫從最喜歡的西班牙報紙中獲取 RSS 提要,並自動翻譯所有的新聞報道。
  • 編寫一個程序來翻譯 https://www.meneame.net/ 上的所有文章,這樣,你就可以及時瞭解所有西班牙語最熱門的最新動態。
  • 編寫一個程序來完成你的西班牙語作業。

祝你玩得開心!

引文

我要感謝這些人,是他們,開發了那麼多工具,提供了那麼多數據資源,正是因爲有了他們的貢獻,快速開發一個自己的翻譯系統才能成爲可能!

  • Marian:快速神經機器翻譯在 C++ 中的實現。 Junczys-Dowmunt、Marcin 和 Grundkiewicz、Roman and Dwojak、Tomasz 和 Hoang、Hieu 和 Heafield、Kenneth 和 Neckermann、Tom 和 Seide、Frank 和 Germann、Ulrich 和 Fikri Aji、Alham 和 Bogoychev、Nikolay 和 Martins、Andre F. T. 和 Birch、Alexandra。2018 年 ACL 會議紀要,系統演示。

http://www.aclweb.org/anthology/P18-4020

作者介紹:

Adam Geitgey,對計算機和機器學習感興趣,喜歡撰寫有關這些方面的文章。

原文鏈接:

https://medium.com/@ageitgey/build-your-own-google-translate-quality-machine-translation-system-d7dc274bd476

相關文章