在本系列文章中,我們將向您展示如何使用深度學習來創(chuàng)建自動翻譯系統(tǒng)。本系列可以視為分步教程,可以幫助您了解和構(gòu)建神經(jīng)元機器翻譯。 本系列假定您熟悉機器學習的概念:模型訓練,監(jiān)督學習,神經(jīng)網(wǎng)絡以及人工神經(jīng)元,層和反向傳播。 在上一篇文章中,我們建立了一個基于深度學習的模型,用于自動將英語翻譯成俄語。在本文中,我們將訓練和測試該模型。 使用LSTM電池進行培訓和測試我們將開始訓練和測試模型的核心:沒有自我注意和單詞嵌入的LSTM單元。標準Keras嵌入組件將提供從一組單詞到矢量的編碼。 模型訓練包括以下幾個具體任務: 標記輸入數(shù)據(jù)(預處理) 確定培訓/自測數(shù)據(jù)比率 模型訓練我們將從準備輸入(源)數(shù)據(jù)和輸出(目標)數(shù)據(jù)以具有數(shù)值,固定大小的輸入和輸出模型開始。在此之前,我們無法將句子或單詞提供給我們的Keras神經(jīng)網(wǎng)絡(NN)模型。 我們將從創(chuàng)建Keras標記器開始,該標記器將從并行語料庫中找到的單詞構(gòu)建內(nèi)部詞匯表。讓我們將其包裝在一個函數(shù)中: ### tokenizer ### def tokenization(lines): #print(lines) tokenizer = Tokenizer() tokenizer.fit_on_texts(lines) return tokenizer1234567復制代碼類型:[html] 首先,我們必須使用該fit_on_texts功能。 此函數(shù)接受句子列表作為其參數(shù),并建立從最常見的單詞到索引的映射。它不對句子進行編碼,而是準備一個標記器來這樣做。 然后,我們必須提供一種對輸入句子進行編碼的方法。讓我們創(chuàng)建另一個函數(shù)來做到這一點: ### encode ### def encode_sequences(tokenizer, length, lines): # integer encode sequences seq = tokenizer.texts_to_sequences(lines) # pad sequences with 0 values seq = pad_sequences(seq, maxlen=length, padding='post') return seq1234567復制代碼類型:[html] 初始化令牌生成器后,我們將調(diào)用該texts_to_sequences函數(shù)進行編碼。以下代碼從數(shù)值向量中檢索單詞: temp = [] for j in range(len(i)): t = get_word(i[j], ru_tokenizer) if j > 0: if (t == get_word(i[j-1], ru_tokenizer)) or (t == None): temp.append('') else: temp.append(t) else: if(t == None): temp.append('') else: temp.append(t) return ' '.join(temp)1234567891011121314復制代碼類型:[html] 讓我們使用Jupyter筆記本來訓練和測試我們的模型。如果您在沒有GPU的計算機上運行,則可能要在Colab上運行筆記本,因為它提供了免費的啟用GPU的筆記本實例。 處理數(shù)據(jù)集的第一個條目將為我們提供訓練數(shù)據(jù)中的條目的準確結(jié)果,并為其他數(shù)據(jù)提供近似的交易。這使我們可以檢查翻譯器是否正常工作。 下表顯示了英文輸入數(shù)據(jù),然后是理想的俄文翻譯,最后是模型翻譯: 俄語翻譯非常好,這可能是因為我們已經(jīng)訓練了40萬多個輸入的模型。 當然,它仍然不如專業(yè)的自動翻譯系統(tǒng)好,這證明了挑戰(zhàn)是多么艱巨。一些缺陷立即顯現(xiàn)出來。例如,句子“您對我很好”被翻譯為“тыбылдлямнеоченьмне”(“您對我非常我”)。 我們還可以通過簡單地交換輸出和輸入數(shù)據(jù)來創(chuàng)建反向翻譯(俄語到英語)?;蛘?,要嘗試使用其他語言,我們可以從Tatoeba項目中加載其他任何訓練集。 現(xiàn)在有了自我關(guān)注接下來,讓我們嘗試在啟用自我關(guān)注的情況下運行我們的模型。我們看到了喜憂參半的結(jié)果。在某些情況下,翻譯接近完美(黃色),但在某些情況下,翻譯不會提高甚至質(zhì)量低于沒有自我關(guān)注的翻譯(灰色)。 憑直覺,這是有道理的。注意機制可以幫助模型關(guān)注句子中單詞的重要性-句子越長,確定哪個單詞重要和不重要就越容易。使用自我注意力的翻譯模型通常會提供更好的結(jié)果,但并非總是如此,特別是在輸入較短的情況下。 |
|
來自: 碼農(nóng)9527 > 《WEB》