Python で Translation API を使用する

1. 概要

1e2217da0416d129.png

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

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

学習内容

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

必要なもの

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

アンケート

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

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

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

初心者 中級者 上級者

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

初心者 中級者 上級者

2. 設定と要件

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.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 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。この Codelab での作業のほとんどは、ブラウザから実行できます。

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 を使用すると、テキストを 1 つの言語から別の言語に翻訳できます。テキストはニューラル機械翻訳(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 汎用ライセンスにより使用許諾されています。