Google Cloud NaturalLanguageAPIを使用したNLP
公開: 2022-03-11機械学習と言語学を組み合わせた自然言語処理(NLP)は、人工知能の分野で最も研究が進んでいる科目の1つになっています。 過去数年間で、多くの新しいマイルストーンに到達しました。最新のものはOpenAIのGPT-2モデルであり、短い入力からあらゆるトピックに関する現実的で一貫性のある記事を作成できます。
この関心は、近年市場に投入された多くの商用アプリケーションによって推進されています。 NLPを使用して音声データを転記し、質問やコマンドを理解しているホームアシスタントと話をします。 ますます多くの企業が、顧客とのコミュニケーションの取り組みの大部分を自動チャットボットにシフトしています。 オンラインマーケットプレイスはこれを使用して偽のレビューを識別し、メディア企業はニュース記事を書くためにNLPに依存し、採用企業はCVをポジションに一致させ、ソーシャルメディアの巨人は嫌なコンテンツを自動的にフィルタリングし、法律事務所はNLPを使用して契約を分析します。
このようなタスクの機械学習モデルのトレーニングと導入は、これまで複雑なプロセスであり、専門家のチームと高価なインフラストラクチャが必要でした。 しかし、そのようなアプリケーションに対する高い需要により、大規模なプロバイダーはNLP関連のサービスを開発するようになり、ワークロードとインフラストラクチャのコストが大幅に削減されました。 クラウドサービスの平均コストは何年にもわたって低下しており、この傾向は今後も続くと予想されます。
この記事で紹介する製品は、Google Cloud Servicesの一部であり、「GoogleNaturalLanguageAPI」および「GoogleAutoMLNaturalLanguage」と呼ばれます。
Google自然言語API
Google Natural Language APIは、さまざまなタスクを実行するためにGoogleによって事前にトレーニングされた一連の強力なNLPモデルへの使いやすいインターフェースです。 これらのモデルは非常に大きなドキュメントコーパスでトレーニングされているため、非常に特異な言語を使用しないデータセットで使用されている限り、通常、パフォーマンスは非常に良好です。
APIを介してこれらの事前トレーニング済みモデルを使用する最大の利点は、トレーニングデータセットが不要なことです。 APIを使用すると、ユーザーはすぐに予測を開始できます。これは、ラベル付けされたデータがほとんどない状況で非常に役立ちます。
自然言語APIは、次の5つの異なるサービスで構成されています。
- 構文解析
- 感情分析
- エンティティ分析
- エンティティ感情分析
- テキスト分類
構文解析
特定のテキストについて、Googleの構文解析は、各トークンの豊富な言語情報を含むすべての単語の内訳を返します。 情報は2つの部分に分けることができます:
品詞:この部分には、各トークンの形態に関する情報が含まれています。 単語ごとに、そのタイプ(名詞、動詞など)、性別、文法上の大文字小文字、時制、文法上の気分、文法上の声などを含む詳細な分析が返されます。
たとえば、入力文の場合、 「コンピューターはチェスで私を殴ったことがありますが、キックボクシングでは私には一致しませんでした。」 (Emo Philips)品詞分析は次のとおりです。
A | タグ:DET |
'コンピューター' | タグ:名詞番号:SINGULAR |
'一度' | タグ:ADV |
'ビート' | タグ:動詞法:直説法:過去 |
'自分' | タグ:PRONケース:対格:単数者:FIRST |
で | タグ:ADP |
'チェス' | タグ:名詞番号:SINGULAR |
'、' | タグ:PUNCT |
'しかし' | タグ:CONJ |
'それ' | タグ:PRONケース:主格:中性番号:単数人称:サード |
'だった' | タグ:動詞法:直説法:単数人称:第3時制:過去 |
'いいえ' | タグ:DET |
'マッチ' | タグ:名詞番号:SINGULAR |
'ために' | タグ:ADP |
'キック' | タグ:名詞番号:SINGULAR |
'ボクシング' | タグ:名詞番号:SINGULAR |
'。' | タグ:PUNCT |
依存関係ツリー:戻り値の2番目の部分は依存関係ツリーと呼ばれ、各文の構文構造を記述します。 次の有名なケネディの引用の図は、そのような依存関係ツリーを示しています。 単語ごとに、矢印はどの単語がそれによって変更されるかを示します。
一般的に使用されるPythonライブラリnltkとspaCyには、同様の機能が含まれています。 分析の品質は3つのオプションすべてで一貫して高くなっていますが、Google NaturalLanguageAPIの方が使いやすいです。 上記の分析は、ごくわずかなコード行で取得できます(さらに下の例を参照)。 ただし、spaCyとnltkはオープンソースであるため無料ですが、Google Natural Language APIの使用には、一定数の無料リクエストの後に費用がかかります(費用のセクションを参照)。
構文分析では、英語の他に、中国語(簡易)、中国語(従来)、フランス語、ドイツ語、イタリア語、日本語、韓国語、ポルトガル語、ロシア語、スペイン語の10の追加言語がサポートされています。
感情分析
構文解析サービスは、ほとんどの場合、パイプラインの早い段階で機能を作成するために使用され、後で機械学習モデルに提供されます。 それどころか、感情分析サービスは箱から出してすぐに使用できます。
Googleの感情分析は、提供されたテキスト内で一般的な感情的な意見を提供します。 APIは2つの値を返します。「スコア」は、-1(負)から+1(正)までのテキストの感情的な傾きを表し、0はニュートラルです。
「大きさ」は感情の強さを測定します。
いくつかの例を見てみましょう:
入力文 | 感情の結果 | 解釈 |
ロンドン行きの電車は4時に出発します | スコア:0.0マグニチュード:0.0 | 完全に中立的な発言であり、感情はまったく含まれていません。 |
このブログ投稿は良いです。 | スコア:0.7マグニチュード:0.7 | ポジティブな感情ですが、あまり強く表現されていません。 |
このブログ投稿は良いです。 とても助かりました。 著者は素晴らしいです。 | スコア:0.7マグニチュード:2.3 | 同じ感情ですが、はるかに強く表現されました。 |
このブログ投稿はとても良いです。 この著者は通常恐ろしい作家ですが、ここで彼は幸運に恵まれました。 | スコア:0.0マグニチュード:1.6 | 大きさは、このテキストで表現された感情があることを示していますが、感情はそれらが混合されており、明確にポジティブまたはネガティブではないことを示しています。 |
Googleの感情分析モデルは、非常に大きなデータセットでトレーニングされています。 残念ながら、その詳細な構造に関する情報はありません。 その実際のパフォーマンスに興味があったので、2011年にスタンフォード大学の科学者によって作成されたLarge MovieReviewDatasetの一部でテストしました。
テストセットから500件の肯定的な映画レビューと500件の否定的な映画レビューをランダムに選択し、予測された感情を実際のレビューラベルと比較しました。 混同行列は次のようになりました。
ポジティブな感情 | 否定的な感情 | |
良いレビュー | 470 | 30 |
悪いレビュー | 29 | 471 |
表が示すように、このモデルは、映画の良いレビューと悪いレビューの約94%の確率で適切です。 これは、特定の問題を微調整することなく、すぐに使用できるソリューションにとって悪いパフォーマンスではありません。
注:感情分析は、ロシア語を除いて構文解析と同じ言語で使用できます。
エンティティ分析
エンティティ分析は、特定のテキストから公人やランドマークなどの既知のエンティティを検出するプロセスです。 エンティティ検出は、あらゆる種類の分類およびトピックモデリングタスクに非常に役立ちます。
Google Natural Language APIは、検出された各エンティティに関するいくつかの基本情報を提供し、存在する場合はそれぞれのWikipedia記事へのリンクも提供します。 また、顕著性スコアが計算されます。 エンティティのこのスコアは、ドキュメントテキスト全体に対するそのエンティティの重要性または中心性に関する情報を提供します。 0に近いスコアはそれほど顕著ではありませんが、1.0に近いスコアは非常に顕著です。
この例文を使用してAPIにリクエストを送信すると、 「2011年12月のクリスマスイブにロバートデニーロがハリウッドのマーティンスコセッシと話しました。」 次の結果が得られます。
検出されたエンティティ | 追加情報 |
ロバート・デ・ニーロ | タイプ:PERSON salience:0.5869118 wikipedia_url:https://en.wikipedia.org/wiki/Robert_De_Niro |
ハリウッド | タイプ:LOCATIONサリエンシー:0.17918482 wikipedia_url:https://en.wikipedia.org/wiki/Hollywood |
マーティンスコセッシ | タイプ:LOCATION salience:0.17712952 wikipedia_url:https://en.wikipedia.org/wiki/Martin_Scorsese |
クリスマス・イブ | タイプ:PERSON salience:0.056773853 wikipedia_url:https://en.wikipedia.org/wiki/Christmas |
2011年12月 | タイプ:DATE年:2011月:12顕著性:0.0 wikipedia_url:- |
2011 | タイプ:NUMBER salience:0.0 wikipedia_url:- |
ご覧のとおり、2011年が2回表示されることを除いて、すべてのエンティティが正しく識別および分類されています。 出力例のフィールドに加えて、エンティティ分析APIは、組織、芸術作品、消費財、電話番号、住所、および価格も検出します。
エンティティ感情分析
エンティティ検出と感情分析のモデルがある場合は、さらに一歩進んでそれらを組み合わせて、テキスト内のさまざまなエンティティに対する一般的な感情を検出するのが自然です。
Sentiment Analysis APIは、ドキュメント内の感情のすべての表示を検出してそれらを集約しますが、Entity Sentiment Analysisは、ドキュメントのさまざまな部分と識別されたエンティティ間の依存関係を検出し、これらのテキストセグメント内の感情をそれぞれのエンティティに関連付けようとします。
たとえば、意見のあるテキスト: 「著者は恐ろしい作家です。 一方、リーダーは非常にインテリジェントです。」 結果につながります:
実在物 | 感情 |
著者 | 顕著性:0.8773350715637207感情:大きさ:1.8999999976158142スコア:-0.8999999761581421 |
読者 | 顕著性:0.08653714507818222感情:大きさ:0.8999999761581421スコア:0.8999999761581421 |
これまでのエンティティ感情分析は、英語、日本語、スペイン語でのみ機能します。
テキスト分類
最後に、Google自然言語APIには、プラグアンドプレイのテキスト分類モデルが付属しています。
モデルは、入力ドキュメントを多数のカテゴリに分類するようにトレーニングされています。 カテゴリは階層構造になっています。たとえば、カテゴリ「趣味とレジャー」にはいくつかのサブカテゴリがあり、そのうちの1つは「趣味とレジャー/屋外」であり、それ自体に「趣味とレジャー/屋外/釣り」などのサブカテゴリがあります。

