DX station

【第三回】Azure Cognitive Services for Language で簡単テキスト分析!~会話言語理解を使ってみる編~

高橋 良輔

高橋 良輔

こんにちは。データサイエンスチームの高橋です。

前回の記事「Azure Cognitive Services for Language で簡単テキスト分析!~質問応答を使ってみる編~」では Azure Cognitive Services for Language の質問応答サービスの利用方法について紹介しました。質問応答では、チャット形式で質問に対して適切な回答が得られることを確認しました。このようなチャットボットをより多才にできる機能が、本サービスには用意されています。今回はその機能である会話言語理解 (Conversational Language Understanding) についてご紹介しようと思います。

機能 説明 用途
固有表現抽出 (NER) 固有表現と呼ばれる人名や地名、日付などを文中から抽出します チャットボット
テキストマイニング
個人を特定できる情報 (PII) の検出 電話番号やメールアドレスなどの個人を特定できる情報を、文中から検出します データの匿名化
キーフレーズ抽出 文中からキーフレーズを抽出し、そのリストを返します 文書のタグ付け可視化
エンティティ・リンキング 文中の語句と知識ベース (Wikipedia) を紐づけ、詳細情報を提供します チャットボット
テキストマイニング
Text Analytics for Health 電子カルテなどの医療関係の文書に対する分析機能を提供します 医療用文書の分析
カスタム NER ユーザーが独自の専門領域に特化した NER のモデルを構築できます 領域に特化したチャットボット
テキストマイニング
感情分析 文章に対して “negative”, “neutral”, “positive” でラベリング・スコアリングします レビュー・SNS分析
株価予測
言語検出 文章がどの言語で書かれているかを検出します 他機能との連携
カスタム文書分類 (プレビュー) ユーザーが任意のカテゴリに分類する文書分類モデルを構築できます スパムフィルタリング
ニュース記事分類
文書要約 (プレビュー) 記事や論文などの要約を生成します 要約
Conversational Language Understanding (プレビュー)
★本記事
会話の内容を理解して、対応する意図 (Intent) に分類します チャットボット
音声コントロール
Question answering 質問から適切な回答を選択します チャットボット
FAQ ボット


「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


会話言語理解 (Conversational Language Understanding) とは?

会話言語理解 (Conversational Language Understanding) とは会話文の理解に特化した機能となります。この機能は主にチャットボットのような対話システムを、より高性能にする目的で利用されます。例えば、「明日の新宿の天気は?」という質問では、前回紹介した質問応答の機能のような、回答を事前に用意しておく方法では対処できません。このような質問に適切に回答するためには、文中の「明日」や「新宿」の意味を正しく認識し、文全体の意図は何かを適切に理解することが必要となります。このような会話文の理解を手助けしてくれるのが、本サービスとなります。

会話文の理解というと抽象的ですが、具体的には、会話文の Intent の判定と文中の Entity を抽出する機能となります。Intent と Entity については次の章で解説しますが、ざっくりと言えば「何をどうする」ということにおいて、「何」に対応するものが Entity であり、「どうする」に対応するものが Intent になります。これらを抽出することで発言の内容を認識し、次のアクションへ繋げることができます。具体的には以下のような利用が考えられます。

上の例は、天気や気温の情報を得るために利用しているものです。会話言語理解を利用して、天気を知りたいのか、それとも気温を知りたいのかという Intent の判定と、日付や場所といった Entity の抽出を行っています。抽出した結果を天気予報 API に渡すことで、知りたい情報を得るというのが全体の流れとなります。このように本機能は会話文の理解に特化しているので、次のアクションを実行するための外部サービスとの連携が前提になっているともいえます。この設計によってさまざまな応用が考えられる汎用的なサービスとなっています。期待できる応用先として例えば、お店の予約や乗換案内のようなカスタマー向けのサービスや、カレンダーの管理や会議設定のような業務関連の作業などを、チャットベースで利用可能にするといったことが考えられます。また既に身近なものとしてある iPhone の Siri や各種 AI スピーカーでは、会話言語理解と同じような機能が搭載されていると考えられます。本機能でも Azure のSpeech to Text や Text to Speech のような音声認識・合成サービスと組み合わせることで、AI スピーカーのような使い方も可能となります。このように入出力ともに様々な外部サービスと連携することで、多くの課題解決に繋げられます。

