Create an API Key

進行状況を確認

/ 25

Create a request to Classify a news article

進行状況を確認

/ 25

Check the Entity Analysis response

進行状況を確認

/ 25

Create a new Dataset and table for categorized text data

進行状況を確認

/ 25

このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。

GSP063

Google Cloud セルフペース ラボ

概要

Cloud Natural Language API を使用すると、テキストからエンティティを抽出して感情分析や構文解析を行い、分析したテキストをカテゴリに分類できます。このラボでは、テキストの分類に注目します。700 以上のカテゴリが登録されたデータベースを使用するこの API 機能により、大規模なテキスト データセットの分類が容易になります。

目標

このラボでは、次の方法について学びます。

  • Natural Language API(NL API)リクエストを作成し、curl で API を呼び出す
  • Natural Language API のテキスト分類機能を使用する
  • テキスト分類機能を使ってニュース記事のデータセットに関する理解を深める

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 右側の [ラボの設定とアクセス] パネルには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • このラボで使用する一時的な認証情報(ユーザー名とパスワード)
    • このラボを行うために必要なその他の情報(ある場合)

    ラボのタイマーはページの上部に表示され、残り時間が示されます。

  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示された場合は、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの設定とアクセス] パネルでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの設定とアクセス] パネルでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで指定された認証情報を使用する必要があります。ご自身の Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後のページはクリックして先に進みます。

    • 利用規約に同意します。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

しばらくすると、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニューのアイコンと検索フィールド

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. Cloud Natural Language API を有効にする

  1. 画面左上のナビゲーション メニューナビゲーション メニュー アイコン)を展開します。

  2. [API とサービス] > [有効な API とサービス] を選択します。

  1. [API とサービスの有効化] をクリックします。
  1. 次に、検索ボックスで「language」を検索します。

  2. [Cloud Natural Language API] をクリックします。

API が有効になっていない場合は、[有効にする] ボタンが表示されます。

  1. [有効にする] をクリックして、Cloud Natural Language API を有効にします。

API が有効になると、次のような API の情報が表示されます。

API の詳細([管理] と [この API を試す] という 2 つのボタンと、[API が有効] チェックマークを含む)

タスク 2. API キーを作成する

curl を使用して Natural Language API にリクエストを送信するため、リクエスト URL に含める API キーを生成する必要があります。

  1. API キーを作成するには、コンソールで、ナビゲーション メニュー > [API とサービス] > [認証情報] をクリックします。

  2. [認証情報を作成] をクリックします。

  3. プルダウン メニューで [API キー] を選択します。

  4. 次に、生成したキーをコピーして [閉じる] をクリックします。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

API キーを作成する

API キーが準備できたので、リクエストのたびに API キーの値を挿入しなくて済むよう、環境変数としてキーを保存します。

この後のステップを実行するために、プロビジョニングされているインスタンスに SSH で接続してください。

  1. ナビゲーション メニューを開き、[Compute Engine] > [VM インスタンス] を選択します。プロビジョニングされた linux-instance が表示されます。
  1. [SSH] ボタンをクリックします。インタラクティブ シェルが表示されます。

  2. コマンドラインで以下のコマンドを入力します。<YOUR_API_KEY> の部分は、先ほどコピーしたキーに置き換えてください。

export API_KEY=<YOUR_API_KEY>

タスク 3. ニュース記事を分類する

Natural Language API の classifyText メソッドを使用すると、1 つの API 呼び出しでテキストデータをカテゴリに分類できます。このメソッドは、テキスト ドキュメントに適用されるコンテンツ カテゴリのリストを返します。

返されるカテゴリの具体性には幅があり、/Computers & Electronics のように大まかなカテゴリもあれば、/Computers & Electronics/Programming/Java (Programming Language) のように非常に具体的なカテゴリもあります。700 以上あるカテゴリ候補の全リストはコンテンツ カテゴリ ページでご確認ください。

