ラボの設定手順と要件
アカウントと進行状況を保護します。このラボを実行するには、常にシークレット ブラウジング ウィンドウとラボの認証情報を使用してください。

Natural Language API によるエンティティ感情分析

ラボ 15分 universal_currency_alt クレジット: 5 show_chart 中級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
このコンテンツはまだモバイル デバイス向けに最適化されていません。
快適にご利用いただくには、メールで送信されたリンクを使用して、デスクトップ パソコンでアクセスしてください。

GSP038

Google Cloud セルフペース ラボのロゴ

概要

Cloud Natural Language API を使用すると、テキストからエンティティを抽出して感情分析や構文解析を行い、テキストをカテゴリに分類できます。

このラボでは、Natural Language API を使ってエンティティ、感情、構文を分析する方法について学びます。

目標

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

  • Natural Language API(NL API)リクエストを作成し、curl で API を呼び出す
  • Natural Language API でテキストのエンティティ抽出と感情分析を行う
  • Natural Language 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 のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニュー アイコンと検索フィールド

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

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

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

  2. [認証情報を作成] をクリックし、[API キー] を選択します。

  3. 生成された API キーをコピーし、[閉じる] をクリックします。

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

API キーを作成する

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

  1. ナビゲーション メニューの [Compute Engine] をクリックします。[VM インスタンス] の一覧に、プロビジョニングされた Linux インスタンス、linux-instance が表示されます。

  2. [SSH] ボタンをクリックします。インタラクティブ シェルが表示されます。

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

export API_KEY=<YOUR_API_KEY>

タスク 2. エンティティ分析リクエストを行う

最初に使用する Natural Language API メソッドは、analyzeEntities です。このメソッドを使用すると、API によってテキストからエンティティ(人、場所、イベントなど)が抽出されます。ここでは、次の文を使って Natural Language API のエンティティ分析を試してみます。

Joanne Rowling, who writes under the pen names J. K. Rowling and Robert Galbraith, is a British novelist and screenwriter who wrote the Harry Potter fantasy series.

Natural Language API へのリクエストは、ファイル request.json で構築します。

  1. nano(コードエディタ)を使用してファイル request.json を作成します。
nano request.json
  1. request.json に次のコードを入力するか、コピーして貼り付けます。
{ "document":{ "type":"PLAIN_TEXT", "content":"Joanne Rowling, who writes under the pen names J. K. Rowling and Robert Galbraith, is a British novelist and screenwriter who wrote the Harry Potter fantasy series." }, "encodingType":"UTF8" }
  1. Ctrl+X キーで nano を終了したら、Y キーでファイルを保存し、Enter キーを押して確定します。

このリクエストでは、送信するテキストについての情報を Natural Language API に知らせます。サポートされている型の値は PLAIN_TEXT または HTML です。content には、分析のために Natural Language API に送信するテキストを指定します。

Natural Language API では、Cloud Storage に保存されているファイルをテキスト処理用に送信することもできます。Cloud Storage からファイルを送信する場合は、contentgcsContentUri に置き換えて、Cloud Storage に保存されているテキスト ファイルの URI の値を指定します。

encodingType は、テキストを処理するときに使用するテキスト エンコードの種類を API に指示します。API はこの情報を使って、特定のエンティティがテキストのどこに出現するかを調べます。

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

エンティティ分析リクエストを行う

タスク 3. Natural Language API を呼び出す

  1. 次の curl コマンドを実行して、リクエストの本文を、先ほど保存した API キー環境変数とともに Natural Language API に渡します(コマンドは 1 行で入力してください)。
curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json > result.json
  1. レスポンスを確認するために、次を実行します。
cat result.json

レスポンスの最初の部分は次のようになります。

"content": "Joanne Rowling", "beginOffset": 0 }, "type": "PROPER" }, { "text": { "content": "Rowling", "beginOffset": 53 }, "type": "PROPER" }, { "text": { "content": "novelist", "beginOffset": 96 }, "type": "COMMON" }, { "text": { "content": "Robert Galbraith", "beginOffset": 65 }, "type": "PROPER" } ] }, ... ] }

このレスポンスには、各エンティティの type、ウィキペディアの関連ページの URL(存在する場合)、salience、テキスト内の場所を示すインデックスが含まれています。salience(顕著性)は、[0,1] の範囲の数値です。これは、そのエンティティがテキスト全体でどの程度重要かを表します。

Natural Language API では、同じエンティティの別の表現も認識されます。レスポンスの mentions のリストをご覧ください。​「Joanne Rowling」、「Rowling」、「novelist」、「Robert Galbraith」がすべて同じものを指していることが API で認識されています。​

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

エンティティ分析のレスポンスを確認する

タスク 4. Natural Language API で感情分析を行う

