Python で Translation API を使用する

1. 概要

1e2217da0416d129.png

Translation API は、最先端のニューラル機械翻訳を使用して任意の文字列をサポート対象の言語に動的に翻訳するための、シンプルなプログラマティック インターフェースを提供します。原文の言語が不明な場合に言語を検出するためにも使用できます。

このチュートリアルでは、Python で Translation API を使用します。このコンセプトでは、使用可能な言語のリスト表示、テキストの翻訳、特定のテキストの言語の検出の方法について説明します。

学習内容

  • 環境の設定方法
  • 使用可能な言語を一覧表示する方法
  • テキストの翻訳方法
  • 言語を検出する方法

必要なもの

  • Google Cloud プロジェクト
  • ブラウザ(Chrome、Firefox など)
  • Python の使用経験

アンケート

このチュートリアルをどのように使用されますか?

通読のみ 通読して演習を行う

Python のご利用経験はどの程度ありますか?

初心者 中級者 上級者

Google Cloud サービスの使用経験はどの程度ありますか?

初心者 中級者 上級者

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud コンソール にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにする

  1. Cloud Console で、[Cloud Shell をアクティブにする] 853e55310c205094.png をクリックします。

3c1dabeca90e44e5.png

Cloud Shell を初めて起動する場合は、その内容を説明する中間画面が表示されます。中間画面が表示された場合は、[続行] をクリックします。

9c92662c6a846a5c.png

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

9f0e51b578fecce5.png

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボで行う作業のほとんどはブラウザから実行できます。

Cloud Shell に接続すると、認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。

  1. Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list

コマンド出力

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

上記のようになっていない場合は、次のコマンドで設定できます。

gcloud config set project <PROJECT_ID>

コマンド出力

Updated property [core/project].

3. 環境のセットアップ

Translation API の使用を開始する前に、Cloud Shell で次のコマンドを実行して API を有効にします。

gcloud services enable translate.googleapis.com

次のように表示されます。

Operation "operations/..." finished successfully.

これで、Translation API を使用できるようになりました。

次の環境変数を設定します(アプリケーションで使用されます)。

export PROJECT_ID=$(gcloud config get-value core/project)

echo "PROJECT_ID: $PROJECT_ID"

ホーム ディレクトリに移動します。

cd ~

依存関係を分離する Python 仮想環境を作成します。

virtualenv venv-translate

仮想環境をアクティブにします。

source venv-translate/bin/activate

IPython と Translation API クライアント ライブラリをインストールします。

pip install ipython google-cloud-translate

次のように表示されます。

...
Installing collected packages: ..., ipython, google-cloud-translate
Successfully installed ... google-cloud-translate-3.16.0 ...

これで、Translation API クライアント ライブラリを使用する準備が整いました。

次の手順では、前の手順でインストールした IPython というインタラクティブな Python インタープリタを使用します。Cloud Shell で ipython を実行してセッションを開始します。

ipython

次のように表示されます。

Python 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.27.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

次のコードを IPython セッションにコピーします。

from os import environ

from google.cloud import translate


PROJECT_ID = environ.get("PROJECT_ID", "")
assert PROJECT_ID
PARENT = f"projects/{PROJECT_ID}"

これで、最初のリクエストを送信して、サポートされている言語を一覧表示する準備が整いました。

4. 使用可能な言語を一覧表示する

このセクションでは、Translation API で使用可能なすべての言語を一覧表示します。

使用可能な言語を一覧表示するには、次のコードを IPython セッションにコピーします。

def print_supported_languages(display_language_code: str):
    client = translate.TranslationServiceClient()

    response = client.get_supported_languages(
        parent=PARENT,
        display_language_code=display_language_code,
    )

    languages = response.languages
    print(f" Languages: {len(languages)} ".center(60, "-"))
    for language in languages:
        language_code = language.language_code
        display_name = language.display_name
        print(f"{language_code:10}{display_name}")
    

関数を呼び出す

print_supported_languages("en")

次のような結果が表示されます。

---------------------- Languages: 137 ----------------------
af        Afrikaans
sq        Albanian
am        Amharic
ar        Arabic
hy        Armenian
...
cy        Welsh
xh        Xhosa
yi        Yiddish
yo        Yoruba
zu        Zulu

表示言語をフランス語に設定した場合の表示は次のようになります。

print_supported_languages("fr")

次のように、フランス語の名前で並べ替えられた同じリストが表示されます。

