C# で Natural Language API を使用する

1. 概要

この Codelab では、C# で Natural Language API を使用することに焦点を当てます。感情分析、エンティティ分析、構文解析を行う方法について学習します。

Google Cloud の Natural Language API は、感情分析、エンティティ分析、構文解析などの自然言語理解技術をデベロッパーに提供します。

学習内容

  • Cloud Shell を使用する方法
  • Natural Language API を有効にする方法
  • API リクエストを認証する方法
  • C# 用 Google Cloud クライアント ライブラリをインストールする方法
  • 感情分析を行う方法
  • エンティティ分析を行う方法
  • 構文解析を行う方法

必要なもの

  • Google Cloud Platform プロジェクト
  • ChromeFirefox などのブラウザ
  • C# の使用経験

アンケート

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

通読するのみ 通読し、演習を行う

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

初心者 中級者 上級者

Google Cloud Platform サービスのご利用経験についてどのように評価されますか?

初心者 中級者 上級者

2. 設定と要件

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.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 では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにする

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

cb81e7c8e34bc8d.png

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

d95252b003979716.png

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

7833d5e1c5d18f54.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. Natural Language API を有効にする

Natural Language API を使用する前に、API を有効にする必要があります。Cloud Shell で、次のコマンドを使用して API を有効にできます。

gcloud services enable language.googleapis.com

4. C# 用の Google Cloud Natural Language API クライアント ライブラリをインストールする

まず、Natural Language API サンプルの実行に使用するシンプルな C# コンソール アプリケーションを作成します。

dotnet new console -n NaturalLanguageApiDemo

アプリケーションが作成され、依存関係が解決されたことがわかります。

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

次に、NaturalLanguageApiDemo フォルダに移動します。

cd NaturalLanguageApiDemo/

また、Google.Cloud.Language.V1 NuGet パッケージをプロジェクトに追加します。

dotnet add package Google.Cloud.Language.V1
info : Adding PackageReference for package 'Google.Cloud.Language.V1' into project '/home/atameldev/NaturalLanguageApiDemo/NaturalLanguageApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/NaturalLanguageApiDemo/NaturalLanguageApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Language.V1' version '1.1.0' added to file '/home/atameldev/NaturalLanguageApiDemo/NaturalLanguageApiDemo.csproj'.

これで、Natural Language API を使用する準備が整いました。

5. 感情分析

このセクションでは、Natural Language API を使用して文字列の感情分析を行い、スコア強度を調べます。

感情のスコアは -1.0(ネガティブ)~ 1.0(ポジティブ)の範囲で、指定された情報から得られる全体的な感情に対応します。

感情の Magnitude は 0.0 から +infinity の範囲で、指定された情報から感情の全体的な強度を示します。提供される情報が多いほど、マグニチュードは高くなります。

Cloud Shell の右上からコードエディタを開きます。

fd3fc1303e63572.png

NaturalLanguageApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のコードに置き換えます。

using System;
using Google.Cloud.Language.V1;

namespace NaturalLanguageApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = "Yukihiro Matsumoto is great!";
            var client = LanguageServiceClient.Create();
            var response = client.AnalyzeSentiment(Document.FromPlainText(text));
            var sentiment = response.DocumentSentiment;
            Console.WriteLine($"Score: {sentiment.Score}");
            Console.WriteLine($"Magnitude: {sentiment.Magnitude}");
        }
    }
}

1 ~ 2 分ほど時間を取ってコードを調べ、コード スニペットを使用して文字列「Yukihiro Matsumoto is great!」の感情分析を行う方法を確認してください。

Cloud Shell に戻ってアプリを実行します。

dotnet run

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

Score: 0.9
Magnitude: 0.9

概要

この手順では、テキスト文字列に対して感情分析を行い、スコアとマグニチュードを出力しました。感情分析の詳細を確認する。

6. エンティティ分析

エンティティ分析は、著名人、ランドマークなどの固有名詞を検索して、指定された情報にエンティティが含まれていないかどうかを調べ、それらのエンティティに関する情報を返します。

エンティティ分析を実行するには、NaturalLanguageApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のコードに置き換えます。

using System;
using Google.Cloud.Language.V1;

namespace NaturalLanguageApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = "Yukihiro Matsumoto is great!";
            var client = LanguageServiceClient.Create();
            var response = client.AnalyzeEntitySentiment(Document.FromPlainText(text));

            foreach (var entity in response.Entities)
            {
                Console.WriteLine($"Entity: \"{entity.Name}\" ({entity.Type})");
                if (entity.Metadata.ContainsKey("wikipedia_url"))
                {
                    Console.WriteLine($"URL: {entity.Metadata["wikipedia_url"]}");
                }
            }
        }
    }
}

コードを 1 ~ 2 分ほど確認して、コード スニペットを使用して文字列 "Yukihiro Matsumoto is great!" のエンティティ分析を行う方法を確認します。

Cloud Shell に戻ってアプリを実行します。

dotnet run

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

Entity: "Yukihiro Matsumoto" (Person)
URL: https://en.wikipedia.org/wiki/Yukihiro_Matsumoto

概要

このステップでは、テキスト文字列に対してエンティティ分析を行い、エンティティを出力しました。詳しくは、エンティティ分析をご覧ください。

7. 構文解析

構文解析では、言語情報を抽出し、指定されたテキストを一連の文とトークン(通常は単語の境界)に分解して、それらのトークンをさらに分析できるようにします。

この例では、文の数とトークンの数が出力され、各トークンの品詞が提供されます。

構文解析を実行するには、NaturalLanguageApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のコードに置き換えます。

using System;
using Google.Cloud.Language.V1;
using static Google.Cloud.Language.V1.AnnotateTextRequest.Types;

namespace NaturalLanguageApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = "Yukihiro Matsumoto is great!";
            var client = LanguageServiceClient.Create();
            var response = client.AnnotateText(Document.FromPlainText(text), 
                new Features { ExtractSyntax = true });

            var sentences = response.Sentences;
            var tokens = response.Tokens;

            Console.WriteLine($"Sentences: {sentences.Count}");
            Console.WriteLine($"Tokens: {tokens.Count}");

            foreach (var token in tokens)
            {
                Console.WriteLine($"{token.PartOfSpeech.Tag} {token.Text.Content}");
            }
        }
    }
}

コードを 1 ~ 2 分ほど確認して、コード スニペットが文字列 "Yukihiro Matsumoto is great!" の構文解析を実行するためにどのように使用されているかを確認します。

Cloud Shell に戻ってアプリを実行します。

dotnet run

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

Sentences: 1
Tokens: 5
Noun Yukihiro
Noun Matsumoto
Verb is
Adj great
Punct !

以下に、視覚的な解釈を示します。

297dbabf1a723bad.png

概要

このステップでは、簡単なテキスト文字列に対して構文解析を実行し、文の数、トークンの数、各トークンの言語情報を出力しました。詳しくは、構文解析をご覧ください。

8. 完了

このラボでは、C# を使用して Natural Language API を使用し、情報に対してさまざまな種類の分析を行う方法を学習しました。

クリーンアップ

このクイックスタートで使用するリソースに対して Google Cloud Platform アカウントに課金されないようにするには:

  • Cloud Platform Console に移動します。
  • シャットダウンするプロジェクトを選択し、上部の [削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。

詳細

ライセンス

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