Google AutoML Translationの使い方

#はじめに
GCPのGoogle AutoMLTranslationを使う機会があったので記録としてメモしていこうと思います！
学習にかかるお値段すごいのでなかなか手が出せなかったのですが、機会に恵まれて良かったです:sunny:

##GCP
GCPとはGoogle Cloud Platformの略でGoogleさんが運営しているクラウドサービスになります。
できることはいろいろあるのですが、今回はその中のGoogle AutoMLTranslationを使用します！

##AutoML
AutoMLとは機械学習の知識がなくてもモデルの構築を可能にするシステムのことです。
データの前処理から、訓練用、テスト用にデータを分けて、モデルを作って、パラメータを調整して、、、などの処理がすでにでいるようになっていて、**データさえそろっていれば**モデルのトレーニングがすぐにできてしまう優れもの！
しかも今回使用するGoogleのAutoMLはモデルができたら作成したモデルをすぐにAPIにできるし、GoogleCloud上に直接デプロイが可能なのだそうです！

#使い方
AutoMLTranslationの使い方を紹介していきます！
詳しく載っているのはもちろんドキュメントなので詳しくはこちらを参照して下さい。
[Google AutoMLTranslationのドキュメント](https://cloud.google.com/translate/automl/docs)

##学習を始める前に
こちらのドキュメントを参考にしてAutoMLが使えるようにして下さい。
[始める前に](https://cloud.google.com/translate/automl/docs/before-you-begin)
（サービスアカウントはAPIとして使用するときに必要だっただけな気がするので多分APIを使用しないならいらない）

##データセット作成
左端のナビゲーションメニューを開いて「翻訳」を見つけ出して、翻訳のダッシュボードを開きます。
<img width="289" alt="スクリーンショット 2020-03-03 17.12.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416811/46bcd213-d041-2485-1907-7abe93eaddad.png">

今回は左のAutoMLTranslationを使用します。
<img width="966" alt="スクリーンショット 2020-03-03 17.17.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416811/59f0236d-6d59-2c3d-a641-54b0031738c5.png">
開始をクリックするとデータセット画面に移行します。

<img width="941" alt="スクリーンショット 2020-03-03 18.14.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416811/f45e9845-27b3-b9a3-91f7-7d49a68254f4.png">
「データセットを作成」をクリックするとデータセット作成画面が現れます。

<img width="513" alt="スクリーンショット 2020-03-03 17.24.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416811/2ea2c046-140f-614b-97a0-0031fbadc4fd.png">


やることは、
・データセット名を決める
・ソース言語(翻訳したい言語)を決める
・ターゲット言語(翻訳結果として出して欲しい言語)を決める
例）日本語から英語に翻訳して欲しいとき
　　ソース言語→日本語
　　ターゲット言語→英語

全部決めたら「作成」ボタンを押す。

これでデータセットが作成されました！

しかしこのデータセットの中にはまだ何もデータが入っていません。
ここからデータを入れていこうと思います。

##データ作成
データはソース言語とターゲット言語の文章の対訳になります。
例)　日本語を英語に訳すモデルを作りたいとき

| 日本語  | 英語 |
|:-----------------|------------------|
| こんにちは          |Hello | 
| 初めまして          |Nice to meet you|
| ねこが可愛い        |Cat is cute|

このような対訳を自分のカスタマイズしたい分野に合わせて作っていきます。
ソース言語は左、ターゲット言語は右にして対訳を作成します。
データの形式は.tsvにして下さい。
データセットを何処かから引っ張ってきてもこの形に準じていれば大丈夫です！
わたしはデータがなかったので作ることになりましたが、、、

また、データのファイルはtrain,val,testの3つに予め分けておくことをお勧めします。

**注意**
**test,valにそれぞれ１００以上の例文が入っていないと学習ができません**

データを用意できたら、先ほど作成したデータセットにインポートしていきます。
作成したデータセットを選択し、インポートタブを開きます。

Cloud Strageにデータのファイルを入れておくと便利なのでそちらをお勧めしますが、パソコンからもファイルのアップロードが可能です。
その際もCloud Strageに保存することになるのでバケットは作っておくといいと思います。
また、バケットを作成するときはリージョンを**us-central**にして下さい。

<img width="554" alt="スクリーンショット 2020-03-03 17.56.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416811/3faf4183-3e56-da40-992e-ce904a68bac1.png">

そしておすすめはトレーニング、検証、テストに別のファイルを使用します(上級者向け)にチェックを入れて、それぞれファイルをインポートすることです。
よくわからない仕様ですが、それをしない場合testの内容が書き換えられてしまうことがあります。

またすごく困ったのは、**test,valにそれぞれ１００以上の例文が入っていないと学習ができない**ことです。
これでいつものtrain:80%, val:10%, test:10%　を守るとなると、全部で**1000文**必要になります、、
ただ勉強でやるには自分で作るとなると過酷ですね、、

ファイルを指定できたら、「続行」ボタンをクリック。
インポートに少し時間がかかります。

##学習
インポートができたらトレーニングタブに移動します。

<img width="941" alt="スクリーンショット 2020-03-03 18.45.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416811/86ea1fb7-eee3-8676-f5d3-74399e7988f6.png">

インポートしたファイル名と正常にインポートされた例文数が表示されます。
トレーニングを開始ボタンを押すと、「新しいモデルのトレーニング」という画面が出てきます。
<img width="722" alt="スクリーンショット 2020-03-03 18.48.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416811/9011829f-b1a0-44e9-0110-6dfa48b6c780.png">

やることは、
1.モデル名を決定する
2.ベースモデルの決定
です。
2.について、最初はGoogle NMTモデルのみが選択できます。
一つでも、あるソース言語とターゲット言語の組み合わせでモデルを作成すれば、その作成したモデルをベースに追学習させることができるようになります。
精度をどうしてもあげたいときは作成したモデルにどんどん追学習していく方がお勧めです。(過学習かも。。？)
わたしの場合、一回の学習ではほとんどNMTと変わらない結果でした。
わたしのデータに同音異義語が多かったせいかもしれませんが、、

１、２、ができたら「トレーニングを開始」ボタンを押すと学習が始まります。
ここからが長い、、もし1000文入れていたら２時間はかかります。
そして大体２時間で１万円程度のお金が吹っ飛びます！！お気をつけ下さい。

##予測
学習が終わったら、予測のタブに移動して例文を入力してみると、新しくできたモデルとGoogleNMTモデルの出力結果を比較することができます。

また、モデルIDや、APIの使いかたなども表示されています！
ぜひ使ってみて下さい！

#終わりに
今回、初めてAutoMLという技術に触れさせていただき、とても勉強になりました。
実際に使ってみた感想としては、評価関数にBLEUを使っていたり、そもそもデータを集める時点で機械学習の知識が一切いらないとは思えないな、というのが正直なところです！
でも、自分でモデルを作成しないでいいというのは確かに楽だし、すぐにAPIとして利用できるのも便利だなと思いました！
データ突っ込むだけって楽ですねぇ〜！
でも工夫できるとこがデータしかないので精度あげなきゃってなると大変でした、、
勉強として触れるのはなかなか大変なことだとは思いますが、興味があったら是非やってみて下さい:hugging:

#参考文献
[Google AutoML Translationドキュメント](https://cloud.google.com/translate/automl/docs)