また本機能は、以前から存在していた Language Understanding サービスである LUIS の次世代版とされています。基本的な機能は LUIS も変わらないのですが、次世代版である本機能では、中身の AI モデルとして Transformer ベースのものが採用されています。 Transformer とは、私が以前執筆した記事で紹介している BERT などの元になるモデル、またはそのアーキテクチャを指します。NLP 分野で最先端のモデルを取り入れることで、会話文の理解能力を向上させているものが、本サービスとなります。



「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


Intent と Entity とは

会話言語理解の機能を使ってみる前に、用語として知っておかなくてはならない Intent と Entity について説明します。前章でも述べたように、会話言語理解では Intent と Entity を抽出することで、発言の内容を認識しています。以下が Intent と Entity の簡単な解説となります。

  • Intent
    文全体の意図を表します。前章の例では GetTemperature や GetWeather が Intent で、文がどちらの Intent なのかを分類することになります。
  • Entity
    文中で Intent に関連する単語を指定します。前述の例では Date や Location が Entity で、文中のどこにそれぞれの Entity があるかを検出することになります。主に 5W1H に当てはまるようなものが Entity という理解で問題ありません。

会話言語理解では、まずは抽出したい Intent と Entity を設定し、それぞれがタグ付けされた例文を用意します。本機能ではこの例文から学習を行うことで、未知の発言に対しても適切な認識を可能とする AI モデルを構築します。Intent や Entity が何かは理解したけど、実際どのようなものを設定すればよいか分からない、という方もいらっしゃると思います。Intent や Entity の設定の方針としては、本機能の結果を連携したい API の仕様から検討するのが効率的かと思います。例えば天気予報 API と連携したい場合は、天気予報 API にはどのような機能 (関数) が用意されているか、そしてその機能の利用に必要な情報 (引数) は何かを洗い出します。これにより、機能 (関数) に対応する Intent と、必要な情報 (引数) に対応する Entity を設定すればよいということになります。

本機能では、Entity として以下の 3 種類のコンポーネントが用意されています。

  • Learned コンポーネント
    こちらが今回主に利用する Entity コンポーネントで、Learned とあるように、自らタグ付けした例文を利用して AI モデルを学習する場合に用いるものです。
  • List コンポーネント
    ある Entity に対応する単語と、その同義語をあらかじめリストアップしておくことができる機能です。機械学習でうまく認識できない場合では、こちらの機能で対応できます。
  • Prebuilt コンポーネント
    日付や数量など、一般的によく使われる Entity について、自動で抽出できるように事前に構築されたものです。こちらは現時点(2021年12月)で日本語未対応となります。

また、同一の Entity に対して複数のコンポーネントが重複して適用されるときの挙動を、Overlap メソッドというものにより制御することも可能です。このような細かなサポートも利用することで、より効果的なモデルの構築が可能となります。



「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


会話言語理解を試す

