colabですぐ試せる!サクッとseq2seqで英語から日本語翻訳を試す

この記事でわかること

  • 機械学習のseq2seqの仕組みがわかる
  • seq2seqを使うとどんなことができるかわかる
  • seq2seqを利用した英語から日本語に翻訳するpythonのプログラミング例がわかる
  • kerasでモデルを作る方法がわかる

 

seq2seqとは

特徴は?

seq2seqを使うとこんな事ができます。

・長い文章を要約することができる

・対話の応答。自動返信のチャットが良い例でしょう。

・翻訳

 

英語から日本語への翻訳を例に取ると、

ユーザーが英語で「Go.」と入力すると、日本語の「行きなさい。」が返信されるイメージです。

 

仕組みは?

seq2seqは、入力側のencoderと出力側のdecoderで構成されます。

encoderとdecoderには、それぞれRNNが組み込まれており、時系列の学習ができるようになっています。

今回作成したプログラムではGRU(RNNの一つ)を使用しています。

 

encoderについて

encoderは入力を受け取る部分。英語を日本語に翻訳する例だと、英語部分に当たる。

各時系列ごと(自然言語だと1文字ずつ)にデータが与えられる。

 

decoderについて

encoderから状態を受け取ります。

さらに、以下の表の用にデータが渡されて、翻訳できるように学習します。

時系列1 時系列2 時系列3 時系列4 時系列5 時系列6
入力
出力

なお、seq2seqについてより詳しく知るには、以下の2つのサイトが役立ちます。

 

今更ながらchainerでSeq2Seq

 

Seq2Seqまとめ

さらに、Seq2Seqについてより詳しく知りたいときは、以下の自然言語処理の講座が役立ちます。

 

Udemy 「自然言語処理とチャットボット: AIによる文章生成と会話エンジン開発」より、

サイバーセール中はUdemyコースが最大90%OFF▼

世界一コスパが安い!
Udemyはこちらから

 

seq2seqで英語を日本語に翻訳するサンプル

データセットは以下のサイトからダウンロードしました。

Tab-delimited Bilingual Sentence Pairs

 

今回は、英語から日本語の翻訳の学習データを使いましたが、

他の言語への翻訳にも対応しています。例えば、英語からイタリア語への翻訳もできる。

 

encoder、decoder部分を図にすると以下のとおりです。

重要な点としては、encoderの状態をdecoder部分に渡しているところです。

 

 

encoder、decoder部分をコードにすると以下の通り。


encoder_input = Input(shape=(None,n_char),name="encoder_input")
encoder_mask = Masking(mask_value=0,name="encoder_mask")
encoder_masked = encoder_mask(encoder_input)
encoder_lstm = GRU(n_mid, dropout=0.2, recurrent_dropout=0.2, return_state=True,name="encoder_gru")  # 過学習を抑えるためdropoutを設定し、ニューロンをランダムに無効にする
encoder_output, encoder_state_h = encoder_lstm(encoder_masked)

#デコーダの作成
decoder_input = Input(shape=(None,n_char),name="decoder_input")
decoder_mask = Masking(mask_value = 0,name="decoder_mask")
decoder_masked = decoder_mask(decoder_input)
decoder_lstm = GRU(n_mid, dropout=0.2, recurrent_dropout=0.2, return_sequences=True, return_state=True,name="decoder_gru")  # dropoutを設定

#以下の例では「initial_state=encoder_state_h」のところでencoderからの「状態」を受け取っています
decoder_output, _ = decoder_lstm(decoder_masked, initial_state=encoder_state_h)  # encoderの状態を初期状態にする

 

 

全体的なコードは以下の通り。

 

colab版・英語から日本語へ翻訳.ipynb

 

まとめ

今回は、seq2seqを使った英語から日本語への翻訳例を記載しました。

 

サンプルプログラムでは、文字からベクトルへの変換は、比較的簡単に実装できるone-hot表現を使いましたが、教師データが増えるとメモリー不足になります。

環境によっては強制終了する問題が発生します。

 

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア
最新情報をチェックしよう!