GCP Document TranslationでPDFを丸ごと翻訳する

英語が苦手で、日頃Google翻訳やDeeplを駆使して論文を読んでいるのですが、
GCPでドキュメントを丸ごと翻訳する機能がプレビュー版で公開されたので試してみました。
[Translation API Advanced can translate business documents across 100+ languages](https://cloud.google.com/blog/products/ai-machine-learning/google-cloud-ai-translation-services-works-for-documents?utm_source=twitter&utm_medium=unpaidsoc&utm_campaign=FY21-Q2-Google-Cloud-Blog&utm_content=translation-api&utm_term=-)

なお、実施手順は公式ページの通りです。
[Translate documents](https://cloud.google.com/translate/docs/advanced/translate-documents)

# 手順

## 1. サービスアカウントの作成
https://cloud.google.com/docs/authentication/production?hl=JA#manually
もし今のプロジェクトにサービスアカウントが設定されていなければ、上記リンクの手順で作成できます。ロールは編集者でOKです。
![](2021-05-24-19-23-14.png)![2021-05-24-19-23-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/18d0d65d-de08-4565-f37a-73c8e5a64baf.png)

キーは忘れずにダウンロードしましょう。

## 2. Google Cloud SDKのインストール
https://cloud.google.com/sdk/docs/install?hl=JA
コマンドを実行するPCにSDKが導入されていなければ、上記リンクから導入します。
Cloud Shellで実行するのであれば不要です。

## 3. Cloud Storageの設定
翻訳したいドキュメントと、翻訳後のドキュメントを格納するバケットを作成します。リージョンはどこでもOKです。
![2021-05-24-19-27-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/f2f630ad-8bb5-94b5-5121-bd0b00951e76.png)

今回は[最近話題の論文](https://arxiv.org/abs/2105.08050)を翻訳します。
![2021-05-24-19-27-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/1454ac53-4c54-d62c-f495-39f4587db675.png)

gsutil URIは後ほど必要なのでメモっておきます。
![2021-05-24-19-28-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/76ffca9e-b0e1-4eb2-d701-5b7b0da68537.png)

## 4. Cloud Translation APIの有効化
翻訳に必要なCloud Translation APIを有効にします。

翻訳するページ数あたりで料金がかかるため注意。
（1ページ10円は高い…）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/b630b5d3-b5c4-6d73-03da-96d017076736.png)


## 5. 実行
翻訳したい内容に合わせて、request.jsonを作成します。

```json
{
  "source_language_code": "SOURCE_LANGUAGE",
  "target_language_code": "TARGET_LANGUAGE",
  "document_input_config": {
    "gcsSource": {
      "inputUri": "gs://INPUT_FILE_PATH"
    }
  },
  "document_output_config": {
    "gcsDestination": {
      "outputUriPrefix": "gs://OUTPUT_FILE_PREFIX"
    }
  }
}
```

具体的には以下の通りです。

``` json
{
  "source_language_code": "en",
  "target_language_code": "ja",
  "document_input_config": {
    "gcsSource": {
      "inputUri": "gs://translate-target/2105.08050.pdf"
    }
  },
  "document_output_config": {
    "gcsDestination": {
      "outputUriPrefix": "gs://translate-target/"
    }
  }
}
```

その後、Terminalから以下のコマンドを実行します。

```bash
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://translation.googleapis.com/v3beta1/projects/PROJECT_NUMBER_OR_ID/locations/LOCATION:translateDocument
```

具体例は以下の通りです。

``` bash
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
https://translation.googleapis.com/v3beta1/projects/trasnlation-documents-test/locations/us-central1:translateDocument
```

コンソールでだららっと文字が流れたら完了です。
![2021-05-24-19-36-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/cedf407d-caeb-af53-8c25-852e64a8218f.png)

Cloud Storageに翻訳後のファイルが生成されています。
![2021-05-24-19-37-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/f0e2d41f-83b9-a85d-57fc-4b8390c41af0.png)


## 翻訳結果

### 全般
![2021-05-24-19-42-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/ffb79e0b-1959-6766-7fb4-c3dd35e02de0.png)
![2021-05-24-19-39-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/6e71c380-c6d9-3227-e71a-4be8a60c508a.png)

翻訳したファイルのヘッダーに、Googleで機械翻訳した旨が記載されます。内容は普通のGoogle翻訳でしょうか。

### 数式
![2021-05-24-19-40-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/5eeb9daa-a2af-6ca3-9179-d0d3c7bb183e.png)
![2021-05-24-19-39-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/7152fcdf-33ab-5f04-a5d0-7061d6bb9594.png)

一部フォーマットが崩れる箇所がありました。ここは原文を読むしかないですね。

### 表
![2021-05-24-19-40-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/160c0991-56f7-55a0-c356-4f3338905205.png)
![2021-05-24-19-41-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/467f7d89-ba4f-ac0b-725b-8b2576b2968e.png)

フォーマット崩れなく翻訳できてます。

### グラフ
![2021-05-24-19-41-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/b2c216aa-88d8-9166-960d-0a7e1cb2b429.png)
![2021-05-24-19-42-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/194326/43d63ce0-5be9-a445-91a7-1f81a1147dd8.png)

図の中まで翻訳されています。素晴らしい…

## まとめ

今回はプレビュー版のDocument Translation機能を試しましたが、想定より綺麗に翻訳ができて感動しました。ただ、現状だと論文1本あたり100円程度費用がかかるため、破産しないように注意が必要ですね。