これは、ニコンのカメラ広告からのテキストの例です。
「D3500の大型24.2MPDXフォーマットセンサーは、暗い場所での撮影でも、詳細な写真やフルHDムービーをキャプチャします。 NIKKORレンズのレンダリング能力と組み合わせることで、滑らかな背景のぼかしで芸術的なポートレートの作成を開始できます。 簡単に。"
GoogleAPIは次の結果を返します。
カテゴリー | 自信 |
アート&エンターテインメント/ビジュアルアート&デザイン/写真&デジタルアート | 0.95 |
趣味とレジャー | 0.94 |
コンピュータおよび電子機器/家庭用電化製品/カメラおよび写真機器 | 0.85 |
3番目のエントリを2番目のエントリよりも直感的に上位にランク付けしますが、これら3つのカテゴリはすべて意味があります。 ただし、この入力セグメントは完全なカメラ広告ドキュメントのごく一部であり、分類モデルのパフォーマンスはテキストの長さとともに向上することを考慮する必要があります。
多くのドキュメントで試してみたところ、ほとんどの場合、分類モデルの結果に意味があることがわかりました。 それでも、Google Natural Language APIの他のすべてのモデルと同様に、分類子はブラックボックスソリューションとして提供され、APIユーザーが変更したり微調整したりすることはできません。 特にテキスト分類の場合、大多数の企業はGoogleモデルのカテゴリとは異なる独自のテキストカテゴリを持っているため、NaturalLanguageAPIテキスト分類サービスは大多数のユーザーに適用できない可能性があります。
分類モデルのもう1つの制限は、英語のテキストに対してのみ機能することです。
自然言語APIの使用方法
Google Natural Language APIの主な利点は、その使いやすさです。 機械学習のスキルは必要なく、コーディングのスキルもほとんどありません。 Google CloudのWebサイトには、多くの言語のAPIを呼び出すためのコードスニペットがあります。
たとえば、感情分析APIを呼び出すPythonコードは次のように短くなります。
from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))
他のAPI機能も同様の方法で呼び出され、 client.analyze_sentiment
を適切な関数に変更するだけです。
Google NaturalLanguageAPIの全体的なコスト
Googleは、Natural Language APIのすべてのサービスについて、リクエストごとにユーザーに課金します。 これには、展開サーバーに固定費がかからないという利点があります。 欠点は、非常に大きなデータセットでは高価になる可能性があることです。
この表は、毎月のリクエスト数に応じた価格(1,000リクエストあたり)を示しています。
ドキュメントの文字数が1,000文字を超える場合は、複数のリクエストとしてカウントされます。 たとえば、それぞれ1,500文字の10,000のドキュメントの感情を分析する場合、20,000のリクエストが請求されます。 最初の5,000は無料なので、合計費用は$15になります。 同じサイズの100万のドキュメントを分析すると、1,995ドルの費用がかかります。
便利ですが柔軟性がありません
Google Natural Language APIは、すぐに使用できる迅速なソリューションに非常に便利なオプションです。 技術的な知識はほとんどなく、基礎となる機械学習モデルの理解も必要ありません。
主な欠点は、柔軟性がなく、モデルにアクセスできないことです。 モデルを特定のタスクまたはデータセットに合わせて調整することはできません。
実際の環境では、ほとんどのタスクで、標準化された自然言語API関数が提供できるよりもカスタマイズされたソリューションが必要になる可能性があります。
このシナリオでは、GoogleAutoML自然言語がより適しています。
GoogleAutoML自然言語
Natural Language APIがビジネス目的に十分な柔軟性を備えていない場合は、AutoMLNaturalLanguageが適切なサービスである可能性があります。 AutoMLは、ユーザーがカスタマイズされた機械学習モデルを作成できるようにする新しいGoogle Cloud Service(まだベータ版)です。 自然言語APIとは対照的に、AutoMLモデルはユーザーのデータでトレーニングされるため、特定のタスクに適合します。
コンテンツを分類するためのカスタム機械学習モデルは、Natural Language APIから利用できる事前定義されたカテゴリが一般的すぎるか、特定のユースケースまたはナレッジドメインに適用できない場合に役立ちます。
AutoMLサービスは、主にモデルをトレーニングするためのデータセットを提供する必要があるため、ユーザーにとってもう少し手間がかかります。 ただし、完全に自動化されたモデルのトレーニングと評価は、機械学習の知識は必要ありません。 Google Cloudコンソールを使用すると、コードを記述せずにプロセス全体を実行できます。 もちろん、これらの手順を自動化したい場合は、すべての一般的なプログラミング言語がサポートされています。
Google AutoML自然言語で何ができるか?
AutoMLサービスは、3つのユースケースをカバーしています。 現在のところ、これらのユースケースはすべて英語のみをサポートしています。
1.AutoMLテキスト分類
Natural Language APIのテキスト分類子は事前にトレーニングされているため、テキストカテゴリの固定セットがありますが、AutoMLテキスト分類は、トレーニングデータセットで提供するカテゴリを使用して、カスタマイズされた機械学習モデルを構築します。
2.AutoML感情分析
これまで見てきたように、Natural Language APIの感情分析は、映画レビューなどの一般的なユースケースでうまく機能します。 感情モデルは非常に一般的なコーパスでトレーニングされているため、ドメイン固有言語を多く使用するドキュメントのパフォーマンスが低下する可能性があります。 このような状況では、AutoML感情分析を使用して、ドメインに合わせてカスタマイズされた感情モデルをトレーニングできます。
3.AutoMLエンティティの抽出
多くのビジネスコンテキストでは、Natural Language APIが識別できないドメイン固有のエンティティ(法的契約、医療文書)があります。 エンティティがマークされているデータセットがある場合は、AutoMLを使用してカスタマイズされたモデルエンティティエクストラクタをトレーニングできます。 データセットが十分に大きい場合、トレーニングされたエンティティ抽出モデルは、以前に表示されなかったエンティティも検出できます。
AutoML自然言語の使用方法
3つのAutoMLの使用は4段階のプロセスであり、3つの方法すべてで非常によく似ています。
データセットの準備
データセットは特定の形式(CSVまたはJSON)である必要があり、ストレージバケットに保存する必要があります。 分類モデルと感情モデルの場合、データセットにはテキストとラベルの2つの列のみが含まれます。 エンティティ抽出モデルの場合、データセットにはテキストとテキスト内のすべてのエンティティの場所が必要です。モデルトレーニング
モデルトレーニングは完全に自動化されています。 他に指示がない場合、AutoMLはトレーニングセットをトレーニング、テスト、および検証セットに自動的に分割します。 この分割はユーザーが決定することもできますが、それがモデルのトレーニングに影響を与える唯一の方法です。 残りのトレーニングは、ブラックボックス方式で完全に自動化されています。評価
トレーニングが終了すると、AutoMLは適合率と再現率のスコア、および混同行列を表示します。 残念ながら、モデル自体に関する情報はまったくないため、パフォーマンスの悪いモデルの理由を特定することは困難です。予測
モデルのパフォーマンスに満足したら、数回クリックするだけでモデルを簡単に展開できます。 展開プロセスには数分しかかかりません。
AutoMLモデルのパフォーマンス
おそらく基礎となるモデルが非常に大きいため、トレーニングプロセスは非常に遅くなります。 15,000のサンプルと10のカテゴリを使用して小さなテスト分類タスクをトレーニングしましたが、トレーニングには数時間かかりました。 はるかに大きなデータセットを使用した実際の例では、数日かかりました。
グーグルは使用されたモデルについての詳細を公表しなかったが、私の推測では、グーグルのBERTモデルは各タスクに小さな適応で使用されている。 BERTのような大きなモデルの微調整は、特に多くの交差検定が実行される場合、計算コストのかかるプロセスです。
AutoML分類モデルを実際の例で、BERTに基づいて自分で開発したモデルに対してテストしました。 驚いたことに、AutoMLモデルは、同じデータでトレーニングした場合、私自身のモデルよりも大幅にパフォーマンスが低下しました。 AutoMLは84%の精度を達成しましたが、私のモデルでは89%を達成しました。
つまり、AutoMLを使用すると非常に便利な場合がありますが、パフォーマンスが重要なタスクの場合は、時間をかけて自分でモデルを開発するのが理にかなっています。
AutoMLの価格
1,000テキストレコードあたり5ドルの予測のAutoML価格設定は、NaturalLanguageAPIよりも大幅に高価です。 さらに、モデルトレーニングの場合、AutoMLは1時間あたり3ドルを請求します。 これは最初はごくわずかですが、頻繁な再トレーニングが必要なユースケースでは、特にトレーニングが非常に遅いように見えるため、これはかなりの量になる可能性があります。
自然言語APIの場合と同じ例を使用してみましょう。
それぞれ1,500文字の10,000のドキュメントの感情を分析したいので、20,000のリクエストが請求されます。 モデルのトレーニングに20時間かかり、費用は48ドルだとします。 最初の30,000リクエストは無料なので、予測に費用はかかりません。 このような小さなデータセットの場合、AutoMLは非常に経済的です。
ただし、データセットが大きく、同じサイズの100万の感情を予測する必要がある場合は、9,850ドルの費用がかかり、非常に高額になります。 このような大規模なデータセットの場合、AutoMLを使用せずに、独自のモデルを開発して自分でデプロイすることは理にかなっています。
Google NaturalLanguageAPIとAutoMLNaturalLanguage
Google AutoML Natural Languageは、ユーザーが特定のデータセットとドメイン用にカスタマイズされたモデルをトレーニングできるため、NaturalLanguageAPIよりもはるかに強力です。
使い方は簡単で、機械学習の知識は必要ありません。 2つの欠点は、コストが高くなることと、パフォーマンスの高いモデルをトレーニングするために必要な高品質のデータセットを提供する必要があることです。
AutoMLベータ版は、現時点では3つのNLPタスク(分類、感情分析、エンティティ抽出)のみをサポートし、英語のドキュメントのみをサポートします。 このサービスが完全にリリースされると、他の言語やNLPタスクが徐々に追加されることを期待しています。