ここでは、最初に 1 つの記事を分類し、同じ手法で大規模なニュース コーパスを整理していく方法について説明します。

  1. 取り上げるのは、The New York Times の料理セクションの記事にあった、次の見出しと説明です。

A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes.(タパス風スモーキー ロブスター サラダ。スペイン料理「タコのガリシア風」をヒントにしたこの一品には、タコは使いませんが、岩塩、オリーブオイル、ピメントン、ゆでたジャガイモを使います。)

  1. request.json という名前のファイルを作成し、以下のコードを追加します。お好みのコマンドライン エディタ(nano、vim、emacs)を使用してファイルを作成してもかまいません。
{ "document":{ "type":"PLAIN_TEXT", "content":"A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes." } } ニュース記事を分類するリクエストを作成する
  1. このテキストを、次の curl コマンドを使って Natural Language API の classifyText メソッドに送信します。
curl "https://language.googleapis.com/v1/documents:classifyText?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json

レスポンスを確認します。

{ categories: [ { name: '/Food & Drink/Cooking & Recipes', confidence: 0.85 }, { name: '/Food & Drink/Food/Meat & Seafood', confidence: 0.63 } ] }

Speech API のリクエストを作成し、Speech API を呼び出すことができました。

  1. 次のコマンドを実行して result.json ファイルにレスポンスを保存します。
curl "https://language.googleapis.com/v1/documents:classifyText?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json > result.json エンティティ分析のレスポンスを確認する

このテキストに対し、次の 2 つのカテゴリが API から返されます。

  • /Food & Drink/Cooking & Recipes
  • /Food & Drink/Food/Meat & Seafood

テキストには、これがレシピであることもシーフードが含まれることもはっきりとは書かれていませんが、この API を使えば分類できます。1 つの記事の分類からもこの機能の優れた点がわかりますが、本当の利点は、次のように大規模なテキストデータを扱うことで見えてきます。

タスク 4: 大規模なテキスト データセットを分類する

BBC のニュース記事を集めたこちらの一般公開データセットを題材に、大量のテキストを含むデータセットを classifyText メソッドを使ってわかりやすく整理していきましょう。このデータセットには、2004 年から 2005 年までの 5 つの分野(ビジネス、エンターテイメント、政治、スポーツ、テクノロジー)の記事が 2,225 件含まれています。これらの記事の一部が、一般公開されている Cloud Storage バケットの中にあります。記事は 1 件ずつ 1 つの .txt ファイルになっています。

データを調べて Natural Language API に送信するために、Cloud Storage から各テキスト ファイルを読み取り、classifyText エンドポイントに送信し、その結果を BigQuery テーブルに保存する Python スクリプトを作成します。BigQuery は、大規模なデータセットの保存や分析を容易にする Google Cloud のビッグデータ ウェアハウス ツールです。

  • 作業するテキストの種類を確認するため、次のコマンドを実行して 1 つの記事を表示してみます(gsutil は Cloud Storage のコマンドライン インターフェースです)。
gsutil cat gs://spls/gsp063/bbc_dataset/entertainment/001.txt

次に、データを保存する BigQuery テーブルを作成します。

タスク 5. 分類したテキストデータ用の BigQuery テーブルを作成する

Natural Language API にテキストを送信する前に、各記事のテキストとカテゴリの保存場所を用意する必要があります。

  1. コンソールのナビゲーション メニュー > [BigQuery] に移動します。

  2. [完了] をクリックします。

  3. データセットを作成するには、プロジェクト ID の横にある [アクションを表示] アイコンをクリックし、[データセットを作成] を選択します。

[データセットを作成] がハイライト表示された [アクションを表示] メニュー

  1. データセットの名前を「news_classification_dataset」にして、[データセットを作成] をクリックします。

  2. テーブルを作成するには、news_classification_dataset の横にある [アクションを表示] アイコンをクリックして、[テーブルを作成] を選択します。

  1. 以下の設定で新しいテーブルを作成します。

    • テーブルの作成元: 空のテーブル
    • テーブル名: article_data
  2. [スキーマ] で、[フィールドを追加] をクリックして、次の 3 つのフィールドを追加します。

