arrow_back

Natural Language API を使用してテキストをカテゴリに分類する

参加 ログイン

Natural Language API を使用してテキストをカテゴリに分類する

1時間 クレジット: 5

GSP063

Google Cloud セルフペース ラボ

概要

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

演習内容

  • Natural Language API リクエストを作成し、curl で API を呼び出す

  • NL API のテキスト分類機能を使用する

  • テキスト分類を使用してニュース記事のデータセットを理解する

設定と要件

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

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

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

必要なもの

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

  • 標準的なインターネット ブラウザ(Chrome を推奨)
  • ラボを完了するために十分な時間

注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。

注: Chrome OS デバイスを使用している場合は、シークレット ウィンドウを開いてこのラボを実行してください。

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

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

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

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

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

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Google Cloud Shell の有効化

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

GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

Cloud Shell アイコン

[続行] をクリックします。

cloudshell_continue

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:

Cloud Shell 端末

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

次のコマンドを使用すると、有効なアカウント名を一覧表示できます。

gcloud auth list

出力:

ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
	

次のコマンドを使用すると、プロジェクト ID を一覧表示できます。

gcloud config list project
	

出力:

[core]
project = <project_ID>
	

出力例:

[core]
project = qwiklabs-gcp-44776a13dea667a6
	

タスク 1。Cloud Natural Language API が有効になっていることを確認する

  1. 画面の左上にあるメニュー アイコンをクリックします。
  2. [API とサービス] > [ダッシュボード] を選択します。
  3. 7f3779282bb1a7d6.png

  4. [API とサービスの有効化] をクリックします。
  5. ff3e9c20f016db94.png

  6. 検索ボックスで「language」を検索します。
  7. Cloud Natural Language API をクリックします。
  8. d9c1c3eb2f87ab22.png

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

  9. [有効にする] をクリックして、Cloud Natural Language API を有効にします。
  10. 3da7b549ac00abc8.png

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

    212b673b48d92677.png

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

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

  1. API キーを作成するには、コンソールで [ドロップダウン メニュー] > [API とサービス] > [認証情報] をクリックします。
  2. [認証情報を作成] をクリックします。
  3. プルダウン メニューで [API キー] を選択します。
  4. 生成された API キーをコピーし、[閉じる] をクリックします。

[進捗状況の確認]をクリックして、目的を確認します。

API キーを作成する

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

次の手順を実行するには、SSH 経由でプロビジョニングされたインスタンスに接続してください。

  1. ナビゲーション メニューを開き、[Compute Engine] > [VM インスタンス] を選択します。次のような、プロビジョニングされた Linux インスタンスが表示されます。
  2. provisioned-linux-instance.png

  3. SSH ボタンををクリックします。対話型シェルに起動します。
  4. コマンドラインで次のコマンドで <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 の料理セクションの記事にあった、次の見出しと説明です。
  2. 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.(タパスをアレンジしたスモーキー ロブスター サラダ。スペイン料理、プルポ・ア・ラ・ガジェガ(ガリシア風タコ)をヒントにしたこの一品にはタコを使いませんが、岩塩、オリーブ オイル、ピメントン、ゆでジャガイモは使います。)

  3. 以下のコードで request.json ファイルを作成します。お好みのコマンドライン エディタ(nano、vim、emacs)のいずれかを使用してファイルの作成ができます。
  4. {
      "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."
      }
    }
    
    ニュース記事を分類するためにリクエストを作成する
  5. このテキストは、次の curl コマンドを使って Natural Language API の classifyText メソッドに送信できます。
  6. 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 を呼び出しました。

  7. 次のコマンドを実行して、応答を 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。大規模なテキスト データセットを分類する

classifyText メソッドを使用すると大量のテキストを含むデータセットの理解ができるようになることを確認するために、BBC のニュース記事を集めたこちらの一般公開データセットを使用します。このデータセットには、2004 年から 2005 年までの間に書かれた 5 つの分野(ビジネス、エンターテインメント、政治、スポーツ、技術)の記事が 2,225 件含まれています。一般公開されている Google 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. Console で [ナビゲーション メニュー] > [BigQuery] に移動します。
  2. [完了] をクリックします。
  3. データセットを作成するには、プロジェクト ID の横にある [アクションを表示] アイコンをクリックし、[データセットの作成] を選択します。
  4. create_dataset.png

  5. データセットに news_classification_dataset という名前を付けます。次に、[データセットの作成] をクリックします。
  6. 表を作成するには、news_classification_dataset の横にある View actions アイコンをクリックし、[Create Table] を選択します。
  7. create_table11.png

  8. 新しいテーブルに次の設定を使用します。
  • テーブルの作成元: 空のテーブル
  • テーブル名に article_data を入力します。
  1. フィールドを追加 をクリックし、次の 3 つのフィールドを追加します:article_text、category、Confidence。
  2. BQ-new-table.png

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

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

