Ask Learn
Preview
Please sign in to use this experience.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Build 2016 から各種機能がアップデートされた自然言語解析ツールである LUIS (Language Understanding Intelligent Service)。日本語を含む 8 か国語対応になりました。
改めて LUIS による文章解析エンジン部分の作成方法と、アプリから LUIS を呼び出す利用方法について、ご紹介します。
※詳細な手順については、LUIS で天気情報 BOT を作ろう![日本語解析エンジン作成編] (Qiita)をご覧ください。
最新情報は ↑ https://www.microsoft.com/cognitive-services/en-us/news に掲載
LUIS (Language Understanding Intelligent Service) は自然言語を解析するツールで、入力された文章の分類、およびキーワードの抽出を行うエンジンを GUI で作成できます。
作成したエンジンは API 経由、または公開されている C# ライブラリー経由でアクセスでき、結果は JSON 形式で取得できます。
現在 β 版として利用可能で、アカウントは Microsoft アカウントに紐づけられます。また、作成したエンジンごとに Application ID と Application Key が発行され、アクセスする際にはこの ID と Key のペアが必要になります。
今回は例として、天気に関する問い合わせ文章を分析するエンジンを作成します。
天気情報アプリ (ユーザーからの自然言語入力に対して、天気情報を返答) の自然言語処理エンジンとしての利用を前提に、ユーザーからの入力を解析して、返答に必要なアクションの種類とそれに必要なキーワード(場所、日付時間など)を抽出する機能を設定します。
LUISでは入力された文章の解析結果(≒文章の意図)を Intent、抽出したいキーワードを Entity と呼びます。
今回は、Intent を以下の通り 3種類作成します。天気予報を知りたい場合 (getWeather) と ある特定の天気になるのかどうかを確認したい (verifyWeather) の場合で返答方法を変えたく、別の Intent として設定しています。
Intent は 文章を解析した種類というより、入力された文章に対する次のアクションの種類を意識して作成するのが良いかと思います。
入力文章 | Intent | Entity | ||
---|---|---|---|---|
Day | City | Weather | ||
今日、東京は雨が降りますか? | verifyWeather | 今日 | 東京 | 雨 |
明日の大阪の天気を知りたい | getWeather | 明日 | 大阪 | -- |
ヘルプ | getHelp | -- | -- | -- |
LUIS のWebサイト (https://luis.ai/) から 作成を行います。初回はアカウント作成フローになります。
その後の管理画面 から新規アプリケーション* を作成します。
* 作成する/した個々の解析エンジンを "Application" と呼びます。
Add a new application の画面で Application Domain を選択します。現在はドメインによる動作の違いはないようです...。(将来的には用語解析エンジンを Include するといった方向を期待してしまいますが。)
まずは Entity から作成し、その後 Entity を含む Intent を作成します。文字列、日付など予め用意されている Pre-Built Entity は日本語では未対応のため、Entity の一つとして作成する必要があります。
この後、入力が想定される文章を学習させていきます。文章で色付けされている箇所が Entity として認識されています。認識されない場合、文章解析が間違っている場合は、手動で修正を行い、再度学習させます。
API 経由で利用できるようにするには、公開を行います。こちらに表示される URL で このアプリケーション(エンジン) にアクセス可能になります。URL 中に Application ID と Application Key が含まれており、必要に応じてコピーして利用します。
*Query* に解析したい文章を入力すると、問い合わせ URL が生成されます。こちらのリンクから問い合わせ結果を取得(ダウンロード)できます。
上記のとおり天気に関する問い合わせ文章を分析するエンジンを作成しましたので、自然言語の入力を LUIS によって解析して利用するアプリを作成します。
今回は、Microsoft Bot Framework で、天気予報に関係する入力に応答する BOT アプリを作成します。C#テンプレートから Bot アプリケーションを作成し、NuGet パッケージマネージャーから LUIS を追加しておきます。
例えば、以下のようなコードで LUIS を呼び出す処理を行うことができます。Intent によってその後の処理を場合分けしています。
// 追加
using Microsoft.Cognitive.LUIS;
// Application ID, Application Key をセットして LuisClient を作成
string luisAppId = "YOUR_APP_ID";
string luisAppKey = "YOUR_APP_KEY";
LuisClient luisClient = new LuisClient(luisAppId, luisAppKey, true);
// LUIS に受信したメッセージを送って解析 (※activity.text はユーザー入力値)
LuisResult luisResult = await luisClient.Predict(activity.Text);
// 解析結果 (Intent) に応じた処理を実行
if (luisResult != null)
{
switch (luisResult.Intents[0].Actions[0].Name)
{
case "getWeather":
getWeather(luisResult); // 解析結果(GetWeather)に対応する処理
break;
case "verifyWeather":
verifyWeather(luisResult); // 解析結果(confirmWeather)に対応する処理
break;
default:
msg = "言葉が分かりませんでした";
break;
}
}
else
{
msg = "文章の解析に失敗しました";
}
取得した解析結果は JSON になっており、例えば下記のように単純に取り出すこともできます。
private void getWeather(LuisResult luisResult)
{
var entities = luisResult.GetAllEntities();
var city = "";
var day = "";
foreach (Microsoft.Cognitive.LUIS.Entity entity in entities)
{
switch (entity.Name)
{
case "City":
city = entity.Value;
break;
case "Day":
day = entity.Value;
break;
}
}
// 取得した Entity から返答文の作成 (※msg はユーザーへの返答(String))
msg = "[getWeather] "+ day + "の" + city + "の天気を調べますね";
}
Please sign in to use this experience.
Sign in