JULY 2018
VOLUME 33 NUMBER 7
Cognitive Services - LUIS による意図の分類を改善する
によってZvi Topol |2018 年 7 月
Language Understanding Intelligence Service (LUIS)、Microsoft Cognitive Services の一部では、machine learning の自然言語理解するためのソリューションを提供します。LUIS, チャット ボット、ボイス インターフェイス コグニティブ検索エンジンなどの多くのユース ケースがあります。
簡単に言うと、発話とも呼ばれる、入力、テキスト ユーザーが指定されると、LUIS は、どのようなユーザーがについて質問する、発話の背後にある検出されたことを目的を返します。また、さまざまなエンティティを検出、現実世界のオブジェクトへの参照: 発話に表示されます。さらに、各インテントとエンティティが検出された信頼度スコアを出力します。これらは、[0, 1] の範囲の数値が検出に関する最も信頼度、および 0 について少なくとも確信を示す 1 です。
以前の MSDN Magazine の記事には、LUIS の基本の詳細がについて説明します。具体的には、ぜひ"を有効にする自然言語の対話で LUIS,"記事を参照してください、Ashish Sahu (msdn.com/magazine/mt745095) LUIS を使用する方法についての追加。
この記事で重点的に 2 つのオープン ソース ツール、Scattertext とすることができます、ライム LUIS で、検出と分類のインテントを理解します。(以下では使用しますの検出と分類同義です。)
このようなツールを使用して分類プロセスを解明し、LUIS がそのインテントの検出によってある理由を説明する方法で具体的には、説明、通常の特定発話の検出された上位のインテントが類似する状況2 つのインテントの間で 50 対 50 の分割などの信頼度スコア。このような状況で間違ったインテントを出力する可能性が高くなります。
LUIS は現在、いくつかのトラブルシューティング機能がサポートしていますを特定し、word レベルの視覚化がないと、分析ツールを確定していませんが発話の再トレーニング アクティブ ラーニングを含むことがさらに解決に役立つこのような不確実性。Scattertext とライムは、その制限を克服する上で役立ちます。
現在実行中の例として使用する単純なフィンテック ケースを見てみましょう。銀行の作業を行い、2 つのカテゴリに分類されるについてユーザーの質問で仕事を想像してみてください。
- 個人に関する質問の銀行口座など。
「私の預金残高がでしょうか。」
「当座預金アカウントの最新のトランザクションは何でしょうか。」
""したい節約明細をもう一度送信します。
「が送られてきた年 4 月給与まだでしょうか。」
「処理された日時、最後の携帯電話自動支払でしょうか。」
「マイ預金の年間料金は何でしょうか。」
「マイ当座預金の残高がでしょうか。」 - 質問やご要望借り換え、ローンなどをなどなどの他の銀行業務サービスについて:
""したい住宅ローンの料金についてのヘルプを表示するには
「ユーザーことができますにお話ししたに関する借り換えでしょうか。」
「1 年間、普通預金の年間料金は?」
「どのような用語が提供されます住宅ローンのでしょうか。」
「担当するユーザー住宅ローンのでしょうか。」
「預金の年間料金は何でしょうか。」
「、住宅ローンの金利を比較する方法の他の銀行にでしょうか。」
プランでは、自然言語理解するには、ユーザー要求の LUIS を使用します。これに着手する 1 つの方法は、2 つのインテントを作成し、それらを検出するために LUIS をトレーニングします。
最初のカテゴリのインテント PersonalAccountsIntent と 2 番目のカテゴリのインテント OtherServicesIntent を呼び出してみましょう。LUIS をトレーニングする前に示した発話例を使用できます。なしの最初の 2 つのインテントを非常に異なる必要がありますが、一般的な発話を自動的に呼び出される 3 番目の「キャッチ オール」インテントが作成されます。None インテントの他の例を指定することもできます。
トレーニング後、モデルを運用環境に発行できます。ようにも、LUIS の ui のさまざまなインテントの信頼度スコアと共に発話を表示できる図 1します。
図 1 PersonalAccountsIntent の発話の信頼度スコアを持つ
ダッシュ ボードでは、アプリケーションに関する基本的な概要統計情報を提供します。ダッシュ ボードを見る場合図 1PersonalAccountsIntent の最も低い信頼度スコアが 0.59 ありことは、発話の取得「コスト削減のアカウントの年間料金は何ですか?」がわかります 0.44 閉じる OtherServicesIntent は非常に分類するには、この発話の信頼度スコア。つまり、LUIS がないことを目的としたこのを分類する方法について非常に特定します。
理想的に他のインテントは非常に低いスコアは、非常に高い信頼度スコアが、1 つのインテントが、つまり確実性の度合いを高度に別に区別するのには、インテントをします。両方のインテントの発話リストを再検討する場合とよく似ています発話する別の例 (「とは、1 年間普通預金の年間料金」) は、ラベルが異なる OtherServicesIntent としてがわかります。
この情報を使用して、まったく異なる単語を使用する発話サンプルを微調整できます。
ここでは、各目的の 7 つの発話例を紹介しました。場合は (の LUIS は、最大 500 のさまざまなインテント分類できます執筆時点) で複数のインテントと各意図をより多くの発話例があったでしょうか。
明らかより体系的なアプローチは、このような課題に対処する必要です。以下では Scattertext とライムに役立てる方法を示します。
Scattertext を使用してインテント分類をについてください。
Scattertext、Jason Kessler、Python で記述されたオープン ソース ツールです。ソース コードと、あるチュートリアルが見つかりますbit.ly/2G0DLmpとという論文"Scattertext: 視覚化するためのブラウザー ベースのツールが異なるコーパス"で、ツールの詳細を説明していますbit.ly/2G05ow6.
Scattertext は、テキスト、記事、コーパスとも呼ばれる、2 つのコレクション間の類似点の相違点とを視覚化するためのツールとして考案されたあり、さまざまな機能が役に立つ場合があります。たとえば、絵文字もサポートしています。
この記事での相違点と共通点の 2 つのインテント、PersonalAccountsIntent と OtherServicesIntent 発話例では、視覚エフェクトを生成するためにツールを活用します。
Python バージョン 3 を必要とする、Scattertext をインストールするには、チュートリアルのインストール手順を従います。私は、Spacy、オープン ソース自然言語処理ライブラリ (spacy.io) をインストールして、Pandas (pandas.pydata.org) できるようにするもう 1 つのオープン ソース ライブラリがメモリ内に表形式のデータを連携にも推奨されます。
ここでは、Scattertext にフィードされる発話の例は、する必要があります。そのためには、発話とインテントのもう 1 つずつ、2 つの列を持つ CSV テーブルを作成します。発話列、改行文字で区切られた 1 つの文字列として発話例が含まれます。(Excel を使用している場合を使用できます Alt + Enter 1 つのセルに複数の行を入力する)。 目的の列は、インテント、ここでは、PersonalAccountsIntent と OtherServicesIntent のラベルが含まれます。そのため、この例の結果では、2 x 2 CSV テーブルにです。
コードを実行する Python を使用することができますようになりました図 2します。コードは CSV テーブルをまず Panda データ フレームに読み込むし、Scattertext、カテゴリ (インテント) と出力形式に関連するいくつかのパラメーターを指定することを経由で渡すことです。
図 2 コード Scattertext 視覚化
import scattertext as st
import space
import pandas as pd
examples_data_location = 'example.csv'
two_df = pd.read_csv(examples_data_location, encoding = 'utf8')
nlp = spacy.en.English()
corpus = st.CorpusFromPandas(two_df,
category_col='intent',
text_col='utterance',
nlp=nlp).build()
html = st.produce_scattertext_explorer(corpus,
category='PersonalAccountsIntent',category_name='PersonalAccountsIntent',
not_category_name='OtherServicesIntent', width_in_pixels=1000)
open("MSDN-Visualization.html", 'wb').write(html.encode('utf-8'))
Scattertext とインテントの両方によって共有されたそれぞれの目的では、一意の最上位の単語を示す視覚エフェクトを含む HTML ページが生成されます。また、特定の単語を検索できる検索ボックスがある場合に見つかると、視覚エフェクトで強調表示されます。混雑した視覚エフェクトでは、非常に便利なこれができます。図 3 Scattertext 出力は、この例を示します。
図 3 Scattertext の視覚化
相違点とインテントの間で共通発話例については各インテントの単語の頻度をカウントして簡単にする方法で単語を表示する Scattertext 動作を決定します。この時点では、カウントには、1 単語の式 (ユニグラム) のみが含まれます。ただし、「自動支払」などの複数の単語を含む式がある場合は、対象を指定するいくつかの事前処理を行うことができます。"Auto_pay"として"自動 pay"を表すことができます、
視覚エフェクト図 3 2 つのインテントを示しています — OtherServicesIntent は、X 軸と Y 軸の PersonalAccountsIntent します。右下に表示される単語は、上にある文字列が表示される状態はの発話の例に表示される可能性が高いもので「ローン」、「速度」などの OtherServicesIntent、発話の例に表示される可能性が高くなります"My"、「アカウントです」などの PersonalAccountsIntent 対角線上の単語は「削減」または「と」両方インテントの発話の例で現れる可能性があります。
Learning 両方インテントの発話の例に、特定の単語が頻繁に表示されることを信頼度の分類の精度を向上させるために発話例を微調整できます。
これを行う方法の 1 つより個別の単語を追加するかをレンダリングして識別しやすくするために両方の単語を頻繁に含める各インテントの発話の例を言い換えてもです。
Scattertext を使用する利点を各目的の 7 つだけの発話使用例と共におもちゃ例など、小さなデータ セットの場合でも、ツールから値を取得することはできます。明らかに、例については発話の目的がある場合より複雑なごとの相違点とそれらの間の類似点を検索することになります。Scattertext 迅速な視覚的に相違点と共通の理解に役立ちます。
使用できる Scattertext 同様の方法で、一度にインテントのペアを比較することによって複数の 2 つのインテントがある場合の注目すべきです。
ライムを使用してインテント分類の説明
今すぐ黄緑、またはローカル解釈可能なモデルに依存しない説明については、インテントの分類を説明することができますと呼ばれるオープン ソースのツールを見てみましょう。ソース コードと、あるチュートリアルが見つかりますbit.ly/2I4Mp9zとをアカデミックな研究論文"理由があなたを信頼しますか?。任意の分類器の予測を説明する"(bit.ly/2ocHXKv)。
ライムは Python で記述され、コードを実行する前に、チュートリアルでは、インストールの手順を利用できる図 4します。
図 4 発話を分析するライムの使用
import requests
import json
from lime.lime_text import LimeTextExplainer
import numpy as np
def call_with_utterance_list(utterance_list) :
scores=np.array([call_with_utterance(utterance) for utterance in
utterance_list])
return scores
def call_with_utterance(utterance) :
if utterance is None :
return np.array([0, 1])
app_url ='your_url_here&q='
r = requests.get(app_url+utterance)
json_payload = json.loads(r.text)
intents = json_payload['intents']
personal_accounts_intent_score =
[intent['score'] for intent in intents if intent['intent'] ==
'PersonalAccountsIntent']
other_services_intent_score = [intent['score'] for intent in intents if
intent['intent'] == 'OtherServicesIntent']
none_intent_score = [intent['score'] for intent in intents if
intent['intent'] == 'None']
if len(personal_accounts_intent_score) == 0 :
return np.array([0, 1])
normalized_score_denom = personal_accounts_intent_score[0]+
other_services_intent_score[0]+none_intent_score[0]
score = personal_accounts_intent_score[0]/normalized_score_denom
complement = 1 - score
return (np.array([score, complement]))
if __name__== "__main__":
explainer = LimeTextExplainer(class_names=['PersonalAcctIntent', 'Others'])
utterance_to_explain = 'What are annual rates for my savings accounts'
exp = explainer.explain_instance(utterance_to_explain,
call_with_utterance_list, num_samples=500)
exp.save_to_file('lime_output.html')
ライムは、イメージとテキストを含む別の様相の分類器を説明することができます。黄緑、word レベルからの洞察、発話のさまざまな単語を出力する、テキスト形式を使用します。ライム; に、分類子の選択肢としては、LUIS を使用して、中にさまざまな分類子を取り込むことができます。基本的に、ブラック_ボックスとして処理がいます。
次のように、ライムのテキスト バージョンの動作はほぼ。ランダムに、複数の変更や入力の発話のサンプルが任意の数の単語、し、それらの 1 つずつ LUIS の呼び出しを削除することで作成します。サンプルの数がパラメーター num_samples、によって制御されるで図 4 500 に設定されます。変更された発話の例の発話、「アカウントの年間は」と「どのような年間は私のコスト削減の単価」ですなどのバリエーションを含めることができます。
ライムし、信頼度スコアを分類の 1 つの単語の効果を予測する線形モデルに適合するのに LUIS から返される、信頼度スコアを使用します。この見積もりでは、どのように、信頼スコアは、発話から単語を削除して、分類器を実行した場合に変化する可能性を特定できます。 もう一度 (ここで示す以降)。
分類器の主な要件は、分類ラベルの信頼度スコアを出力します。さまざまなカテゴリによって経由での信頼スコアは、確率分布として扱われ、そのため、[0, 1] の範囲と合計すると 1 でなければなりません。LUIS 出力定義済みのインテントと、追加の範囲内の信頼スコア None インテントが、合計が 1 になるものが保証されていません。そのため、ライムを使用する場合は、LUIS スコアの合計が 1 には正規化します。(これは関数 call_with_utterance でです。)
記載されているコード図 4ライムを使用して、発話の予測に関する「とは、預金の年間料金」説明の生成 表示される HTML グラフを生成します図 5します。
図 5 ライムは出力を「とは、預金の年間料金」 発話
図 5 PersonalAccountsIntent ではなく他の 2 つのインテント、OtherServicesIntent および None では、ここに重点を置いて、発話の予測の確率を表示できます。(確率が非常に近いが完全に正規化により LUIS での信頼度スコアの出力と同じに注意してください)。 PersonalAccountsIntent (これらは単語を青色のバーの上も発話テキストに青色で強調表示されます) として、インテントを分類するための最も重要な単語を表示することもできます。バーの重みは、分類の信頼度スコアに影響を示します、発話から単語を削除しますか。そのため、たとえば、"my"はここでは、発話の意図を検出するための最も重要な効果を持つ単語です。発話から削除した場合は、信頼スコア 0.26 に 0.56 から 0.30、して軽減するが必要です。これは、ライムによって生成された見積もりです。実際には、ときに単語を削除して、「預金の年間料金は何ですか?」に LUIS 発話の供給、結果は、PersonalAccountsIntent の信頼スコアは 0.26、自信を意図が分類 OtherServicesIntent、としてようになりました0.577 についてのスコア付け (を参照してください図 6)。
図 6 の結果、「とは、預金の年間料金」 クエリ
{
"query": "what are annual rates for savings accounts",
"topScoringIntent": {
"intent": "OtherServicesIntent",
"score": 0.577525139
},
"intents": [
{
"intent": "OtherServicesIntent",
"score": 0.577525139
},
{
"intent": "PersonalAccountsIntent",
"score": 0.267547846
},
{
"intent": "None",
"score": 0.00754897855
}
],
"entities": []
}
その他の重要な単語は、「アカウント」と「削減」と"my"Scattertext によって提供されるもののような洞察を提供するには。
重要な負の重みを持つ 2 つの重要な単語は「年」と「率」 これは、発話から削除すると、PersonalAccountsIntent として分類される発話の信頼度スコアが増加することを意味します。Scattertext で「料金」はそうでは不思議はないために、OtherServicesIntent、発話の例では一般的なことを示しました。
ただし、新しい何かライムから学ぶことがありますが、「年」という単語がここで、目的としたが、PersonalAccountsIntent に属していない LUIS を決定するために重要との信頼度スコアを引き上げられる見込みですが、削除します。0.27 によって PersonalAccountsIntent します。実際には、年間、発話を供給する前に削除してより高い信頼度スコアの取得 PersonalAccountsIntent 目的、つまり 0.71 (を参照してください図 7)。
図 7 の結果、「コスト削減のアカウントの料金とは」 クエリ
{
"query": "what are rates for my savings accounts",
"topScoringIntent": {
"intent": "PersonalAccountsIntent",
"score": 0.71332705
},
"intents": [
{
"intent": "PersonalAccountsIntent",
"score": 0.71332705
},
{
"intent": "OtherServicesIntent",
"score": 0.18973498
},
{
"intent": "None",
"score": 0.007595492
}
],
"entities": []
}
ライムでは、この方法で、そのドライブの分類の信頼度スコアの重要な単語を識別するのに役立ちます。したがってインテント分類の正確性を向上させるために、発話の例を微調整に役立つ詳細情報を提供できます。
まとめ
ことが明らかに NLU、に基づいてアプリケーションを開発する際にいくつかの発話の目的の予測することは困難ではなく、分類の正確性を向上させるために発話の例を微調整する方法の理解を深めるで受けることができます。
Word レベルの相違点と発話間の類似性を理解することのタスクは、調整プロセスの具体的なガイダンスを生成できます。
紹介したオープン ソース ツールが 2 つ、Scattertext と黄緑、インテントの予測に影響を与える重要な単語を識別することによって単語のレベルのガイダンスを提供します。Scattertext は相違点と共通の発話の例については、word の周波数を視覚化するライム インテント分類信頼度スコアに影響を与える重要な単語を識別します。
これらのツールがビルドより NLU ベースの製品 LUIS を使用してを役立つと思います。
Zvi Topolさまざまな業種、マーケティング分析、メディア、エンターテイメント、産業モ ノのインターネットなどのデータ科学者として携わっています。彼が正常に配信し、複数マシン学習および分析のプロジェクトなど、自然言語と音声のインターフェイス、コグニティブ検索、ビデオの分析、レコメンダー システムおよびマーケティングの意思決定支援システムがあります。彼に連絡してzvitop@gmail.comします。
この記事のレビューに協力してくれたマイクロソフト技術スタッフの Ashish Sahu