[進捗状況の確認]をクリックして、目的を確認します。

テキストデータを分類するには、新しいデータセットとテーブルを作成する

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

次の手順を実行するように、Cloud Shellを接続します。

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

  1. まず Cloud Shell に戻り、Cloud プロジェクトの名前を環境変数としてエクスポートします。
  2. <your_project_name> は、ラボの [CONNECTION DETAILS] セクションに表示される GCP プロジェクト ID に置き換えてください。
  3. export PROJECT=<your_project_name>
    
  4. 次に、Cloud Shell から次のコマンドを実行してサービス アカウントを作成します。
  5. 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 にテキストデータを送信する準備が整いました。

  6. データを送信するために、Google Cloud 用の Python モジュールを使用して Python スクリプトを作成します。
  7. さまざまなクラウド クライアント ライブラリが多数あり、どの言語からでも同じことができます。

  8. classify-text.py という名前のファイルを作成し、ファイルの中に以下をコピーします。お好みのコマンドライン エディタ(nano、vim、emacs)のいずれかを使用してファイルの作成ができます。
  9. from google.cloud import storage, language, bigquery
    # Set up our GCS, NL, and BigQuery clients
    storage_client = storage.Client()
    nl_client = language.LanguageServiceClient()
    # TODO: replace YOUR_PROJECT with your project name below
    bq_client = bigquery.Client(project='YOUR_PROJECT')
    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)
    # Send article text to the NL API's classifyText method
    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)...")
    # Send files to the NL API and save the result to send to BigQuery
    for file in files:
            if file.name.endswith('txt'):
                    article_text = file.download_as_bytes()
                    nl_response = classify_text(article_text)
                    if len(nl_response.categories) > 0:
                            rows_for_bq.append((str(article_text), nl_response.categories[0].name, nl_response.categories[0].confidence))
    print("Writing NL API article data to BigQuery...")
    # Write article text + category data to BQ
    errors = bq_client.insert_rows(table, rows_for_bq)
    assert errors == []
    
  10. YOUR_PROJECTプロジェクト ID に置き換えます。
  11. これで、記事を分類して BigQuery にインポートする準備が整いました。

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

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

    Google では、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 に保存されたことを確認します。

  14. BigQuery で、[Explorer] タブの article_data テーブルに移動し、[クエリ] > [新しいタブ] をクリックしてテーブルにクエリを実行します。
  15. Query_Table.png

  16. [未保存のクエリ] ボックスで結果を編集し、SELECT と FROM の間にアスタリスクを追加します。
  17. SELECT * FROM `YOUR_PROJECT.news_classification_dataset.article_data`
    
  18. [実行] をクリックします。

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

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

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

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

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

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

  1. BigQuery コンソールで [クエリを新規作成] をクリックします。
  2. 次のクエリを入力します(YOUR_PROJECT は各自のプロジェクト名に置き換えてください)。
  3. SELECT
      category,
      COUNT(*) c
    FROM
      `YOUR_PROJECT.news_classification_dataset.article_data`
    GROUP BY
      category
    ORDER BY
      c DESC
    
  4. [実行] をクリックします。

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

BQ_query_results.png

/Arts & Entertainment/Music & Audio/Classical Music のように漠然としたカテゴリが返された記事を検索する場合は、次のクエリを作成することもできます。

SELECT * FROM `YOUR_PROJECT.news_classification_dataset.article_data`
WHERE category = "/Arts & Entertainment/Music & Audio/Classical Music"

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

SELECT
  article_text,
  category
FROM `YOUR_PROJECT.news_classification_dataset.article_data`
WHERE cast(confidence as float64) > 0.9

データに対してその他のクエリを実行する場合は、BigQuery のドキュメントを参照してください。BigQuery は多数の可視化ツールとも統合されています。分類したニュースデータを可視化する場合は、BigQuery のデータスタジオ クイックスタートをご覧ください。

これで完了です。

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

学習した内容

  • Natural Language API classifyText リクエストの作成と curl を使用した API の呼び出し

  • Google Cloud Python モジュールを使用して大規模なニュース データセットを分析する

  • BigQuery でのデータのインポートと分析

クエストの終了

38616f8aa634e047.png 304e2d6238466ca2.png

このセルフペース ラボは、Qwiklabs のクエスト「Machine Learning API」と「データ エンジニアリング」の一部です。クエストとは学習パスを構成する一連のラボのことで、完了すると成果が認められて上のようなバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、このクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なその他の Qwiklabs のクエストもご覧ください

次のラボの受講

BQML で分類モデルを使用して訪問者の購入を予測する」に進んでクエストを続けるか、以下のおすすめをお試しください。

次のステップ/詳細情報

Google Cloud Training & Certification

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

マニュアルの最終更新日: 2023 年 1 月 19 日
ラボの最終テスト日: 2023 年 1 月 19 日

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