翻訳アプリを作るために調べたことあれこれ

# はじめに

皆さん英語は出来ますか？
技術者たるもの英語のドキュメントなどさらさら読めないといけないのでしょうが。
私は出来ません。(それではいけないとは思っているのですがなんともかんとも…。)

出来ないなら翻訳サービスでどうにかしようと、各社の音声翻訳サービスを使用した音声翻訳アプリを作る機会があったので、その際に使用したサービスおよび使用しようとしたサービスを軽くまとめます。

# Speech To Text(SST) サービス

音声を入力するとテキストで返してくれるサービス。

対象のサービスは以下の通り。

- GCP Cloud Speech API
- Azure Bing Speech API
- Watson Speech to Text

## GCP Cloud Speech API

- 119の国と地域に対応。
- 最新の情報は[言語のサポート](https://cloud.google.com/speech/docs/languages)を参照。
- 費用は60分までは無料。以降は15秒につき0.006USドル。
- 課金は15秒単位のため、音声が1秒しか無くても15秒扱いになる。
- 詳しくは[料金](https://cloud.google.com/speech/pricing)を参照。

## Azure Bing Speech API

- 29の国と地域に対応
- 最新の情報は[Supported languages](https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech/api-reference-rest/supportedlanguages)を参照。
- 音声認識にはいくつかのモードがあり、状況に応じてモードを選択する必要がある。
    - Interactive mode : 人が機械相手に話すとわかっていて、発話時間が短い(2～3秒程度)場合のモード。
    - Dictation mode : 人が機械相手に話すとわかっていて、発話時間が長い(5～8秒程度)のモード。
    - Conversation mode : 機械相手では無く人同士で会話している場合のモード。
- 費用は1000トランザクションにつき4USドル。1トランザクションは15秒。
- 月5000トランザクションまで無料のFreeプランも用意されている。※1つのAzureサブスクリプション辺り1つのみ。
- 詳しくは[価格](https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/speech-api/)を参照。

## Watson Speech to Text

- 9の国と地域に対応
- 最新の情報は[言語とモデル](https://console.bluemix.net/docs/services/speech-to-text/input.html#models)を参照。
- 費用は最初の1000分まで無料、1000分を超えた場合1分につき0.02USドル。使用時間により1分につき0.01USドルになる段階制。
- 月100分まで無料のライト・プランも用意されている。※ライト・プランごとにインスタンスは1つのみ

## 所感

最初に書いた使用しようとしたサービス。
各社のSSTサービス自体は試した限り問題無いが、作成したアプリがWebアプリでブラウザから音声取得がうまくいかなかったので未使用。
iOSのSafariで音声録音のハードルは高かった…。

最終的にはChrome向けにはHTML5のSpeechRecognition APIを使用、iOS Safari向けにはテキストボックス表示してiOSのIMEの音声入力を使用するというダサい感じになりました。

HTML5のSpeechRecognition APIは以外と精度が良かったので、全てのブラウザに実装してくれるとありがたいなーと。

# 翻訳サービス

テキスト渡すと指定の言語に翻訳してくれるサービス。

対象のサービスは以下の通り。

- GCP Cloud Translation API
- Azure Translator Text API
- Watson Language Translator

AWSにもAmazon Translateがあるのですが、日本語未対応のため今回は対象外。

## GCP Cloud Translation API

- フレーズベース機械翻訳モデルでは104の言語に対応し、それぞれの言語全ての組み合わせに対応している。
- ニューラル機械翻訳モデルでは英語との相互翻訳を98の言語で対応している。
- 最新の情報は[言語のサポート](https://cloud.google.com/translate/docs/languages)を参照。
- 費用は100万文字につき20USドル。
- 100万文字以下の場合は比例計算で課金される。
- 詳しくは[料金](https://cloud.google.com/translate/pricing)を参照。

## Azure Translator Text API

- フレーズベース機械翻訳モデルでは62の言語に対応し、それぞれの言語全ての組み合わせに対応している。
- ニューラル機械翻訳モデルでは21の言語に対応し、それぞれの言語全ての組み合わせに対応している。
- 最新の情報は[Supported languages](https://docs.microsoft.com/en-us/azure/cognitive-services/translator/languages)を参照。
- サポート言語についてはAPIで取得することも出来るので[Speech Translation API - Languages](http://docs.microsofttranslator.com/languages.html)も参照。
- 費用は100万文字につき10USドル。
- 100万文字以下の場合は比例計算で課金される。
- 月200万文字まで無料のFreeプランも用意されている。※1つのAzureサブスクリプション辺り1つのみ。
- 月額金額固定で従量課金より単価が安めのプランも用意されている。
- 詳しくは[価格](https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/translator-text-api/)を参照。

## Watson Language Translator

- 統計的機械翻訳技術(多分フレーズベース機械翻訳のこと)とニューラル・ネットワークを組み合わせたモデルでは11の言語に対応し、基本的に英語との相互翻訳。※一部英語以外の翻訳もある。
- 他の翻訳サービスとは違う点としては、**ニュース**、**会話**、**特許**の翻訳に特化したモデルが用意されており、より精度の高い翻訳が出来るようになっている。
- 特化モデルについてはユーザーが独自のカスタマイズモデルを作成することも可能。
- 上とは別に新しいニューラル機械翻訳モデルがプレビュー版として開発されており、利用することが可能。[ニュースリリース](https://console.bluemix.net/docs/services/language-translator/release-notes.html#12-january-2018)
- 最新の情報は[言語サポートの翻訳モデル](https://console.bluemix.net/docs/services/language-translator/translation-models.html)参照。
- 費用は最初の25万文字まで無料、25万文字超えた場合1000文字につき0.02USドル。
- 月100万文字まで無料のライト・プランも用意されている。※ライト・プランごとにインスタンスは1つのみ
- カスタマイズモデルを用いた翻訳は費用体系は異なるので使用する際に確認する必要あり。

## 所感

翻訳アプリの肝である翻訳サービス。
正直な話、英語ネイティブでも無いので翻訳結果が正しいか確信は持てないですが、どのサービスも理解出来る程度には翻訳出来ていると思います。なので各サービスを試してみて作るものにマッチするサービスを選択する必要があると思います。
いくつかの日本語例文を英語に翻訳した結果を載せておきます。

`この国はかつて3つの国に分かれていました。いまは1つの国です。`
GCP
`This country was once divided into three countries. It is one country now.`
Azure
`This country was once divided into three countries. It is one country now.`
Watson
`This country was once divided into three countries.one country now.`

`いくら日本語を勉強しても、話せるようにならないんです。どうしたらいいですか。`
GCP
`No matter how much I study Japanese, I can not speak. What should I do.`
Azure
`No matter how much you study Japanese, you won't be able to speak it. What should I do?`
Watson
`How much studying, I can't speak Japanese.How do I?`

`彼は市のカラオケ大会で優勝したことがある。ちなみに、その時の参加人数は103人だった。`
GCP
`He has won the city karaoke competition. By the way, the number of participants was 103 at that time.`
Azure
`He has won the karaoke tournament in the city. By the way, the number of participants at that time was 103 people.`
Watson
`He has had won the karaoke contest in the city.Incidentally, the number of participants at the time was 103.`

# Text To Speech(TTS) サービス

テキスト渡すと読み上げた音声データを返してくれるサービス。

対象のサービスは以下の通り。

- GCP Cloud Text-to-Speech
- Azure Bing Speech API ※STTとサービス名は一緒です。正直紛らわしいｗ
- Watson Text to Speech

## GCP Cloud Text-to-Speech

- 12の国と地域に対応
- 読み上げボイスの数は32
- 最新の情報は[Supported voices](https://cloud.google.com/text-to-speech/docs/voices)を参照。
- Googleアシスタントなどにも使用されている、より自然な[WaveNetモデル](https://cloud.google.com/text-to-speech/docs/wavenet)を使用した読み上げも出来る。※今のところ米国英語のみ
- 費用はWaveNetボイスを使用した場合、月100万文字までは無料。100万文字超えた場合100万文字につき16USドル。
- WaveNetボイス以外を使用した場合、月400万文字までは無料。100万文字超えた場合400万文字につき4USドル。
- 詳しくは[Pricing](https://cloud.google.com/text-to-speech/pricing)を参照。
- 2018年03月27日にベータ版が公開されたばかりのサービスのため、仕様や費用については変わっていく可能性が大きいです。※特にGAしたら無料分の枠は無くなるか小さくなるかと。

## Azure Bing Speech API

- 48の国と地域に対応
- 読み上げボイスの数は75
- 最新の情報は[Supported locales and voice fonts](https://docs.microsoft.com/en-us/azure/cognitive-services/speech/api-reference-rest/bingvoiceoutput#SupLocales)を参照。
- 費用は1000トランザクションにつき4USドル。1トランザクションは1024文字までの文字を音声にすることが出来る。
- 月5000トランザクションまで無料のFreeプランも用意されている。※1つのAzureサブスクリプション辺り1つのみ。
- 詳しくは[価格](https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/speech-api/)を参照。

## Watson Text to Speech

- 10の国と地域に対応
- 読み上げボイスの数は14
- 最新の情報は[Supported voices](https://console.bluemix.net/docs/services/text-to-speech/http.html#languageVoices)を参照。
- 費用は最初の100万文字まで無料、25万文字超えた場合1000文字につき0.02USドル。
- 月1万文字まで無料のライト・プランも用意されている。※ライト・プランごとにインスタンスは1つのみ

## 所感

どのサービスも読み上げについては違和感無いものになっていると思います。
しかしGCP Cloud Text-to-SpeechのWaveNetボイスは頭1つ抜けていると感じるくらいに自然でした。
今のところ米国英語のみの対応なのでその他の言語にも対応するのが楽しみです。
Azureは他のサービスより多くの国や地域に対応しているのが魅力です。

# 終わりに

この後、実装もしているのですが取りあえずは調べたことをまとめました。
それぞれ特徴があるので利用する際に比較していくのがいいと感じました。

実装などは次に書く予定です。