はじめに
本記事は言語処理100本ノックの解説です。
100本のノックを全てこなした記録をQiitaに残します。
使用言語はPythonです。
今回は第10章: 機械翻訳の最終問題、「99. 翻訳サーバの構築」を説明します。
本記事ではサーバを構築して、機械翻訳モデルが動くデモシステムができるまでを解説します。なお、今回サーバ構築で利用するGoogle Cloud Platform(GCP)は無料枠があり、初めて使う方でしたら全て無料枠で収まると思います。
前提
・fairseqを用いて構築した機械翻訳モデルがある
・Googleのアカウントを持っている
・登録できるクレジットカードを持っている(無料でできますが必要です)
Google Cloud Platform(GCP)を始める
問題99ではクラウドサーバー上で問題98で作ったfairseqの機械翻訳モデルが動作させます。そのためにまず、クラウドサービスのアカウントを作りましょう。
下記の記事を参考に環境構築を進めてください。記事の「プロジェクトの作成」までできたら、本記事の次のステップに移ります。
VMインスタンスを立てる
以上の設定で[作成]ボタンをクリックします。
ファイアウォールの作成
Webブラウザから翻訳ページを開くために必要です。以下の記事の「3.ファイアウォールの作成」「4.Google Compute Engine (GCE)の変更」のみを実施します。
上記の記事通りですが、[ファイアウォール ルールの詳細]は以下のようにしました。
[VMインスタンス]の[編集]から[ネットワーク タグ]に先ほど作成した「ファイアウォール ルール」を追加します。
VMインスタンスに機械翻訳用の環境を導入
Python環境を構築してFlask、fairseq、Janomeをインストールするために、以下のコマンドを実行します。
$ sudo apt-get update
$ sudo apt-get install -y python3-pip
$ pip3 install Flask==2.2.5
$ pip3 install fairseq==0.12.2
$ pip3 install Janome==0.5.0
ファイルをアップロード
機械翻訳に必要なファイルをVMサーバにアップロードします。VMサーバにアップロードするにあたり、Google Cloud SDKを利用すると機械学習モデルでもすぐアップロードできます。(SSHの[ファイルをアップロード]でやると鬼時間かかります。)
やることは1. Google Cloud SDKをインストールして、2. 必要なモジュールをVMサーバに送信です。直接的にやり方が書いてある記事が見つからなかったので、公式のドキュメントを参考にキーワードで調べながらやってみてください。
今回は以下のファイルをVMサーバにアップロードします。
- checkpoint_best.pt
faireseqで構築した翻訳モデル - dict.ja.txt
翻訳モデルの日本語辞書。fairseqのprocessで生成される。 - dict.en.txt
翻訳モデルの英語辞書。fairseqのprocessで生成される。 - main.py
webページを構築するために、Flaskを動かす。htmlをべた書きしてデモシステムを動かせる程度にしている。
from flask import Flask, request
from janome.tokenizer import Tokenizer
from fairseq.models.transformer import TransformerModel
app = Flask(__name__)
t = Tokenizer()
model = TransformerModel.from_pretrained(
'./model',
checkpoint_file='checkpoint_best.pt',
)
@app.route('/' ,methods=['GET', 'POST'])
def translate_sentence():
if request.method == 'POST':
input_text = request.form['input_text']
sentence = (" ").join(list(t.tokenize(input_text, wakati=True)))
result = model.translate(sentence)
result = result.replace("<unk>", "@@@")
return result + '''
<form method="post">
<input type="text" name="input_text">
<input type="submit" value="Submit">
</form>
'''
else:
return '''
<form method="post">
<input type="text" name="input_text">
<input type="submit" value="Submit">
</form>
'''
if __name__ == '__main__':
app.run()
翻訳システムを起動
main.pyを動かして翻訳モデルを起動。
$ FLASK_APP=main.py flask run --host=0.0.0.0
※FlaskのPATHが通らない場合は以下を実行
$ export PATH=$PATH:~/.local/bin
VMインスタンスの外部IPを確認。Webブラウザで以下のURLを検索する。
「http://[外部IP]:5000」
Webブラウザで翻訳実行
「http://[外部IP]:5000」で以下のページに飛びます。入力欄に日本語を入れて、[Submit]を押すと翻訳結果が出力されます。
↓[Submit]を押した後。入力文は「江戸幕府は崩壊した」
これで言語処理100本ノック2020を完走です!!!
【重要】VMインスタンスの削除
翻訳システムを使い終わったら、今回立ち上げたVMインスタンスを削除または停止してください。VMインスタンスが動いている限り課金され続け、無料枠を使い切ってしまう可能性があります。
コメント
最後のサーバ構築で詰まる人も多いと思いますが、クラウドサーバーを使えば実現できます。言語処理100本ノック2020お疲れ様でした!
他章の解答例