機械学習と言語学を組み合わせた自然言語処理(NLP)は、この分野で最も研究が進んでいる科目の1つになっています。 人工知能 。過去数年間で、多くの新しいマイルストーンに到達しました。最新のものは、OpenAIのGPT-2モデルであり、これを生成することができます。 短い入力からの任意のトピックに関する現実的で首尾一貫した記事 。
この関心は、近年市場に投入された多くの商用アプリケーションによって推進されています。 NLPを使用して音声データを転記し、質問やコマンドを理解しているホームアシスタントと話します。ますます多くの企業が、顧客とのコミュニケーションの取り組みの大部分を自動チャットボットにシフトしています。オンラインマーケットプレイスはこれを使用して偽のレビューを識別し、メディア企業はNLPを使用してニュース記事を作成し、人材紹介会社はCVをポジションに一致させ、ソーシャルメディアの巨人は嫌なコンテンツを自動的にフィルタリングし、法律会社はNLPを使用して契約を分析します。
このようなタスクのための機械学習モデルのトレーニングと展開は、 過去の複雑なプロセス 、専門家のチームと高価なインフラストラクチャが必要でした。しかし、そのようなアプリケーションに対する高い需要により、大規模なプロバイダーはNLP関連のサービスを開発するようになり、ワークロードとインフラストラクチャのコストが大幅に削減されました。平均 クラウドサービスのコスト 何年もの間減少しており、この傾向は続くと予想されます。
この記事で紹介する製品は、Google Cloud Servicesの一部であり、「Google NaturalLanguageAPI」および「GoogleAutoMLNaturalLanguage」と呼ばれます。
Google Natural Language APIは、さまざまなタスクを実行するためにGoogleによって事前にトレーニングされた一連の強力なNLPモデルへの使いやすいインターフェースです。これらのモデルは非常に大きなドキュメントコーパスでトレーニングされているため、非常に特異な言語を使用しないデータセットで使用されている限り、通常、パフォーマンスは非常に良好です。
APIを介してこれらの事前トレーニング済みモデルを使用する最大の利点は、トレーニングデータセットが不要なことです。 APIを使用すると、ユーザーはすぐに予測を開始できます。これは、ラベル付けされたデータがほとんどない状況で非常に役立ちます。
自然言語APIは、次の5つの異なるサービスで構成されています。
特定のテキストについて、Googleの構文解析は、各トークンの豊富な言語情報を含むすべての単語の内訳を返します。情報は2つの部分に分けることができます:
品詞: この部分には、各トークンの形態に関する情報が含まれています。単語ごとに、そのタイプ(名詞、動詞など)、性別、文法上の格、時制、文法的な気分、文法的な声などを含む詳細な分析が返されます。
たとえば、入力文の場合 「コンピューターはかつてチェスで私を殴りましたが、キックボクシングでは私に匹敵しませんでした。」 (Emo Philips)品詞分析は次のとおりです。
に | タグ:IT |
'コンピューター' | タグ:名詞番号:SINGULAR |
「一度」 | タグ:ADV |
'ビート' | タグ:動詞法:直説法:過去 |
'私' | タグ:PRONケース:対格:単数人称:最初 |
で | タグ:ADP |
'チェス' | タグ:名詞番号:SINGULAR |
'、' | タグ:ポイント |
'だが' | タグ:CONJ |
'それ' | タグ:PRONケース:主格:中性番号:単数人称:サード |
「だった」 | タグ:動詞ムード:直説法:単数人称:第3時制:過去 |
'番号' | タグ:IT |
'一致' | タグ:名詞番号:SINGULAR |
'ために' | タグ:ADP |
'キック' | タグ:名詞番号:SINGULAR |
'ボクシング' | タグ:名詞番号:SINGULAR |
'。' | タグ:ポイント |
依存関係ツリー: 戻り値の2番目の部分は依存関係ツリーと呼ばれ、各文の構文構造を記述します。次の有名なケネディの引用の図は、そのような依存関係ツリーを示しています。各単語について、矢印はどの単語がそれによって変更されるかを示します。
一般的に使用されるPythonライブラリ nltk そして spaCy 同様の機能が含まれています。分析の品質は3つのオプションすべてで一貫して高いですが、Google Natural LanguageAPIの方が使いやすいです。上記の分析は、ほんの数行のコードで取得できます(さらに下の例を参照)。ただし、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年にスタンフォード大学の科学者によって作成されました。
cvvと郵便番号でハッキングされたクレジットカード番号
テストセットから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月 | タイプ:日付年:2011月:12顕著性:0.0 wikipedia_url:- |
2011 | タイプ:NUMBER顕著性: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 Natural language APIには、プラグアンドプレイのテキスト分類モデルが付属しています。
モデルは、入力ドキュメントを多数のカテゴリセットに分類するようにトレーニングされています。カテゴリは階層構造になっています。カテゴリ 「趣味・レジャー」 いくつかのサブカテゴリがあり、そのうちの1つは 「趣味・レジャー・アウトドア」 それ自体が次のようなサブカテゴリを持っています 「趣味とレジャー/アウトドア/フィッシング。」
これは、ニコンのカメラ広告からのテキストの例です。
「D3500の大型24.2MP DXフォーマットセンサーは、暗い場所で撮影した場合でも、詳細な写真やフルHDムービーをキャプチャします。 NIKKORレンズのレンダリング能力と組み合わせることで、滑らかな背景のぼかしで芸術的なポートレートの作成を開始できます。簡単に。'
GoogleAPIは次の結果を返します。
カテゴリー | 信頼 |
アート&エンターテインメント/ビジュアルアート&デザイン/写真&デジタルアート | 0.95 |
趣味&レジャー | 0.94 |
コンピュータ&エレクトロニクス/家電/カメラ&写真機器 | 0.85 |
3番目のエントリを2番目のエントリよりも直感的に上位にランク付けしますが、これら3つのカテゴリはすべて意味があります。ただし、この入力セグメントはカメラ広告ドキュメント全体のごく一部であり、分類モデルのパフォーマンスはテキストの長さとともに向上することを考慮する必要があります。
多くのドキュメントで試してみたところ、ほとんどの場合、分類モデルの結果に意味があることがわかりました。それでも、Google Natural Language APIの他のすべてのモデルと同様に、分類子はブラックボックスソリューションとして提供され、APIユーザーが変更したり微調整したりすることはできません。特にテキスト分類の場合、大多数の企業はGoogleモデルのカテゴリとは異なる独自のテキストカテゴリを持っているため、Natural LanguageAPIテキスト分類サービスは大多数のユーザーに適用できない可能性があります。
分類モデルのもう1つの制限は、英語のテキストに対してのみ機能することです。
Google Natural Language APIの主な利点は、その使いやすさです。機械学習のスキルは必要なく、コーディングのスキルもほとんどありません。 Google Cloudのウェブサイトには、多くの言語の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は、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自然言語がより適しています。
自然言語APIがビジネス目的に十分な柔軟性を備えていない場合は、 AutoML自然言語 適切なサービスかもしれません。 AutoMLは、ユーザーがカスタマイズされた機械学習モデルを作成できるようにする新しいGoogle Cloud Service(まだベータ版)です。 Natural Language APIとは対照的に、AutoMLモデルはユーザーのデータでトレーニングされるため、特定のタスクに適合します。
コンテンツを分類するためのカスタム機械学習モデルは、Natural Language APIから利用できる事前定義されたカテゴリが一般的すぎるか、特定のユースケースまたはナレッジドメインに適用できない場合に役立ちます。
AutoMLサービスは、主にモデルをトレーニングするためのデータセットを提供する必要があるため、ユーザーにとってもう少し手間がかかります。ただし、完全に自動化されたモデルのトレーニングと評価は、機械学習の知識は必要ありません。 Google Cloudコンソールを使用すると、コードを記述せずにプロセス全体を実行できます。もちろん、これらの手順を自動化したい場合は、すべての一般的なプログラミング言語がサポートされています。
AutoMLサービスは、3つのユースケースをカバーしています。現在のところ、これらのユースケースはすべて英語のみをサポートしています。
Natural Language APIのテキスト分類子は事前にトレーニングされているため、テキストカテゴリの固定セットがありますが、AutoMLテキスト分類は、トレーニングデータセットで指定したカテゴリを使用して、カスタマイズされた機械学習モデルを構築します。
これまで見てきたように、Natural Language APIの感情分析は、映画レビューなどの一般的なユースケースでうまく機能します。感情モデルは非常に一般的なコーパスでトレーニングされているため、ドメイン固有言語を多く使用するドキュメントのパフォーマンスが低下する可能性があります。このような状況では、AutoML Sentiment Analysisを使用して、ドメインに合わせてカスタマイズされた感情モデルをトレーニングできます。
多くのビジネスコンテキストでは、Natural Language APIが識別できないドメイン固有のエンティティ(法的契約、医療文書)があります。エンティティがマークされているデータセットがある場合は、AutoMLを使用してカスタマイズされたモデルエンティティエクストラクタをトレーニングできます。データセットが十分に大きい場合、トレーニングされたエンティティ抽出モデルは、以前に表示されなかったエンティティも検出できます。
3つのAutoMLの使用は4段階のプロセスであり、3つの方法すべてで非常によく似ています。
データセットの準備
データセットは特定の形式(CSVまたはJSON)である必要があり、ストレージバケットに保存する必要があります。分類モデルと感情モデルの場合、データセットにはテキストとラベルの2つの列のみが含まれます。エンティティ抽出モデルの場合、データセットにはテキストとテキスト内のすべてのエンティティの場所が必要です。
モデルトレーニング
モデルトレーニングは完全に自動化されています。他に指示がない場合、AutoMLはトレーニングセットをトレーニング、テスト、および検証セットに自動的に分割します。この分割はユーザーが決定することもできますが、それがモデルのトレーニングに影響を与える唯一の方法です。残りのトレーニングは、ブラックボックス方式で完全に自動化されています。
評価
トレーニングが終了すると、AutoMLは適合率と再現率のスコア、および混同行列を表示します。残念ながら、モデル自体に関する情報はまったくないため、パフォーマンスの悪いモデルの理由を特定することは困難です。
予測
モデルのパフォーマンスに満足したら、数回クリックするだけでモデルを簡単に展開できます。展開プロセスには数分しかかかりません。
おそらく基礎となるモデルが非常に大きいため、トレーニングプロセスは非常に遅くなります。 15,000のサンプルと10のカテゴリを使用して小さなテスト分類タスクをトレーニングしましたが、トレーニングには数時間かかりました。はるかに大きなデータセットを使用した実際の例では、数日かかりました。
Googleは使用されたモデルに関する詳細を公開していませんが、私の推測では GoogleのBERTモデル 各タスクの小さな適応で使用されます。 BERTのような大きなモデルの微調整は、特に多くの交差検定が実行される場合、計算コストのかかるプロセスです。
AutoML分類モデルを、BERTに基づいて自分で開発したモデルに対して、実際の例でテストしました。驚いたことに、AutoMLモデルは、同じデータでトレーニングした場合、私自身のモデルよりも大幅にパフォーマンスが低下しました。 AutoMLは84%の精度を達成しましたが、私のモデルでは89%を達成しました。
つまり、AutoMLを使用すると非常に便利な場合がありますが、パフォーマンスが重要なタスクの場合は、時間をかけて自分でモデルを開発するのが理にかなっています。
1,000テキストレコードあたり5ドルの予測のAutoML価格設定は、Natural LanguageAPIよりも大幅に高くなります。さらに、モデルトレーニングの場合、AutoMLは1時間あたり3ドルを請求します。これは最初はごくわずかですが、頻繁な再トレーニングが必要なユースケースでは、特にトレーニングが非常に遅いように見えるため、これはかなりの量になる可能性があります。
Natural LanguageAPIの場合と同じ例を使用してみましょう。
それぞれ1,500文字の10,000のドキュメントの感情を分析したいので、20,000のリクエストが請求されます。モデルのトレーニングに20時間かかり、費用は48ドルだとします。最初の30,000件のリクエストは無料であるため、予測に費用はかかりません。このような小さなデータセットの場合、AutoMLは非常に経済的です。
ただし、データセットが大きく、同じサイズの100万の感情を予測する必要がある場合は、9,850ドルかかり、かなり高価になります。このような大規模なデータセットの場合、AutoMLを使用せずに独自のモデルを開発して自分でデプロイすることは理にかなっています。
Google AutoML Natural Languageは、ユーザーが特定のデータセットとドメイン用にカスタマイズされたモデルをトレーニングできるため、Natural LanguageAPIよりもはるかに強力です。
使い方は簡単で、機械学習の知識は必要ありません。 2つの欠点は、コストが高くなることと、パフォーマンスの高いモデルをトレーニングするために必要な高品質のデータセットを提供する必要があることです。
AutoMLベータ版は、現時点では3つのNLPタスク(分類、感情分析、エンティティ抽出)のみをサポートし、英語のドキュメントのみをサポートします。このサービスが完全にリリースされると、他の言語やNLPタスクが徐々に追加されることを期待しています。
awsソリューションアーキテクトアソシエイトスタディガイド関連: 事前トレーニング済みモデルを最大限に活用する
感情分析は、テキスト内の意見を計算で識別するプロセスです。機械学習モデルは、既知の感情を持つ一連のテキストでトレーニングされ、トピックに対する作家の態度にどの表現が相関しているかを学習します。その後、モデルは目に見えないテキストの感情を検出できます。
テキスト分類は、テキストドキュメントを限られた数のグループに自動的に分類するプロセスです。テキスト分類子は、テキスト間の類似性を検出するようにトレーニングされた機械学習モデルです。それらの機能は通常、入力テキストドキュメントの語彙と語順に基づいています。
NLP APIは、既存の自然言語処理モデルへのインターフェースです。 APIは、テキストドキュメントをモデルに送信し、モデル出力をリターンとして受信するために使用されます。 Googleは、感情分析やテキスト分類などのさまざまなタスクのために、いくつかのモデルにNLPAPIを提供しています。
クラウド自然言語APIは、大規模なテキストコーパスでトレーニングされたいくつかのNLPモデルへのインターフェースを提供するGoogleサービスです。 APIは、エンティティ分析、構文分析、テキスト分類、および感情分析に使用できます。