---------------------- Languages: 137 ----------------------
af        Afrikaans
sq        Albanais
de        Allemand
am        Amharique
en        Anglais
...
vi        Vietnamien
xh        Xhosa
yi        Yiddish
yo        Yoruba
zu        Zoulou

別の言語コードをお試しください。

概要

この手順では、Translation API で使用可能なすべての言語を一覧表示しました。サポートされている言語の一覧については、言語サポートのページをご覧ください。

5. テキストを翻訳する

Translation API を使用して、テキストをある言語から別の言語に翻訳できます。テキストはニューラル機械翻訳(NMT)モデルを使用して翻訳されます。リクエストした言語の組み合わせが NMT モデルでサポートされていない場合、フレーズベース機械翻訳(PBMT)モデルが使用されます。Google 翻訳とその翻訳モデルの詳細については、NMT のお知らせの投稿をご覧ください。

テキストを翻訳するには、次のコードを IPython セッションにコピーします。

def translate_text(text: str, target_language_code: str) -> translate.Translation:
    client = translate.TranslationServiceClient()

    response = client.translate_text(
        parent=PARENT,
        contents=[text],
        target_language_code=target_language_code,
    )

    return response.translations[0]
    

関数を呼び出して、同じテキストをさまざまな言語に翻訳します。

text = "Hello World!"
target_languages = ["tr", "de", "es", "it", "el", "zh", "ja", "ko"]

print(f" {text} ".center(50, "-"))
for target_language in target_languages:
    translation = translate_text(text, target_language)
    source_language = translation.detected_language_code
    translated_text = translation.translated_text
    print(f"{source_language} → {target_language} : {translated_text}")
    

次のような出力が表示されます。

------------------ Hello World! ------------------
en → tr : Selam Dünya!
en → de : Hallo Welt!
en → es : ¡Hola Mundo!
en → it : Ciao mondo!
en → el : Γεια σου Κόσμο!
en → zh : 你好世界!
en → ja : 「こんにちは世界」
en → ko : 안녕하세요!

概要

このステップでは、Translation API を使用してテキストを複数の言語に翻訳しました。詳しくは、テキストの翻訳をご覧ください。

6. 言語を検出する

Translation API を使用して、テキスト文字列の言語を検出することもできます。

次のコードを IPython セッションにコピーします。

def detect_language(text: str) -> translate.DetectedLanguage:
    client = translate.TranslationServiceClient()

    response = client.detect_language(parent=PARENT, content=text)

    return response.languages[0]
    

関数を呼び出して、さまざまな文の言語を検出します。

sentences = [
    "Selam Dünya!",
    "Hallo Welt!",
    "¡Hola Mundo!",
    "Ciao mondo!",
    "Γεια σου Κόσμο!",
    "你好世界!",
    "「こんにちは世界」",
    "안녕하세요!",
]
for sentence in sentences:
    language = detect_language(sentence)
    confidence = language.confidence
    language_code = language.language_code
    print(
        f"Confidence: {confidence:4.0%}",
        f"Language: {language_code:5}",
        sentence,
        sep=" | ",
    )
    

次のような出力が表示されます。

Confidence: 100% | Language: tr    | Selam Dünya!
Confidence:  81% | Language: de    | Hallo Welt!
Confidence: 100% | Language: es    | ¡Hola Mundo!
Confidence: 100% | Language: it    | Ciao mondo!
Confidence: 100% | Language: el    | Γεια σου Κόσμο!
Confidence: 100% | Language: zh-CN | 你好世界!
Confidence: 100% | Language: ja    | 「こんにちは世界」
Confidence: 100% | Language: ko    | 안녕하세요!

概要

このステップでは、Translation API を使用してテキストの言語を検出しました。詳しくは、言語の検出をご覧ください。

7. 完了

1e2217da0416d129.png

Python を使用して Translation API を使用する方法を学習しました。

クリーンアップ

開発環境をクリーンアップするには、Cloud Shell で次の操作を行います。

  • IPython セッションがまだ開いている場合は、シェルに戻ります。exit
  • Python 仮想環境の使用を停止します。deactivate
  • 仮想環境フォルダ cd ~ ; rm -rf ./venv-translate を削除します。

Google Cloud プロジェクトを削除するには、Cloud Shell で次の操作を行います。

  • 現在のプロジェクト ID を取得します。PROJECT_ID=$(gcloud config get-value core/project)
  • 削除するプロジェクトが echo $PROJECT_ID であることを確認します。
  • プロジェクトを削除します。gcloud projects delete $PROJECT_ID

詳細

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。