フィールド名 種類 モード
article_text STRING NULLABLE
category STRING NULLABLE
confidence FLOAT NULLABLE

[テーブルを作成] ページの [スキーマ] セクション内のフィールド リスト(article-text、category、confidence を含む)

  1. [テーブルを作成] をクリックします。

現在、テーブルは空の状態です。次のステップで、Cloud Storage から記事を読み取り、それを Natural Language API に送信して分類し、結果を BigQuery に保存していきます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

分類したテキストデータ用の新しいデータセットとテーブルを作成する

タスク 6. ニュースデータを分類して結果を BigQuery に保存する

この後のステップを実行するために、Cloud Shell に接続してください。プロンプトが表示されたら、[続行] をクリックします。

ニュースデータを Natural Language API に送信するスクリプトを作成する前に、サービス アカウントを作成する必要があります。このアカウントは、Python スクリプトから Natural Language API と BigQuery に対して認証を行う際に使用されます。

  1. プロジェクト ID を環境変数としてエクスポートします。
export PROJECT={{{project_0.project_id | Project ID}}}
  1. 次のコマンドを実行して、サービス アカウントを作成します。
gcloud iam service-accounts create my-account --display-name my-account gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:my-account@$PROJECT.iam.gserviceaccount.com --role=roles/bigquery.admin gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:my-account@$PROJECT.iam.gserviceaccount.com --role=roles/serviceusage.serviceUsageConsumer gcloud iam service-accounts keys create key.json --iam-account=my-account@$PROJECT.iam.gserviceaccount.com export GOOGLE_APPLICATION_CREDENTIALS=key.json

これで、Natural Language API にテキストデータを送信する準備が整いました。

  1. Google Cloud 用の Python モジュールを使用して Python スクリプトを作成します。

さまざまなクラウド クライアント ライブラリが存在し、どの言語でも同じことができます。

  1. classify-text.py という名前のファイルを作成し、ファイルの中に次のコードをコピーします。お好みのコマンドライン エディタ(nano、vim、emacs)を使用してファイルを作成してもかまいません。
from google.cloud import storage, language, bigquery # GCS、NL、BigQuery クライアントを設定する storage_client = storage.Client() nl_client = language.LanguageServiceClient() bq_client = bigquery.Client(project='{{{project_0.project_id | Project ID}}}') dataset_ref = bq_client.dataset('news_classification_dataset') dataset = bigquery.Dataset(dataset_ref) table_ref = dataset.table('article_data') table = bq_client.get_table(table_ref) # 記事テキストを NL API の classifyText メソッドに送信する def classify_text(article): response = nl_client.classify_text( document=language.Document( content=article, type=language.Document.Type.PLAIN_TEXT ) ) return response rows_for_bq = [] files = storage_client.bucket('qwiklabs-test-bucket-gsp063').list_blobs() print("Got article files from GCS, sending them to the NL API (this will take ~2 minutes)...") # ファイルを NL API に送信し、結果を保存して BigQuery に送信する for file in files: if file.name.endswith('txt'): article_text = file.download_as_bytes().decode('utf-8') # Decode bytes to string nl_response = classify_text(article_text) if len(nl_response.categories) > 0: rows_for_bq.append((article_text, nl_response.categories[0].name, nl_response.categories[0].confidence)) print("Writing NL API article data to BigQuery...") # 記事テキストとカテゴリデータを BQ に書き込む if rows_for_bq: errors = bq_client.insert_rows(table, rows_for_bq) if errors: print("Encountered errors while writing to BigQuery:", errors) else: print("No articles found in the specified bucket.")