Natural Language API では、エンティティの抽出に加えて、テキスト ブロックの感情分析を行うこともできます。次の JSON リクエストに含まれているパラメータは先ほどのリクエストと同じですが、今回は分析するテキストをより強い感情を含むものに変更します。

  1. nano を使用して request.json のコードを次のように置き換えます。content の部分は独自のテキストに置き換えてもかまいません。
{ "document":{ "type":"PLAIN_TEXT", "content":"Harry Potter is the best book. I think everyone should read it." }, "encodingType": "UTF8" }
  1. Ctrl+X キーで nano を終了したら、Y キーでファイルを保存し、Enter キーを押して確定します。

  2. 次に、このリクエストを API の analyzeSentiment エンドポイントに送信します。

curl "https://language.googleapis.com/v1/documents:analyzeSentiment?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json

レスポンスは次のようになります。

{ "documentSentiment": { "magnitude": 1.9, "score": 0.9 }, "language": "en", "sentences": [ { "text": { "content": "Harry Potter is the best book.", "beginOffset": 0 }, "sentiment": { "magnitude": 0.9, "score": 0.9 } }, { "text": { "content": "I think everyone should read it.", "beginOffset": 31 }, "sentiment": { "magnitude": 0.9, "score": 0.9 } } ] } 注: 実際の score が例の出力と多少異なっていても問題ありません。

sentiment の値が 2 種類あることに注目してください。これは、ドキュメント全体の値と文単位の値です。sentiment メソッドは次の 2 つの値を返します。

  • score - -1.0~1.0 の数値です。その主張がどのくらいポジティブまたはネガティブかを示します。
  • magnitude - 0~無限大の数値です。その主張の中で表現されている感情の重みを表します。感情がポジティブがネガティブかは問いません。

重みの大きい主張を含むテキスト ブロックが長くなるほど magnitude の値が大きくなります。この例では、1 つ目の文の score はポジティブ(0.7)ですが、2 つ目の文の score はニュートラル(0.1)です。

タスク 5. エンティティ感情を分析する

Natural Language API では、テキスト ドキュメント全体の感情だけでなく、テキスト内のエンティティごとの感情を調べることもできます。今度は次の文を例として使用します。

I liked the sushi but the service was terrible.

この場合、先ほどのように文全体の感情スコアを取得してもあまり役に立ちません。これがレストランのレビューで、同じレストランのレビューが何百件もあった場合、求められる情報は、それらのレビューで何が気に入られていて、何が気に入られていないかです。Natural Language API にはこのような場合のために、テキスト内の各エンティティに対する感情を調べられる analyzeEntitySentiment というメソッドが用意されています。さっそく試してみましょう。

  1. nano を使用して request.json を以下のように更新します。
{ "document":{ "type":"PLAIN_TEXT", "content":"I liked the sushi but the service was terrible." }, "encodingType": "UTF8" }
  1. Ctrl+X キーで nano を終了したら、Y キーでファイルを保存し、Enter キーを押して確定します。

  2. 次に、以下の curl コマンドを使用して analyzeEntitySentiment エンドポイントを呼び出します。

curl "https://language.googleapis.com/v1/documents:analyzeEntitySentiment?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json

レスポンスには 2 つのエンティティ オブジェクトが含まれています。1 つは「sushi」、もう 1 つは「service」です。この JSON レスポンス全体は以下のとおりです。

{ "entities": [ { "name": "sushi", "type": "CONSUMER_GOOD", "metadata": {}, "salience": 0.51064336, "mentions": [ { "text": { "content": "sushi", "beginOffset": 12 }, "type": "COMMON", "sentiment": { "magnitude": 0, "score": 0 } } ], "sentiment": { "magnitude": 0, "score": 0 } }, { "name": "service", "type": "OTHER", "metadata": {}, "salience": 0.48935664, "mentions": [ { "text": { "content": "service", "beginOffset": 26 }, "type": "COMMON", "sentiment": { "magnitude": 0.7, "score": -0.7 } } ], "sentiment": { "magnitude": 0.7, "score": -0.7 } } ], "language": "en" }

「sushi」の score はニュートラルの 0 で、「service」の score は -0.7 になっています。分析がうまくいったようです。また、sentiment オブジェクトがエンティティごとに 2 つ返されていますが、これは特定の出現箇所の値と、エンティティ全体の集計値を表しています。これらの言葉が複数回出てきた場合は、それぞれに別の score と magnitude の値が返されます。

注: 実際の score が例の出力と多少異なっていても問題ありません。

タスク 6. 構文と品詞を分析する

Natural Language API のもう 1 つのメソッドである構文解析では、言語学的な観点からテキストをさらに詳しく調べることができます。analyzeSyntax は言語情報を抽出し、指定されたテキストを一連の文とトークン(通常は単語の境界)に分解して、それらのトークンをさらに分析できるようにします。テキスト内の各単語について、その単語の品詞(名詞、動詞、形容詞など)と、文中の他の単語との関係(主動詞か修飾語かなど)を調べることができます。

