watson-nlc-qa
はじめに
Q&A Chatbot を作成するためのモデルです。
コンセプト
使い方
const QaModel = ;const qa = cloudantCreds 'answer' nlcCreds;qa;
システム要件
次のサービスを使用してください。
- IBM Bluemix
- Node.js
- 6 以上
インストール
$ npm install watson-nlc-qa
参考情報
- このモデルを使用した Q&A Chatbot をこちらに開発しました。
目次
- APIs
- QaModel(cloudantCreds, dbname, nlcCreds, [classifierid])
- ask(text, callback)
- askAnswers(text, count, callback)
- askClassName(text, callback)
- getAppSettings(callback)
- createDatabase([callback])
- insertDesignDocument([mapFunction], [callback])
- insertDocuments(data, [callback])
- train(file, metadata, [mode], [callback])
- Tips
APIs
QaModel(cloudantCreds, dbname, nlcCreds, [classifierid])
Q&A モデルを生成します。
const QaModel = ;const qa = cloudantCreds 'answer' nlcCreds;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
cloudantCreds | Yes | object | Cloudant NoSQL DB のサービス資格情報 |
dbName | Yes | string | データベース名 |
nlcCreds | Yes | object | Natural Language Classifier のサービス資格情報 |
classifierId | No | string | Classifier ID。未設定または空文字の場合は使用可能な最新の Classifier を選択します。 |
-
cloudantCreds {object} Cloudant NoSQL DB のサービス資格情報
-
nlcCreds {object} Natural Language Classifier のサービス資格情報
ask(text, callback)
テキスト分類で回答 answer を取得します。
qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
text | Yes | string | 質問 |
callback | Yes | function | 取得した回答 answer を引数にコールバックする。 |
- 回答 answer
askAnswers(text, count, callback)
テキスト分類で回答配列 [answer] を取得します。取得する回答件数は1から10までの整数で指定できます。回答件数が1件の場合は回答 (配列ではない) を取得します。
qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
text | Yes | string | 質問 |
count | Yes | number | 取得する回答件数 (1〜10) |
callback | Yes | function | 取得した回答 answer を引数にコールバックする。 |
- 回答 answer
askClassName(text, callback)
クラス名により回答 answer を取得します。
qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
text | Yes | string | クラス名 |
callback | Yes | function | 取得した回答 answer を引数にコールバックします。 |
getAppSettings(callback)
アプリケーション設定 value を取得します。
qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
callback | Yes | function | 取得したアプリケーション設定 value を引数にコールバックします。 |
- アプリケーション設定 value
ID「app_settings」でデータベースに登録した文書をそのまま取得できます。
createDatabase([callback])
データベースを作成します。
qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
callback | No | function | 取得した結果 result を引数にコールバックします。 |
insertDesignDocument([mapFunction], [callback])
データベースに設計文書を登録します。
qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
mapFunction | No | string | マップファンクション。未設定または空文字の場合はデフォルトのマップファンクションで設計文書を作成します。 |
callback | No | function | 取得した結果 result を引数にコールバックします。 |
-
設計文書
-
デフォルトのマップファンクション
const MAP_FUNCTION = `function (doc) {if (doc._id !== 'app_settings') {var row = {"_id": doc._id,"_rev": doc._rev,"message": doc.message,"questions": doc.questions};emit(doc._id, row);}}`;
insertDocuments(data, [callback])
データを登録します。
qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
data | Yes | object | データ |
callback | No | function | 取得した結果 result を引数にコールバックします。 |
-
データ
train(file, metadata, [mode], [callback])
Classifier を作成します。
const trainingFile = fs;const metadata = "language": "ja" "name": "My Classifier";qa;
パラメータ | 必須 | 型 | 説明 |
---|---|---|---|
file | Yes | file | トレーニング CSV ファイル |
metadata | Yes | object | トレーニングメタデータ |
mode | No | boolean | true: Classifier を作成します / false: Classifier が一つ以上ある場合は作成しません。 |
callback | No | function | 取得した結果 result を引数にコールバックします。 |
-
トレーニング CSV ファイル
"こんにちは。","general_hello" "間違っています。","general_sorry" "ありがとう。","general_thanks" "自己紹介して。","general_whoareyou"
-
トレーニングメタデータ
Tips
データを初期登録する
データベース作成、設計文書登録、データ登録は個別にも実行できますが、次のようにすることでデータベース作成後に設計文書登録とデータ登録を実行できます。
// データベースを作成する。qa;
取得した回答を変更する
ask メソッドで取得した回答を条件によって変更したい場合は、コールバックに処理を記述することで実現できます。 以下は現在時刻 now によりあいさつを「おはようございます」、「こんにちは」、「こんばんは」、「お疲れ様です」に変更する例です。
// Q&A モデルを作成する。const qa = contextcloudantCreds contextDB_NAME contextnlcCreds;// こんにちはを変換する。const replaceHello = { return text;};// 条件により回答を確定する。const modify = { return answer;};// 質問する。const text = 'こんにちは';qa;
Natural Language Classifier を多段構成にする
次のように、連想配列に必要なQ&Aモデルを生成してください。この例は、classification で切り分け、general または diet に問合せる構成です。
const qa = "classification": cloudantCreds 'classification' nlcCreds '{classification の Classifier ID}' "general": cloudantCreds 'general' nlcCreds '{general の Classifier ID}' "diet": cloudantCreds 'diet' nlcCreds '{diet の Classifier ID}';const text = 'こんにちは';qa"classification";
classification の回答 answer は質問により general または diet が返るようにデータ登録とトレーニングをしてください。
-
データの例
-
トレーニングデータ (csv) の例
"こんにちは。","general" "ありがとう。","general" "全身運動でダイエットしたい。","diet" "小顔になりたい。","diet"