OpenNMTで機械翻訳
自然言語処理 機械学習この記事で取り扱うこと
- 機械翻訳の基礎
- Google Colaboratory の利用方法
- OpenNMT-py の利用方法
この記事で取り扱わないこと
- 機械翻訳モデルの詳細
- 機械翻訳の応用例の紹介
機械翻訳概要
現在の機械翻訳は対訳コーパスと呼ばれるビッグデータを利用した、機械学習(ディープラーニング)により実装されています。 対訳コーパスは、翻訳元の言語(原言語)と翻訳先の言語(目的言語)の文が対となったデータのことです。 小さいものでも約 10 万文対、大きいものだと 1000 万文対以上もあります。 現在は EncoderDecoder と呼ばれるディープラーニングモデルを利用するのが主流です。 詳しい説明は省きますが簡単に言うと、EncoderDecoder はある時系列データを別の時系列データに変換するモデルです。 EncoderDecoder をはじめとするディープラーニングモデルを 1 から実装するのは大変です。 そこで今回はオープンソースである OpenNMT-py を利用して実装します。
実行環境
機械翻訳をはじめとする、多くのディープラーニングタスクでは計算に膨大がかかり、それゆえ GPU の利用が推奨されています。 しかし、すべての人が GPU を用意できるわけではありません。 そこで今回はクラウドサービス、Google Colaboratory(通称 Colab)を利用することにより GPU を使用します。 Colab はこちらからアクセスできます。 Colab を利用するためには Google アカウントが必要になります。 また今回は対訳コーパスとして京都関連文書対訳コーパス (KFTT) を使用します。 KFTT は Wikipedia の京都関連の記事を対象とした約 44 万文対からなる日英対訳コーパスです。 KFTT にはすでに分かち書き済みのテキストがあるため、それを使用します。 今回は学習時間の都合上、日英ともに文長が 10 以下である文対のみを対象とします。 翻訳モデルは先述の通り、OpenNMT-py を利用します。
実装
実装の手順を紹介します。 なお、今回紹介するノートブックはこちらで公開しています。
Notebook を立ち上げる
Colab にアクセスし、ファイル -> ノートブックを新規作成
を選択します。
Jupyter Notebook 形式のページが表示されるはずです。
GPU を利用可能にする
ランタイム -> ランタイムのタイプを変更
を選択し、「ハードウェアアクセラレータ」を GPU に設定します。
GPU の種類を確認する
ノートブックのセルに以下のように記述し、Ctrl + Enter で実行します。
# GPUの種類を確認する
!nvidia-smi
実行すると以下のようなフォーマットが出力されます。
Wed Apr 8 06:09:41 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64.00 Driver Version: 418.67 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P4 Off | 00000000:00:04.0 Off | N/A |
| N/A 50C P8 8W / 75W | 0MiB / 7611MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
Colab では記事投稿時、4 種類の性能が異なる GPU を提供しており、それらはランタイム接続時にランダムで割り当てられます。 今回は「Tesla P4」が割り当てられました(出力結果の中央参照)。 筆者の感覚では、「Tesla K80」「Tesla P4」は性能が低く、「Tesla T4」「Tesla P100」は性能が高いです。 性能の高い GPU は性能の低い GPU よりも約 3 倍速いと言われています(参考)。
対訳データを用意する
続いて以下のセルを実行します。
# 京都関連文書対訳コーパス(KFTT)をダウンロードする。
!wget http://www.phontron.com/kftt/download/kftt-data-1.0.tar.gz
# tar.gzファイルを解凍する。
!tar -zxvf /content/kftt-data-1.0.tar.gz
# Googleドライブに分かち書き済みの対訳データをコピーする。
!cp -r kftt-data-1.0/data/tok/ 'drive/My Drive/'
上記では KFTT をダウンロードし、解凍し、分かち書き済みのデータを Google Drive に保存します。 実際にうまくいってるか確かめるために以下のコードを実行します。
!ls '/content/drive/My Drive/tok'
うまくいっていれば以下のように出力されるはずです。
kyoto-dev.en kyoto-test.en kyoto-train.cln.en kyoto-train.en kyoto-tune.en
kyoto-dev.ja kyoto-test.ja kyoto-train.cln.ja kyoto-train.ja kyoto-tune.ja
実行準備をする
まず、%cd drive/My Drive
でカレントディレクトリを変更します。
次に、ボキャブラリおよびモデルを保存するためのディレクトリを作成します。
!mkdir data
!mkdir save
最大文長を制限する
最大文長を制限するために以下の関数を作成します。
def limiter(data_dir, src_data, tgt_data, n=50):
'''limiter
コーパスの最大文長を制限する。
----------------------------------------
引数
data_dir : コーパスのディレクトリ
src_data : 原言語のデータ
tgt_data : 目的言語のデータ
n : 最大文長
----------------------------------------
'''
# 書き込み用のデータファイルを作成する。
with open(f'{data_dir}/limit-{src_data}', 'w', encoding='utf8') as wsrc:
with open(f'{data_dir}/limit-{tgt_data}', 'w', encoding='utf8') as wtgt:
# 元のデータファイルを読み込む
with open(f'{data_dir}/{src_data}', encoding='utf8') as rsrc:
with open(f'{data_dir}/{tgt_data}', encoding='utf8') as rtgt:
# それぞれ一行ずつ読み込みリストに格納する。
src_lines = rsrc.read().strip().split('\n')
tgt_lines = rtgt.read().strip().split('\n')
for src, tgt in zip(src_lines, tgt_lines):
# 最大文長がn以下のもののみ書き込む。
if len(src.split()) <= n and len(tgt.split()) <= n:
wsrc.write(src + '\n')
wtgt.write(tgt + '\n')
次に以下のセルを実行し、上記の関数を適用します。
## 文長制限するファイルの一覧
files = ['train', 'dev', 'test']
for f in files:
# 最大文長10とする
limiter('tok', f'kyoto-{f}.en', f'kyoto-{f}.ja', n=10)
実行後、もう一度 !ls tok
でディレクトリの確認を行います。
結果以下のようになります。
kyoto-dev.en kyoto-train.cln.en kyoto-tune.en limit-kyoto-test.en
kyoto-dev.ja kyoto-train.cln.ja kyoto-tune.ja limit-kyoto-test.ja
kyoto-test.en kyoto-train.en limit-kyoto-dev.en limit-kyoto-train.en
kyoto-test.ja kyoto-train.ja limit-kyoto-dev.ja limit-kyoto-train.ja
以下のセルで、文長制限をしたファイルのサイズを確認します。
# 文長制限ができているか確認する。
!wc -l tok/limit-kyoto-train.en
!wc -l tok/limit-kyoto-train.ja
結果
71683 tok/limit-kyoto-train.en
71683 tok/limit-kyoto-train.ja
これにより文対数を約 70000 まで削減したことが分かります。
OpenNMT-py をインストールする
セルに以下のように記述し、実行します。
!pip install OpenNMT-py
これで OpenNMT-py をインストールできます。
前処理を実行する
以下のセルを実行し、前処理を行います。
# データの前処理をする。
!onmt_preprocess -train_src tok/limit-kyoto-train.en \
-train_tgt tok/limit-kyoto-train.ja \
-valid_src tok/limit-kyoto-dev.en \
-valid_tgt tok/limit-kyoto-dev.ja \
-save_data data/demo
実行後 !ls data
で data ディレクトリの中身を確認すると以下のようになっています。
demo.train.0.pt demo.valid.0.pt demo.vocab.pt
学習を実行する
今回は EncoderDecoder の中でも、Transformer と呼ばれるモデルを使用し学習します。 Transformer は 2017 年に提案されたモデルで計算速度、性能ともに以前までのモデルを上回り、話題となりました。 以下のセルを実行し、学習を実行します。学習は性能の低い GPU で約 15 分かかります。
!onmt_train -data data/demo \
-save_model save \
-layers 6 -rnn_size 512 -word_vec_size 512 -transformer_ff 2048 -heads 8 \
-encoder_type transformer -decoder_type transformer -position_encoding \
-train_steps 10000 -max_generator_batches 2 -dropout 0.1 \
-batch_size 1024 -batch_type tokens -normalization tokens -accum_count 2 \
-optim adam -adam_beta2 0.998 -decay_method noam -warmup_steps 4000 -learning_rate 2 \
-max_grad_norm 0 -param_init 0 -param_init_glorot \
-label_smoothing 0.1 -valid_steps 2000 -save_checkpoint_steps 2000 \
-world_size 1 -gpu_ranks 0
実行完了後、save ディレクトリに _step_2000.pt
が保存されているはずです。
実際に翻訳する
以下のセルで limit-kyoto-test.en
内のコードが翻訳できます。
!onmt_translate -model save/_step_2000.pt \
-src tok/limit-kyoto-test.en \
-output tok/limit-kyoto-output.ja \
-replace_unk -verbose
実行すると翻訳結果が出力されていきます。
[2020-04-08 10:03:29,467 INFO] Translating shard 0.
SENT 1: ['Infobox', 'Buddhist']
PRED 1: 森澤 楽 ( かちょう )
PRED SCORE: -11.8644
SENT 2: ['The', 'founder', 'of', 'Soto', 'Zen']
PRED 2: 曹洞 宗 の 僧
PRED SCORE: -5.4882
SENT 3: ['1228', '-', 'Returned', 'to', 'Japan', '.']
PRED 3: いずれ も 日本 に 従 っ た 。
PRED SCORE: -8.9473
SENT 4: ['Cause', 'of', 'death', 'was', 'a', 'boil', '.']
PRED 4: 享年 88 。
PRED SCORE: -4.0019
SENT 5: ['The', 'true', 'teaching', 'is', 'different', '.']
PRED 5: これ が 多 い 。
PRED SCORE: -8.9989
SENT 6: ['"', 'Shobogenzo', '"']
PRED 6: 『 一雨 記 』
PRED SCORE: -6.1978
SENT 7: ['"', 'Eihei', 'Shingi', '"']
PRED 7: 『 一雨 詩偈 』
PRED SCORE: -5.8702
SENT 8: ['"', 'Tenzo', 'Kyokun', '"']
PRED 8: 『 一雨 戦場 記 』
PRED SCORE: -6.3736
SENT 9: ['Reference', 'Works']
PRED 9: 参考 書
PRED SCORE: -5.3466
SENT 10: ['Taijo', 'TAMAMURO', ':', '"', 'Dogen', '"', 'Shin-Jinbutsuoraisha', ',', '1971']
PRED 10: ※ 日付 = 旧暦
PRED SCORE: -4.7212
SENT 11: ['Koshiro', 'TAMAKI', ':', '"', 'Dogen', '"', 'Shunjusha', ',', '1996']
PRED 11: ※ 日付 = 旧暦
PRED SCORE: -6.0158
SENT 12: ['Ume']
PRED 12: 千 宗旦
PRED SCORE: -5.9351
SENT 13: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', '8620', '-', 'Working']
PRED 13: 近畿 日本 鉄道 - 鉄道 徒歩 1 分
PRED SCORE: -9.2944
SENT 14: ['Transferred', 'from', 'the', 'Hirosaki', 'Transport', 'Area', '.']
PRED 14: 客貨 取扱 を 開始 。
PRED SCORE: -4.6722
SENT 15: ['Registration', 'deleted', 'in', '1979', '(', 'for', 'working', 'preservation', ')', '.']
PRED 15: ホーム 有効 長 は 留学 。
PRED SCORE: -12.0755
SENT 16: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', '9600']
PRED 16: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.7966
SENT 17: ['Transferred', 'from', 'the', 'Otaru', 'Switch', 'Yard', '.']
PRED 17: 世田谷 に 師事 。
PRED SCORE: -9.0856
SENT 18: ['Registration', 'deleted', 'in', '1979', '(', 'for', 'working', 'preservation', ')', '.']
PRED 18: ホーム 有効 長 は 留学 。
PRED SCORE: -12.0755
SENT 19: ['Put', 'into', 'static', 'preservation', 'in', '1987', '.']
PRED 19: ※ 日付 = 旧暦
PRED SCORE: -6.2148
SENT 20: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'B20', '-', 'Working']
PRED 20: 近畿 日本 鉄道 北 近畿 日本 自動 車
PRED SCORE: -12.8495
SENT 21: ['Manufactured', 'in', '1946', 'by', 'Tateyama', 'Heavy', 'Industries', '.']
PRED 21: 昭和 16 年 ( 1928 年 ) に 設置 。
PRED SCORE: -11.5587
SENT 22: ['Transferred', 'from', 'the', 'Kagoshima', 'Engine', 'Depot', '.']
PRED 22: 鹿児島 から 移転 する 。
PRED SCORE: -7.2828
SENT 23: ['Registration', 'deleted', 'in', '1979', '.']
PRED 23: 1982 年 に 設立 。
PRED SCORE: -8.6031
SENT 24: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C11']
PRED 24: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.5465
SENT 25: ['Registration', 'deleted', 'in', '1987', '.']
PRED 25: ドイツ に おけ る 。
PRED SCORE: -6.5260
SENT 26: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C51', '*']
PRED 26: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.4775
SENT 27: ['Scrapped', 'at', 'the', 'Niitsu', 'Transport', 'Area', 'in', '1962', '.']
PRED 27: 1931 年 に 開館 する 。
PRED SCORE: -7.3883
SENT 28: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C53', '*']
PRED 28: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.4775
SENT 29: ['Scrapped', 'in', '1950', 'at', 'the', 'Umekoji', 'Engine', 'Depot', '.']
PRED 29: - 梅小路 蒸気 機関 車 に よ る 。
PRED SCORE: -8.9613
SENT 30: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C55']
PRED 30: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.7966
SENT 31: ['Manufactured', 'in', '1935', 'by', 'Kawasaki', 'Rolling-Stock', 'Mfg', '.', 'Co', '.']
PRED 31: - 眞山 青果 大賞 。
PRED SCORE: -9.3887
SENT 32: ['Transferred', 'from', 'the', 'Asahikawa', 'Rail', 'Yard', '.']
PRED 32: 一般 国道 に 移転 。
PRED SCORE: -8.6779
SENT 33: ['Registration', 'deleted', 'in', '1979', '.']
PRED 33: 1982 年 に 設立 。
PRED SCORE: -8.6031
SENT 34: ['Manufactured', 'in', '1939', 'by', 'Kawasaki', 'Rolling-Stock', 'Mfg', '.', 'Co', '.']
PRED 34: 1961 年 に 入社 。
PRED SCORE: -8.1801
SENT 35: ['Transferred', 'from', 'the', 'Matsumoto', 'Transport', 'Area', '.']
PRED 35: 北 近畿 タンゴ 鉄道 に よ る 。
PRED SCORE: -9.6190
SENT 36: ['Manufactured', 'in', '1937', 'by', 'Kawasaki', 'Rolling-Stock', 'Mfg', '.', 'Co', '.']
PRED 36: 昭和 38 年 ( 1937 年 ) に 設置 。
PRED SCORE: -12.4337
SENT 37: ['Transferred', 'from', 'the', 'Sakura', 'Engine', 'Depot', '.']
PRED 37: - 眞山 青果 に 行 う 。
PRED SCORE: -12.5149
SENT 38: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C58']
PRED 38: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.1135
SENT 39: ['Transferred', 'from', 'the', 'Kitami', 'Rail', 'Yard', '.']
PRED 39: 客貨 取扱 を 開始 。
PRED SCORE: -4.0971
SENT 40: ['Registration', 'deleted', 'in', '1987', '.']
PRED 40: ドイツ に おけ る 。
PRED SCORE: -6.5260
SENT 41: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C59']
PRED 41: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.7966
SENT 42: ['Manufactured', 'in', '1946', 'by', 'Hitachi', ',', 'Ltd', '.']
PRED 42: 1986 年 ( 昭和 16 年 ) 開発 。
PRED SCORE: -9.6515
SENT 43: ['Transferred', 'from', 'the', 'Nara', 'Rail', 'Yard', '.']
PRED 43: 奈良 鉄道 から 徒歩 15 分 。
PRED SCORE: -8.7678
SENT 44: ['Registration', 'deleted', 'in', '1979', '.']
PRED 44: 1982 年 に 設立 。
PRED SCORE: -8.6031
SENT 45: ['Manufactured', 'in', '1948', 'by', 'Mitsubishi', 'Heavy', 'Industries', ',', 'Ltd', '.']
PRED 45: 昭和 40 年 ( 昭和 40 年 ) 設立
PRED SCORE: -10.1885
SENT 46: ['Transferred', 'from', 'the', 'Miyazaki', 'Engine', 'Depot', '.']
PRED 46: 宮崎 山 から 移転 。
PRED SCORE: -9.4733
SENT 47: ['Registration', 'deleted', 'in', '1979', '(', 'for', 'working', 'preservation', ')', '.']
PRED 47: ホーム 有効 長 は 留学 。
PRED SCORE: -12.0755
SENT 48: ['Registration', 'restored', 'in', '1987', '.']
PRED 48: 1987 年 に 開館 する 。
PRED SCORE: -6.2705
SENT 49: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C62', '*']
PRED 49: 近畿 日本 鉄道 徒歩 1 分
PRED SCORE: -6.6945
SENT 50: ['Manufactured', 'in', '1948', 'by', 'Hitachi', ',', 'Ltd', '.']
PRED 50: 昭和 40 年 ( 昭和 23 年 )
PRED SCORE: -9.4229
コーパスの文の数を制限したため、ほとんどの翻訳はうまくいっていませんが、単語レベルで一部拾っている例も見受けられます。 よりよい翻訳をするためには、より大きなコーパスでより時間をかけて学習する必要があります。
実際により大きなサイズでより時間をかけて学習を行い同様に翻訳した結果が以下です。 上の結果よりは良く翻訳できていること分かります。
SENT 1: ['Infobox', 'Buddhist']
PRED 1: 仏教
PRED SCORE: -2.5140
SENT 2: ['The', 'founder', 'of', 'Soto', 'Zen']
PRED 2: 曹洞 宗 の 開祖 。
PRED SCORE: -1.7647
SENT 3: ['1228', '-', 'Returned', 'to', 'Japan', '.']
PRED 3: 安貞 2 年 ( 1228 年 ) 、 帰国 。
PRED SCORE: -3.5501
SENT 4: ['Cause', 'of', 'death', 'was', 'a', 'boil', '.']
PRED 4: 死因 は . 。
PRED SCORE: -4.1021
SENT 5: ['The', 'true', 'teaching', 'is', 'different', '.']
PRED 5: 実際 の 教え は 異な る 。
PRED SCORE: -6.9144
SENT 6: ['"', 'Shobogenzo', '"']
PRED 6: 『 正法 眼蔵 』
PRED SCORE: -0.8672
SENT 7: ['"', 'Eihei', 'Shingi', '"']
PRED 7: 新義
PRED SCORE: -3.2755
SENT 8: ['"', 'Tenzo', 'Kyokun', '"']
PRED 8: Tenzo
PRED SCORE: -4.4306
SENT 9: ['Reference', 'Works']
PRED 9: 参考 作品
PRED SCORE: -1.2372
SENT 10: ['Taijo', 'TAMAMURO', ':', '"', 'Dogen', '"', 'Shin-Jinbutsuoraisha', ',', '1971']
PRED 10: 大 沽 砲台 : 『 道元 』 1971 年
PRED SCORE: -9.8080
SENT 11: ['Koshiro', 'TAMAKI', ':', '"', 'Dogen', '"', 'Shunjusha', ',', '1996']
PRED 11: 玉置 小四郎 : 『 文藝 春秋 』 1996 年
PRED SCORE: -8.1949
SENT 12: ['Ume']
PRED 12: ウメ
PRED SCORE: -1.5128
SENT 13: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', '8620', '-', 'Working']
PRED 13: 国鉄 8620 形 蒸気 機関 車
PRED SCORE: -3.7100
SENT 14: ['Transferred', 'from', 'the', 'Hirosaki', 'Transport', 'Area', '.']
PRED 14: 弘前 地域 から 転属 。
PRED SCORE: -7.5704
SENT 15: ['Registration', 'deleted', 'in', '1979', '(', 'for', 'working', 'preservation', ')', '.']
PRED 15: 1979 年 に 品種 登録 。
PRED SCORE: -4.3973
SENT 16: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', '9600']
PRED 16: 国鉄 9600 形 蒸気 機関 車
PRED SCORE: -1.7480
SENT 17: ['Transferred', 'from', 'the', 'Otaru', 'Switch', 'Yard', '.']
PRED 17: 小樽 方面 から 移転 。
PRED SCORE: -4.8450
SENT 18: ['Registration', 'deleted', 'in', '1979', '(', 'for', 'working', 'preservation', ')', '.']
PRED 18: 1979 年 に 品種 登録 。
PRED SCORE: -4.3973
SENT 19: ['Put', 'into', 'static', 'preservation', 'in', '1987', '.']
PRED 19: 1987 年 ( 昭和 62 年 ) に は 、 保存 性 を 確保 し て い る 。
PRED SCORE: -15.8516
SENT 20: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'B20', '-', 'Working']
PRED 20: 国鉄 B20 形 蒸気 機関 車
PRED SCORE: -3.1673
SENT 21: ['Manufactured', 'in', '1946', 'by', 'Tateyama', 'Heavy', 'Industries', '.']
PRED 21: 昭和 21 年 ( 1946 年 ) 、 Tateyama Tateyama Tateyama に よ る Tateyama Tateyama 。
PRED SCORE: -15.3832
SENT 22: ['Transferred', 'from', 'the', 'Kagoshima', 'Engine', 'Depot', '.']
PRED 22: 鹿児島 車庫 から 転属 。
PRED SCORE: -5.1691
SENT 23: ['Registration', 'deleted', 'in', '1979', '.']
PRED 23: 1979 年 に 品種 登録 。
PRED SCORE: -3.4306
SENT 24: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C11']
PRED 24: 国鉄 C11 形 蒸気 機関 車
PRED SCORE: -2.2371
SENT 25: ['Registration', 'deleted', 'in', '1987', '.']
PRED 25: 1987 年 に 廃車 。
PRED SCORE: -3.7378
SENT 26: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C51', '*']
PRED 26: 国鉄 C51 形 蒸気 機関 車 ※
PRED SCORE: -2.0839
SENT 27: ['Scrapped', 'at', 'the', 'Niitsu', 'Transport', 'Area', 'in', '1962', '.']
PRED 27: 1962 年 ( 昭和 37 年 ) の Niitsu 地区 で の 宮津 自動 車 運送 事業 。
PRED SCORE: -18.7891
SENT 28: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C53', '*']
PRED 28: 国鉄 C53 形 蒸気 機関 車 ※
PRED SCORE: -2.0839
SENT 29: ['Scrapped', 'in', '1950', 'at', 'the', 'Umekoji', 'Engine', 'Depot', '.']
PRED 29: 1950 年 ( 昭和 25 年 ) 、 梅小路 車庫 で の . 。
PRED SCORE: -8.9858
SENT 30: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C55']
PRED 30: 国鉄 C55 形 蒸気 機関 車
PRED SCORE: -1.7480
SENT 31: ['Manufactured', 'in', '1935', 'by', 'Kawasaki', 'Rolling-Stock', 'Mfg', '.', 'Co', '.']
PRED 31: 昭和 10 年 ( 1935 年 ) 、 川崎 造船 所 にて 。
PRED SCORE: -9.0913
SENT 32: ['Transferred', 'from', 'the', 'Asahikawa', 'Rail', 'Yard', '.']
PRED 32: 旭川 鉄道 区 から 転属 。
PRED SCORE: -5.5211
SENT 33: ['Registration', 'deleted', 'in', '1979', '.']
PRED 33: 1979 年 に 品種 登録 。
PRED SCORE: -3.4306
SENT 34: ['Manufactured', 'in', '1939', 'by', 'Kawasaki', 'Rolling-Stock', 'Mfg', '.', 'Co', '.']
PRED 34: 1939 年 、 川崎 造船 所 にて 。
PRED SCORE: -7.2440
SENT 35: ['Transferred', 'from', 'the', 'Matsumoto', 'Transport', 'Area', '.']
PRED 35: 松本 地区 より 転属 。
PRED SCORE: -5.4569
SENT 36: ['Manufactured', 'in', '1937', 'by', 'Kawasaki', 'Rolling-Stock', 'Mfg', '.', 'Co', '.']
PRED 36: 1937 年 ( 昭和 12 年 ) 、 川崎 造船 所 にて 。
PRED SCORE: -8.6035
SENT 37: ['Transferred', 'from', 'the', 'Sakura', 'Engine', 'Depot', '.']
PRED 37: 佐倉 車庫 から 転属 。
PRED SCORE: -5.9957
SENT 38: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C58']
PRED 38: 国鉄 C58 形 蒸気 機関 車
PRED SCORE: -2.0051
SENT 39: ['Transferred', 'from', 'the', 'Kitami', 'Rail', 'Yard', '.']
PRED 39: 岩野 電鉄 より 転属 。
PRED SCORE: -7.0427
SENT 40: ['Registration', 'deleted', 'in', '1987', '.']
PRED 40: 1987 年 に 廃車 。
PRED SCORE: -3.7378
SENT 41: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C59']
PRED 41: 国鉄 C59 形 蒸気 機関 車
PRED SCORE: -1.7480
SENT 42: ['Manufactured', 'in', '1946', 'by', 'Hitachi', ',', 'Ltd', '.']
PRED 42: 1946 年 日立 製作 所
PRED SCORE: -3.6834
SENT 43: ['Transferred', 'from', 'the', 'Nara', 'Rail', 'Yard', '.']
PRED 43: 奈良 電気 鉄道 区 から 移転 。
PRED SCORE: -5.4310
SENT 44: ['Registration', 'deleted', 'in', '1979', '.']
PRED 44: 1979 年 に 品種 登録 。
PRED SCORE: -3.4306
SENT 45: ['Manufactured', 'in', '1948', 'by', 'Mitsubishi', 'Heavy', 'Industries', ',', 'Ltd', '.']
PRED 45: 1948 年 ( 昭和 23 年 ) 、 三菱 Mitsubishi 工業 株式 会社 が 設立 。
PRED SCORE: -11.0433
SENT 46: ['Transferred', 'from', 'the', 'Miyazaki', 'Engine', 'Depot', '.']
PRED 46: 宮崎 車庫 から 転属 。
PRED SCORE: -3.9425
SENT 47: ['Registration', 'deleted', 'in', '1979', '(', 'for', 'working', 'preservation', ')', '.']
PRED 47: 1979 年 に 品種 登録 。
PRED SCORE: -4.3973
SENT 48: ['Registration', 'restored', 'in', '1987', '.']
PRED 48: 1987 年 に 品種 登録 。
PRED SCORE: -3.9173
SENT 49: ['Japanese', 'National', 'Railways', 'Steam', 'Locomotive', 'Class', 'C62', '*']
PRED 49: 国鉄 C62 形 蒸気 機関 車 ※
PRED SCORE: -1.8432
SENT 50: ['Manufactured', 'in', '1948', 'by', 'Hitachi', ',', 'Ltd', '.']
PRED 50: 1948 年 日立 製作 所
PRED SCORE: -3.5343
今後の課題
- より大きなデータで学習してみましょう。
- 文章を SentencePiece により、サブワード分割を行った状態で翻訳を行ってみましょう。