これで、記事を分類して BigQuery にインポートする準備が整いました。

  1. 次のスクリプトを実行します。
python3 classify-text.py

スクリプトが完了するまで 2 分ほどかかりますので、その間に処理内容について説明します。

現在、Google Cloud の Python クライアント ライブラリを使用して、Cloud Storage、Natural Language API、BigQuery にアクセスしています。まず、サービスごとにクライアントが作成され、BigQuery テーブルへの参照が作成されます。一般公開されているバケットに含まれる各 BBC データセット ファイルへの参照は、files です。ファイルが確認され、記事が文字列としてダウンロードされます。それぞれの記事は、classify_text 関数の Natural Language API に送信されます。Natural Language API からカテゴリが返されたすべての記事について、記事とそのカテゴリデータが rows_for_bq リストに保存されます。各記事の分類が完了すると、insert_rows() によって BigQuery にデータが挿入されます。

注: 1 つのドキュメントに対して Natural Language API から複数のカテゴリが返されることがありますが、このラボでは話をシンプルにするため、返された最初のカテゴリのみ保存すれば問題ありません。

スクリプトの実行が完了したら、記事データが BigQuery に保存されたことを確認します。

  1. BigQuery の [エクスプローラ] タブで article_data テーブルに移動して、[クエリ] をクリックし、テーブルに対してクエリを実行します。

[新しいタブ] オプションがハイライト表示された [クエリ] プルダウン メニュー

  1. [未保存のクエリ] ボックスの結果を編集し、SELECT と FROM の間にアスタリスクを入れます。
SELECT * FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data`
  1. [実行] をクリックします。

クエリが完了すると、データが表示されます。

  1. 右にスクロールして、カテゴリ列を表示します。

カテゴリ列には、Natural Language API から記事に対して返された最初のカテゴリの名前が含まれており、confidence には、API による記事の分類の信頼度を示す 0〜1 の値が含まれています。

次のステップでは、データに対してより複雑なクエリを実行する方法について説明します。

タスク 7: 分類されたニュースデータを BigQuery で分析する

まず、データセットで最も多かったカテゴリを確認します。

  1. BigQuery コンソールで、[+ SQL クエリ] をクリックします。

  2. 次のクエリを入力します。

SELECT category, COUNT(*) c FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data` GROUP BY category ORDER BY c DESC
  1. [実行] をクリックします。

クエリの結果として、次のような内容が表示されます。

クエリの結果(ここに /News/Politics や /Business & Industrial といった複数のカテゴリが表示されている)

/Arts & Entertainment/Music & Audio/Classical Music のように漠然としたカテゴリが返された記事を見つけたい場合は、次のようなクエリを使用します。

SELECT * FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data` WHERE category = "/Arts & Entertainment/Music & Audio/Classical Music"

また、クエリを次のようにすると、Natural language API から返された信頼スコアが 90% を超えている記事のみを取得することができます。

SELECT article_text, category FROM `{{{project_0.project_id | Project ID}}}.news_classification_dataset.article_data` WHERE cast(confidence as float64) > 0.9

その他のクエリ方法の詳細については、BigQuery のドキュメントをご確認ください。BigQuery は多数の可視化ツールとも統合されています。分類したニュースデータを可視化したい場合は、BigQuery の Data Studio をご参照ください。

お疲れさまでした

このラボでは、Natural Language API のテキスト分類メソッドを使ってニュース記事を分類する方法を学習しました。最初に 1 つの記事を分類する方法を学び、その後、大規模なニュース データセットを NL API で分類して BigQuery で分析する方法を学びました。また、BigQuery テーブルを作成し、データに対してクエリを実行する方法についても学びました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2025 年 3 月 21 日

ラボの最終テスト日: 2025 年 3 月 21 日

Copyright 2026 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボを実行するには、シークレット モードまたはシークレット ブラウジング ウィンドウを使用することをおすすめします。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。

ラボを開始するには、この簡単な手順を完了してください。