簡単な文で試してみましょう。次の JSON リクエストは、先ほどのものとよく似ていますが、features キーが追加されています。これにより、構文アノテーションを行うことが API に伝えられます。

  1. nano を使用して request.json を次の内容に置き換えます。
{ "document":{ "type":"PLAIN_TEXT", "content": "Joanne Rowling is a British novelist, screenwriter and film producer." }, "encodingType": "UTF8" }
  1. Ctrl+X キーで nano を終了したら、Y キーでファイルを保存し、Enter キーを押して確定します。

  2. 次に、API の analyzeSyntax メソッドを呼び出します。

curl "https://language.googleapis.com/v1/documents:analyzeSyntax?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json

レスポンスでは、次のようなオブジェクトが文中のトークンごとに返されます。

{ "text": { "content": "is", "beginOffset": 15 }, "partOfSpeech": { "tag": "VERB", "aspect": "ASPECT_UNKNOWN", "case": "CASE_UNKNOWN", "form": "FORM_UNKNOWN", "gender": "GENDER_UNKNOWN", "mood": "INDICATIVE", "number": "SINGULAR", "person": "THIRD", "proper": "PROPER_UNKNOWN", "reciprocity": "RECIPROCITY_UNKNOWN", "tense": "PRESENT", "voice": "VOICE_UNKNOWN" }, "dependencyEdge": { "headTokenIndex": 2, "label": "ROOT" }, "lemma": "be" },

レスポンスを細かく見てみましょう。

  • partOfSpeech は、「Joanne」が名詞であることを示しています。
  • dependencyEdge には、このテキストの係り受け解析ツリーを作成するためのデータが含まれています。係り受け解析ツリーとは、文中の単語が互いにどのように関連しているかを示す図です。たとえば、上の文の係り受け解析ツリーは次のようになります。

係り受け解析ツリー

注: Natural Language AI ガイドの Natural Language のデモを使用すると、ブラウザで独自の係り受け解析ツリーを作成できます。
  • headTokenIndex は、「Joanne」に向かう曲線を持つトークンのインデックスです。文中の各トークンは、配列内の単語と考えることができます。
  • 「Joanne」の headTokenIndex の値 1 は「Rowling」を指しており、「Joanne」は係り受け解析ツリーでこの単語に結び付けられます。label の値 NM(Noun Compound Modifier(複合名詞の修飾子)の略)は「Joanne」の文中の役割を表しており、「Joanne」はこの文の主語である「Rowling」を修飾しています。
  • lemma はその単語の正規形です。たとえば、run、runs、ran、running の lemma はすべて run です。lemma の値は、大きなテキスト ブロックで単語の出現回数の推移を追跡するのに便利です。

タスク 7. 多言語自然言語処理

Natural Language API は英語以外の言語もサポートしています(サポート対象言語の一覧については、言語サポートをご覧ください)。

  1. request.json のコードを次のように変更して、日本語の文で試してみましょう。
{ "document":{ "type":"PLAIN_TEXT", "content":"日本のグーグルのオフィスは、東京の六本木ヒルズにあります" } }
  1. Ctrl+X キーで nano を終了したら、Y キーでファイルを保存し、Enter キーを押して確定します。

テキストの言語を指定していないことに注目してください。言語は API によって自動的に検出されます。

  1. 次に、これを analyzeEntities エンドポイントに送信します。
curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json

次のようなレスポンスが返されます。

{ "entities": [ { "name": "日本", "type": "LOCATION", "metadata": { "mid": "/m/03_3d", "wikipedia_url": "https://en.wikipedia.org/wiki/Japan" }, "salience": 0.23854347, "mentions": [ { "text": { "content": "日本", "beginOffset": 0 }, "type": "PROPER" } ] }, { "name": "グーグル", "type": "ORGANIZATION", "metadata": { "mid": "/m/045c7b", "wikipedia_url": "https://en.wikipedia.org/wiki/Google" }, "salience": 0.21155767, "mentions": [ { "text": { "content": "グーグル", "beginOffset": 9 }, "type": "PROPER" } ] }, ... ] "language": "ja" }

ウィキペディアの URL も日本語版のページになっています。

お疲れさまでした

ここでは、Cloud Natural Language API によるテキスト分析の方法を学ぶために、エンティティ抽出、感情分析、構文アノテーションを行いました。このラボでは、Natural Language API リクエストを作成し、curl で API を呼び出しました。また、Natural Language API を使用してテキストのエンティティ抽出と感情分析を行いました。さらに、テキストの言語分析を行い、別の言語で Natural Language API リクエストを作成しました。

次のステップ

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

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

マニュアルの最終更新日: 2024 年 2 月 14 日

ラボの最終テスト日: 2023 年 10 月 13 日

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

始める前に

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

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

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

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

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

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

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

ありがとうございます。

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

1 回に 1 つのラボ

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

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

Using an Incognito or private browser window is the best way to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.