MarianMTによるテキストデータ増強


最近リリースされる抱擁面1008 translation models 彼らのモデルハブの上でおよそ140の言語のために.
これらのモデルはもともと訓練されたJörg TiedemannLanguage Technology Research Group at the University of Helsinki . 彼らは訓練を受けたOpen Parallel Corpus(OPUS) と呼ばれる神経機械翻訳フレームワークMarianNMT .
このポストでは、データテキストデータを強化するためにMarianMTモデルを使用する方法を説明します.

逆翻訳


我々は、“バック翻訳”と呼ばれるデータ増強手法を使用します.これは英語で書かれた原文を取る.次に、マリアナ語を使用して別の言語(フランス語)に変換します.私たちはマリアナ語を使って英語にフランス語のテキストを翻訳します.本来の英語の文とは違って、英語のテキストを翻訳し続けます.

拡張プロセス


最初に、我々は、次のコマンドで顔のトランスとモーゼtokenizers抱擁をインストールする必要があります
pip install -U transformers 
pip install mosestokenizer
インストール後、今すぐMarianmtモデルとtokenizerをインポートすることができます.
from transformers import MarianMTModel, MarianTokenizer
それから、我々は英語からロマンス言語に翻訳できるモデルを初期化することができます.これはロマンス用語集のどれかに翻訳できる単一のモデルです.
target_model_name = 'Helsinki-NLP/opus-mt-en-ROMANCE'
target_tokenizer = MarianTokenizer.from_pretrained(target_model_name)
target_model = MarianMTModel.from_pretrained(target_model_name)
同様に、我々は英語にロマンスの言語を翻訳できるモデルを初期化することができます.
en_model_name = 'Helsinki-NLP/opus-mt-ROMANCE-en'
en_tokenizer = MarianTokenizer.from_pretrained(en_model_name)
en_model = MarianMTModel.from_pretrained(en_model_name)
次に、機械翻訳モデル、tokenizerと目標ロマンス言語を与えられたテキストのバッチを翻訳するためにヘルパー機能を書きます.
def translate(texts, model, tokenizer, language="fr"):
    # Prepare the text data into appropriate format for the model
    template = lambda text: f"{text}" if language == "en" else f"{language}<< {text}"
    src_texts = [template(text) for text in texts]

    # Tokenize the texts
    encoded = tokenizer.prepare_seq2seq_batch(src_texts)

    # Generate translation using model
    translated = model.generate(**encoded)

    # Convert the generated tokens indices back into text
    translated_texts = tokenizer.batch_decode(translated, skip_special_tokens=True)

    return translated_texts
次に、上記を使用する関数を準備しますtranslate() 関数を返します.
def back_translate(texts, source_lang="en", target_lang="fr"):
    # Translate from source to target language
    fr_texts = translate(texts, target_model, target_tokenizer, 
                         language=target_lang)

    # Translate from target language back to source language
    back_translated_texts = translate(fr_texts, en_model, en_tokenizer, 
                                      language=source_lang)

    return back_translated_texts
現在、英語からスペイン語への逆翻訳を使用して、以下のように文章のリストにデータの拡張を行うことができます.
en_texts = ['This is so cool', 'I hated the food', 'They were very helpful']

aug_texts = back_translate(en_texts, source_lang="en", target_lang="es")
print(aug_texts)
["Yeah, it's so cool.", "It's the food I hated.", 'They were of great help.']
同様に、我々は以下のように正確に同じヘルパーメソッドを使用してフランス語に英語を使用して強化を行うことができます.
en_texts = ['This is so cool', 'I hated the food', 'They were very helpful']
aug_texts = back_translate(en_texts, source_lang="en", target_lang="fr")

print(aug_texts)
["It's so cool.", 'I hated food.', "They've been very helpful."]

チェインバック


また、より多様性を得るためにチェーンで翻訳を実行することができます.例えば、English -> Spanish -> English -> French -> English
en_texts = ['This is so cool', 'I hated the food', 'They were very helpful']

aug1_texts = back_translate(en_texts, source_lang="en", target_lang="es")
aug2_texts = back_translate(aug1_texts, source_lang="en", target_lang="fr")

print(aug2_texts)
["Yeah, that's cool.", "It's the food I hated.", 'They were of great help.']

利用可能なモデル


ここでは、上記を使用することができる主要なロマンス言語のサブセットの言語コードです.
言語
フランス語
スペイン語
イタリア語
ポルトガル語
ルーマニア人
カタラン
ガリシア
ラテン語
コード
FR
ES
it
pt
ro
CA
GL

言語
ウォールロン
occitan(ポスト1500)
サルデーニャ人
アラゴ
コルシカン
ロマンティック
コード

OC
SN

co
RM
すべての利用可能な言語コードを表示するには
target_tokenizer.supported_language_codes

代替アプリケーション


データ増強の他に、後ろの翻訳プロセスも、テキスト言い換えのために使うことができます.
同様に、我々はそれを敵対的攻撃として使うこともできます.我々がNLPモデルを訓練したトレーニングデータセットがあると仮定してください.そこで,拡張したテキスト上のモデルからトレーニングデータセットを拡張し,予測を生成できる.予測が我々の地上Trueラベルと異なるならば、我々は我々のモデルが失敗するテキストのリストを持っています.これらの反応を分析することにより,良い洞察を得ることができる.

結論


したがって、Marianmtは、翻訳のためのGoogle翻訳へのまともな無料でオフラインの代替手段です.

参考文献

  • MarianMT - transformers 3.0.2 documentation
  • 接続


    あなたがブログポストを楽しむならば、私が毎週私が新しいブログ柱を共有するところで、私と連絡をとってください.