この記事でわかること
- 機械学習の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つのサイトが役立ちます。
Seq2Seqまとめ
さらに、Seq2Seqについてより詳しく知りたいときは、以下の自然言語処理の講座が役立ちます。
Udemy 「自然言語処理とチャットボット: AIによる文章生成と会話エンジン開発」より、
サイバーセール中はUdemyコースが最大90%OFF▼
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の状態を初期状態にする
全体的なコードは以下の通り。
まとめ
今回は、seq2seqを使った英語から日本語への翻訳例を記載しました。
サンプルプログラムでは、文字からベクトルへの変換は、比較的簡単に実装できるone-hot表現を使いましたが、教師データが増えるとメモリー不足になります。
環境によっては強制終了する問題が発生します。
\IT未経験者からのサポートあり!転職サービス3選!!/
サービス名 | |||
---|---|---|---|
未経験 | 未経験OK | 未経験の転職専用 | 経験者向け |
公開の求人数 | ITエンジニア全体で1万件以上 ITエンジニア未経験で600件以上 |
未公開 | 5,000件以上 |
利用対象 | 全職種 | IT特化 | IT特化 |
特徴 | ✓誰もが知る転職サービス ✓経歴を登録しておくとオファーが来る |
✓企業担当者と条件交渉 ✓スキルの身につく企業を紹介 |
✓IT専門のエージェントが対応 ✓転職成功すると年収200万円以上の大幅アップがある |
転職サポート内容 |
|
|
|
公式サイト | リクナビネクスト | テックゲート | レバテックキャリア |