さっそく会話言語理解を利用してみましょう。今回は利用シーンとして「会議室の利用予約」を想定し、会話言語理解モデルの構築を行っていきたいと思います。

  1. 本機能は F0 の Language リソースでは利用不可となっているため、S Standard の価格レベルのリソースを用意します。なお本機能に関してはプレビューということもあり、無料で利用可能です。また注意点として、本機能は米国西部 2 および西ヨーロッパの 2 つのリージョンのみで利用可能となっています。そのためリソース作成時にはこれらのリージョンを選択する必要があります。
  2. リソースを作成したら、Language Studio (https://language.azure.com) にアクセスして、一覧から Conversational Language Understanding を選択します。
  3. 以下の画面が表示されたら、Create new project からプロジェクトを作成していきます。
  4. 以下のウィンドウに沿ってプロジェクトの設定をしていきます。 Project type については、上の Conversation project にチェックを入れ Next を押下します。なお、Orchestration workflow project は日本語未対応の機能となります。
  5. 続いて、プロジェクトの名前と言語を設定します。今回は日本語を対象としています。
  6. 最後に確認の上、Create を押下してプロジェクトの作成は完了です。
  7. プロジェクトの作成が完了したら、さっそく Intent の設定をしていきます。Intents タブ上部の Add を押下します。
  8. 追加する Intent の名称を入力して、Add intent を押下します。今回は、部屋の予約を意図する BookRoom と、部屋の検索を意図する SearchRoom という 2 つの Intent を追加します。
  9. 続いて Entity も追加していきます。Intent と同様に Entities タブ上部の Add から追加していきます。
  10. 追加する Entity の名称を入力して、Add entity を押下します。今回は、部屋名 RoomName、日付 Date、予約開始時刻 StartTime、予約終了時刻 EndTime を Entity として追加します。
  11. Intent と Entity の設定が完了したら、発言の例文を入力してタグをつけていきます。Tag utterances において、例文および対応する Intent を入力していきます。
  12. 入力したら Entity のタグをつけていきます。例文中の単語をドラッグすると、候補となる Entity のメニューが表示されるので、対応する Entity を選択します。
  13. 以下のように単語に対応する Entity がタグ付けされます。このようにとても直感的にタグ付けが実施できます。
  14. 同様の手順で用意した例文に対してタグ付けしていきます。今回は BookRoom と SearchRoom の例文をそれぞれ 10 個用意してタグ付けをしました。本機能はこの例文を学習して AI モデルを構築するので、ここで多くの例文を用意することがポイントとなります。
  15. タグ付けが完了したら、学習を回していきます。Train Model でモデル名を入力して Train を押下することで学習が実行されます。Run evaluation with training を選択すると、学習したモデルの評価が可能となります。その際に例文の 20% が評価用データとして利用されるので、その分学習用データが少なくなることに留意が必要です。
  16. モデルの学習は 4 分程度で完了となりました。Model details から学習したモデルを選択すると、モデルの詳細が確認できます。
  17. 詳細では以下のように、テストデータにおける Entity や Intent の推定結果のスコアが表示されます。こちらを確認しながら例文を追加して再学習をするなど、モデルをブラッシュアップしていくことが可能です。
  18. モデルの用意ができたら、モデルをデプロイして利用できるようにします。モデルを選択して、上部の Deploy model を押下します。
  19. 以下のウィンドウで Deploy を押下してデプロイを実行します。
  20. デプロイが完了したら、モデルを利用することができます。Test model からデプロイしたモデルを選択します。
  21. 以下の画面から利用することができます。学習に利用していない例文を入力して、Run the test を押下することで、動作の確認をします。
  22. 以下が実行結果です。Intent と Entity の推定結果が信頼度とともに表示されています。結果を確認すると、例文に対して適切な Intent および Entity が抽出されていることが分かります。
  23. 他の例文でも試してみます。SearchRoom の例文として「確認して」という表現は学習させていませんが、以下の例では Intent と Entity ともに適切に認識していることが分かります。
  24. 「確保して」という表現でも適切に BookRoom の Intent として認識されていることが確認できます。

以上の手順により、会話言語理解モデルを構築することができます。最新の AI モデルを採用していることもあり、実用的な精度を達成していることも確認できました。



「CogEra」はこちら

「ML Connect」はこちら

「機械学習導入支援サービス」はこちら


さいごに

本記事では Azure Cognitive Services for Language で会話言語理解の機能の利用方法をご紹介しました。Intent や Entity といった聞き慣れない用語が登場しましたが、意味が分かってしまえばとても便利な機能であることが分かると思います。最先端の AI モデルを採用した会話言語理解モデルの構築も、上記のように画面の手順に従って操作を行っていくだけで、非常に簡単にできてしまうことが確認できました。今回は会話言語理解モデルの構築までについてご紹介しましたが、前述したように、本機能は外部サービスと連携することで真価を発揮するものと言えます。今回構築したモデルについても、実際に会議室予約システムと連携させ、Teams のチャットから部屋の確認・予約ができるような仕組みを作ることも可能であると考えられます。API を利用することで様々な応用ができるサービスとなっていますので、どんなところに活用できそうか想像を膨らませることに本記事が少しでも役立てば幸いです。

当社でも、Azure のサービスを活用したチャットボットソリューションである Knowledge Bot など、本記事に関連するサービスをご用意しております。また AI モデルの構築やデータ分析はもちろん、Azure を活用したデータ基盤やインフラの設計など、システム全体の構築にも強みを持っていますので、ご相談などがありましたら、当社までお気軽にお問い合わせください。最後までお読みいただきありがとうございました。


関連ページ

「CogEra」はこちら
「ML Connect」はこちら
「機械学習導入支援サービス」はこちら

お問い合わせ

製品・サービスに関するお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録