v3を触ってみるTweet自然言語の翻訳APIに興味が出てきたのでちょっと触ってみることにします。ここではすでにテキスト情報になっており、日本語から英語など別の言語に自動的に変換してくれる物を想定しています。Translateサイトよりすでに様々なサービスが世に出ていますが、今回はGoogleの翻訳APIを試してみます。新しいバージョン3(以降v3)ではJava、Python、Node.jsから利用できますが、今回はNode.jsで利用します。参考ページ主要な開発者向け翻訳サービス現在API形式で提供されており、個人でも触れる物は以下でしょうか。※ロシアの検索ポータル法人利用であれば次のような物もあります。詳しくは料金ページに記載してありますが、ざっくり言うとv2はすべて有料、無料枠を使いたいならβ版のv3を利用する必要があります。万文字いずれも1ヶ月間の料金です。100万文字に達しない場合、例えば10万文字使った場合は$2が請求されます。無料にはなりませんのでご注意を。1文字あたりの単価は0.0022円(12月1日時点)となります。注意点としてv3には翻訳モードがPBMT、NMT、AutoMLの3種類ありPBMTを利用する場合はv2と同様の課金がされます。...v2とv3のどちらを使っても個人がお試しで使う分にはよほどヤンチャなことをしなければ無料の範囲内か、料金を支払う場合でもコーヒー1杯分にもならないでしょう。v2とv3の違いv3には様々な新機能が追加されているようです。固有名詞などを予め登録しておくことが出来る。「一括リクエスト」が追加。大量の文章をバッチ処理で翻訳。「AutoMLモデル」が追加。機械学習で独自に作成したモデルを利用可能に。「IAM役割」はAWSでいうIAMとロールみたいな物ですね。呼び出し方が変わっていることを考えると、将来的に確実に移行する日がやってくるでしょうから、今回はv3で試してみたいと思います。下位互換してくれるなら良いのですがいずれかのタイミングで廃止でしょうかね。APIを試してみるクイックスタートの内容に沿って実行してみます。Googleアカウントを作成、GCPへの登録は事前に済ませています。今回はお試しですが、課金が行える状態にしておく必要があります。クレジットカード情報も事前に登録してあります。Node.jsを利用しますので、事前にインストールしておいてください。プロジェクトの作成GCPにお試し用のプロジェクトを作成します。先ほどのクイックスタートのページにある「プロジェクトをセットアップする」ボタンをクリックします。(GCPのコンソールからでも行なえます)プロジェクト選択画面になりますので、既存のプロジェクトを選択するか、新しいプロジェクト名を入力し「NEXT」ボタンをクリック。課金の設定が必要だと言われました。文中のリンクをクリックすると新しいウィンドウが開き設定画面が表示されます。今回はすでに設定済みだったので、ボタンを押すだけ。方はこのタイミングで行ってください。完了したらウィンドウを閉じて先ほどの画面に戻ります。先ほどのウィンドウです。「CONTINUE」ボタンをクリック。このあと利用する「プライベートキー」が記載されたファイルをダウンロードするよう促されますので、ボタンをクリックして保存します。環境変数の設定GOOGLE_APPLICATION_CREDENTIALSという名前の環境変数を作成し、先ほどダウンロードしたファイルのパスを設定します。今回は一時的に利用するだけなので、Terminalに直接コマンドを打ちました。今後も引き続き利用する場合には.bashrcや.bash_profileなどに記載します。あ、ここでは横着しましたが基本的に絶対パスで書いてくださいね。GOOGLE_APPLICATION_CREDENTIALS=~/test-translate-katsube.jsonprintenvなどで念の為確認を。GOOGLEGOOGLE_APPLICATION_CREDENTIALS=/Users/katsube/test-translate-katsube.jsonNode側を準備まずはプロジェクトの準備をします。initの選択肢はすべてエンターでOKです。package.jsonが生成されたか確認をしておきます。Translateのモジュールをインストールします。@google-cloud/translateサンプルコードを試してみる...がエラーになる掲載されていたサンプルほぼそのままです。これで日本語で入力された内容を英語で返してくれるハズ。'こんにちは!今日も良い天気ですね。以降はサンプルコードのままで動作します。code.クイックスタートには掲載されてないのですが、エラー内容から鑑みるにIAMの設定が必要みたいですねwサービスアカウントにIAM役割を付与するプロジェクトを作成した際に「サービスアカウント」と呼ばれるプログラムをGCP上で動作させる専用のアカウントが自動的に作成されています。JSONファイルをダウンロードしたと思いますが、あの中身はこのサービスアカウントの認証情報というわけです。デフォルトだとこのサービスアカウントに権限が一切付与されていないため、先ほど実行したら弾かれてしまったということのようです。はい、というわけでドキュメントの内容に従って、サービスアカウントさんに権限を付与していきます。今回はWebの管理画面(コンソール)からサクッといきます。GCPのコンソールにログインし、プロジェクトを選択したら左側のメニューから「IAMと管理」→「アービスアカウント」とたどります。サービスアカウントの一覧が表示されるので「メールアドレス」の部分をクリップボードへコピーします。このメールアドレスはGoogleが機械的に作成した物です。左メニューの「IAM」をクリックし、ユーザー一覧を表示します。上部にある「追加」ボタンをクリック。先ほどのサービスアカウントのメールアドレスをペーストし、権限(役割)を選択します。ここでは「CloudTranslationAPIユーザー」を選択。最後に「保存」ボタンをクリック。先ほどのユーザー一覧にサービスアカウントが加わっていれば成功です。today.キタ━(゚∀゚)━!翻訳モデル3つの翻訳モデルv3では次の3つの翻訳モデルから1つを選び処理にかけることができます。(状況によっては)高い※詳しくは公式ドキュメントをご覧ください。翻訳モデルが未指定の場合、デフォルトでNMTモデルが利用されます。機械的に翻訳にかけたいといった場合には何もする必要はありませんが、何らかの事情でPBMTを利用する場合は指定を行う必要があります。NMTは50万文字まで無料ですが、PBMTを利用するとすべて有料となります。翻訳モデルを指定する先ほどのコードを書き換えて実行します。冒頭の変数を定義してい箇所にmodelIdを追加、値がbaseであればPBMT、nmtならNMTになります。'こんにちは!今日も良い天気ですね。base:PBMT連想配列requestにmodelの項目を追加します。};NMTとPBMTを比較するではこの2つの翻訳モデルにどの程度の差があるのか比較してみたいと思います。サンプルとして使うのは、ジョブスの伝説的なスタンフォード大学の卒業式のスピーチの一部分を英語から日本語に翻訳してみます。誰の仕業だw閑話休題。dots」の箇所にしました。これに影響された人多いのでは。life.※日本経済新聞「ハングリーであれ。愚か者であれ」ジョブズ氏スピーチ全訳」より日経新聞での日本語訳は以下の通りです。繰り返しですが、将来をあらかじめ見据えて、点と点をつなぎあわせることなどできません。できるのは、後からつなぎ合わせることだけです。我々はいまやっていることがいずれ人生のどこかでつながって実を結ぶだろうと信じるしかない。運命、カルマ...、何にせよ我々は何かを信じないとやっていけないのです。私はこのやり方で後悔したことはありません。愚か者であれ」ジョブズ氏スピーチ全訳より翻訳者の方の名前の記載がないのですが、おそらく生きた人間が訳されていると思われます。昔ながらの機械翻訳を感じますねwここでも、あなたは楽しみにしてドットを接続することはできません。あなただけ後方探してそれらを接続することができます。ドットは何とか自分の将来に接続することを信頼する必要がありますので。あなたは何かに信頼する必要があります。このアプローチは、私を失望させたことがない、それは私の生活の中ですべての違いをしました。大雑把な意味は十分伝わってきますね。言っても所々怪しいですがw繰り返しになりますが、将来のドットを接続することはできません。後ろ向きにしか接続できません。そのため、将来的にドットが何らかの形でつながることを信頼する必要があります。あなたは何かに信頼しなければなりません-あなたの腸、運命、人生、カルマ、何でも。このアプローチは決して私を失望させたことがなく、私の人生に大きな違いをもたらしました。gutじゃなくてgetなのかな?英語に詳しい方教えてくださいwHTMLをまるっと翻訳する長くなったので別の記事にしました。APIの基本的な利用方法をまとめましたが、このAPIは一般的な文章だけではなく、HTMLを渡すと良い感じに翻訳してくれる機能が備わっています。今回はHTMLを渡したときの挙動について調べてみたいと思います。HTMLをまるっと自動翻訳...ねこの足跡Rちょっと罠があるので注意が必要ですが、mimeTypeをtext/htmlにしてHTMLをそのまま渡すだけで非常にお手軽です。訳した文章をWeb上に公開することもライセンス的に問題無いようですが、その場合にはライセンス表示が必要となるようです。詳細は公式ドキュメントを参照ください。言うと要件としては次の4つ。検索エンジンに登録されるページの場合は特定のタグを追加ロゴとリンクロゴ画像は以下からダウンロードできます。https://cloud.google.com/translate/images/google-translate-attribution.zip?hl=jaこのロゴ画像のリンク先は以下のURL固定だそうです。次の項目の掲載は必須のようです。より提供される翻訳が含まれる場合があります。明示的か黙示的かを問わず、翻訳に関するすべての保証(精度、信頼性に関するあらゆる保証、および商品性、特定目的への適合性、第三者の権利の非侵害性に関するあらゆる黙示的保証を含みます)を放棄します。必要に応じて以下の追記も可能とのこと。こちらは法律家に相談し改変してもOKのようです。翻訳が提供する翻訳ソフトウェアを使用して翻訳されています。正確な翻訳を提供できるよう相応の努力を尽くしておりますが、機械翻訳は完璧ではなく、また機械翻訳は人間による翻訳の代わりになることを目的としたものではありません。翻訳は、<会社名>のウェブサイトのユーザーへのサービスとして提供されるものであり、「現状有姿で」提供されます。<原文の言語>から別の言語への翻訳の精度、信頼性または正確性に関して、明示的か黙示的かを問わず、いかなる種類の保証も行われません。画像、動画、Flash)は正確に翻訳されない場合があります。正式なテキストは、ウェブサイトの<原文の言語>バージョンです。翻訳に生じる矛盾または差異には、準拠または実施について拘束力はなく、いかなる法的効力もありません。翻訳されたウェブサイトに含まれる情報の精度に関してご不明な点がありましたら、正式なバージョンである<原文の言語>バージョンをご覧ください。最後にGoogleなどの検索エンジンが翻訳した文章であること、翻訳元のURLを参照出来るようにする必要があるようです。詳しくは公式ドキュメントを参照してください。一部だけを機械翻訳した場合はその箇所にlang属性で印を付けてあげます。lang属性で指定する値の書式は(翻訳後の言語)-x-mtfrom-(翻訳元の言語)となり、ここでは日本語から英語に機械翻訳したしたことを意味します。翻訳したページのhtmlタグのlang属性と、headタグ内にlinkタグを追加します。href="http://example.com/nekodearu"></head>htmlタグlang属性は(翻訳後の言語)-x-mtfrom-(翻訳元の言語)linkタグrel属性は機械翻訳されたページであることを意味しますhreflang属性は翻訳元の言語href属性は翻訳元ページのURLその他トラブルシューティングアカウント情報が見つからない以下のエラーが出る場合は、冒頭でご紹介した環境変数GOOGLE_APPLICATION_CREDENTIALSの設定がうまく行ってないか、そもそも実行していない可能性があります。.bashrcなどに書かずCLIで直接exportコマンドを実行した場合はTerminalを起動する度に打ち直す必要があります。https://cloud.google.com/docs/authentication/getting-started以下のように必ず絶対パスで指定してください。GOOGLE_APPLICATION_CREDENTIALS=/home/katsube/test-translate-katsube-1234567890.json課金設定が正しくない何度かAPI叩いていると突然以下のようなエラーが。クレジットカードの情報が古くすでに解約した物が登録されていました。与信が通らなかったので弾かれたっぽいです。'project_number:1234567890'.というわけで新しいクレカに更新したら無事解決。開始ボタンを押してないどうもGCPではWebの管理画面上で「開始」ボタンを押さないと利用することができない場合があるようです。(3)というわけで、左側のメニューをひたすら下の方にスクロールしていき、「翻訳」からの「ダッシュボード」をクリック。「APIを有効化する」をクリックしてしばらく待てば完了です。自宅警備がてらゲームのお仕事や講師などしてご飯を食べてます。ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。コメントデータの処理方法の詳細はこちらをご覧ください。ブログをメールで購読メールアドレスを記入して購読すれば、更新をメールで受信できます。