これらのベスト プラクティスを利用してプロジェクトを改善し、クライアント アプリケーションまたはチャット ボットのエンド ユーザーにより良い情報を提供します。
抽出
カスタム質問応答は、コンテンツから質問と回答のペアを抽出するアルゴリズムを継続的に改善し、サポートされるファイルと HTML 形式のリストを拡大しています。 一般的に、FAQ ページは独立させ、他の情報と組み合わせないでください。 製品マニュアルにはわかりやすい見出しを付けてください。索引ページを付けることもお勧めします。
優れた質問と回答の作成
カスタム質問応答のプロジェクトを作成する際のベスト プラクティスを強調するために、プロジェクトの表現として次の質問と回答のペアのリストを使いました。
質問 | Answer |
---|---|
車を買いたい | 車を購入するには 3 つの選択肢があります。 |
ソフトウェア ライセンスを購入したい | ソフトウェア ライセンスは手数料なしでオンライン購入できます。 |
Microsoft の株式の価格はいくらですか? | $200 です。 |
Microsoft サービスを購入する方法 | Microsoft サービスはオンラインで購入できます。 |
車を売りたい | 車の写真と書類を送信してください。 |
ID カードへのアクセスを取得する方法 | ID カードを取得するには、ポータル サイト経由で申請します。 |
質問と回答のペアに代わりの質問を追加する必要がある場合
カスタム質問応答には、プロジェクト内の質問に意味的に似たユーザー クエリを処理するトランスフォーマーベースのランカーが採用されています。 たとえば、次の質問と回答のペアについて考えてみます。
質問: Microsoft の株式の価格はいくらですか?回答: $200 です。
サービスは、次のような意味的に類似したクエリに対して予期される応答を返すことができます。
"Microsoft の株式はどのくらいの価値がありますか? "Microsoft 株の価値はどれくらいですか?" "Microsoft の株価はいくらですか?" "Microsoft の株式の市場価値はいくらですか?" "Microsoft 株の市場価値はどれくらいですか?"
ただし、システムが正しい応答を返す信頼度スコアは、入力クエリによって、また、元の質問回答ペアとの違いによって異なる点を理解することが重要です。
お客様が代わりの質問を追加する必要がある特定のシナリオがあります。 特定のクエリに対して、プロジェクト内に存在しているにもかかわらず正しい回答が返されないことが既に確認されている場合は、目的の質問回答ペアにそのクエリを代わりの質問として追加することをお勧めします。
代わりの質問の最適な数は、質問回答ペアあたり何個ですか?
ユーザーは必要な数の代わりの質問を追加できますが、コア ランク付けでは最初の 5 つの質問のみが考慮されます。 ただし、残りの部分は完全一致のシナリオに役立ちます。 また、関連性とスコアを向上させるために、異なる意図/個別の代替質問を先頭に置くことをお勧めします。
カスタム質問応答における意味の理解では、同様の代わりの質問に対応できる必要があります。
質問が 10 個を超えると、費用対効果は減少し始めます。 10 個を超える代わりの質問を追加する場合でも、最初の 10 個の質問を可能な限り意味的に異なるものにしてださい。そうすることで、回答のすべての種類の意図が、これらの 10 個の質問によって取得されます。 このセクションの冒頭にあるプロジェクトでは、質問回答ペア #1 で、"車を買うには"、"車を購入したい" などの代わりの質問を追加する必要はありません。 一方で、"車を購入する方法"、"自動車購入の選択肢は何ですか" などの代わりの質問を追加すると役に立ちます。
プロジェクトに同意語を追加する場合
カスタム質問応答は、サービス全体のプロジェクト間で同意語が共有される QnA Maker とは異なり、プロジェクト レベルで同意語を使う柔軟性を備えています。
関連性を高めたい場合は、エンド ユーザーが同じ意味で使用すると想定される頭字語の一覧を指定する必要があります。 許容される頭字語の一覧を次に示します。
MSFT
– MicrosoftID
– IDETA
– 到着予定時刻
頭字語とは別に、特定のドメインのコンテキストで類似していると思われる単語が、汎用的な言語モデルでは類似と見なされない場合には、それらをシノニムとして追加することをお勧めします。 たとえば、モデル X の自動車を生産している自動車会社が "車のオーディオが故障している" などのクエリを受け取り、プロジェクトに "自動車 X のオーディオの修理" に関する質問がある場合は、同意語として "X" と "自動車" を追加する必要があります。
トランスフォーマー ベースのモデルでは、一般的なシノニムのほとんどのケースが既に処理されています。たとえば、Purchase – Buy
(購入)、Sell - Auction
(販売)、Price – Value
(価値) などです。 別の例として、次の質問と回答のペアを考えてみます。Q: "Microsoft の株式の価格はいくらですか?" A: "$200 です。"
"Microsoft 株式の価格"、"Microsoft 株の価格"、"Microsoft 株式の価値"、"Microsoft 株の価値"、"株価" などのユーザー クエリを受け取った場合、これらのクエリに、もともとプロジェクトには存在しない "株"、"価格"、"価値" などの単語が含まれていても、正しい回答を得ることができます。
同意語に特殊文字は使用できません。
大文字と小文字の処理方法
質問応答は、大文字と小文字を区別しますが、それを無視すべき場合を理解できる十分なインテリジェンスを備えています。 大文字と小文字が間違っていることによる、認識できるほどの違いは生じません。
複数ターンの質問に対して質問回答ペアの優先順位が決定される方法
プロジェクトに階層リレーションシップ (手動または抽出による追加) があり、前の応答が他の質問回答ペアに関連する回答だった場合、次のクエリについては、子の質問回答ペア、兄弟の質問回答ペア、孫の質問回答ペアのすべてを、この順序で少し優先します。 カスタム質問応答 REST API では、クエリと共に、最後の上位の回答を示すプロパティ previousQnAId
を持つ context
オブジェクトを与える必要があります。 この直前の QnAID
に基づいて、関連するすべての QnAs
がブーストされます。
アクセントの処理方法
すべての主要なヨーロッパ言語について、アクセントがサポートされています。 クエリのアクセントが正しくない場合、信頼度スコアは若干異なる場合がありますが、サービスは関連する回答を返し、あいまい検索を利用して軽微なエラーに対処します。
ユーザー クエリでの句読点の処理方法
ランク付けスタックへの送信前、ユーザー クエリの句読点は無視されます。 関連性スコアに影響を与えないことが理想的です。 無視される句読点は次のとおりです。,?:;\"'(){}[]-+。./!*؟
おしゃべり
少ない労力でボットをより話し上手で魅力的にするために、おしゃべりをボットに追加します。 プロジェクトの作成時に、事前定義済みの性格に対応したおしゃべりデータ ソースを簡単に追加し、いつでも性格を変更することができます。 おしゃべりをナレッジ ベースに追加する方法を学びます。
おしゃべりは多くの言語でサポートされています。
性格の選択
おしゃべりでは、次のいくつかの事前定義済みの性格がサポートされています。
パーソナリティ | カスタム質問応答 - データセット ファイル |
---|---|
2 次元形式 | qna_chitchat_professional.tsv |
Friendly | qna_chitchat_friendly.tsv |
Witty | qna_chitchat_witty.tsv |
Caring (温かい) | qna_chitchat_caring.tsv |
Enthusiastic (熱心) | qna_chitchat_enthusiastic.tsv |
改まった応答からくだけた応答、非礼な応答まで可能です。 ボットに演じさせたい雰囲気に最も近い性格を選択する必要があります。 データセットを表示し、ボットの基本として機能するデータセットを選択した後、応答をカスタマイズすることができます。
ボット固有の質問の編集
おしゃべりデータ セットの一部であり、一般的な回答が入力されているボット固有の質問がいくつかあります。 ボットの詳細を最も的確に反映するように、これらの回答を変更します。
次のようなおしゃべりの質問と回答のペアをより具体的に設定することをお勧めします。
- ユーザーはだれか
- 何を実行できるか
- 何歳ですか?
- あなたを創造したのは誰ですか?
- こんにちは
メタデータ タグを使用したカスタムのおしゃべりの追加
独自のおしゃべりの質問と回答のペアを追加する場合は、必ずメタデータを追加して、これらの回答が返されるようにします。 メタデータの名前と値のペアは editorial:chitchat
です。
回答の検索
カスタム質問応答 REST API は、質問と回答の両方を使って、ユーザーのクエリに対する最適な回答を検索します。
回答が適切でない場合にのみ質問を検索する
回答を検索しない場合は、RankerType=QuestionOnly
を使用します。
この例としては、プロジェクトが、質問としての頭文字と、回答としてのその完全形を含むカタログである場合です。 回答の値は、適切な回答を検索するためには役立ちません。
ランキング/スコア
サポートされているランク付け機能を効果的に活用してください。 それにより、ユーザーからの問い合わせに適切な回答が与えられる可能性が上がります。
しきい値の選択
しきい値として使用される既定の信頼度スコアは 0 ですが、ニーズに基づいてプロジェクトのしきい値を変更できます。 すべてのプロジェクトは異なっているため、プロジェクトに最も適したしきい値をテストして選ぶ必要があります。
ランカーの種類の選択
既定では、カスタム質問応答は質問と回答を検索します。 質問のみを検索して、回答を生成する場合、REST API 要求の POST 本文で RankerType=QuestionOnly
を使用します。
代わりの質問を追加する
代わりの質問を用意すること (別の表現で言い換えること) で、ユーザーからの問い合わせに一致する可能性が向上します。 代わりの質問は、同じ質問にさまざまな表現が使われるときに役立ちます。 これには、文の構造や言葉遣いの変化が含まれることがあります。
元の質問 | 代わりの質問 | Change |
---|---|---|
駐車場は空いていますか? | 駐車場はありますか? | 文の構造 |
やあ | よう おい |
言葉遣いまたはスラング |
メタデータ タグを使用して質問と回答をフィルター処理する
メタデータは、クライアント アプリケーションがすべての回答を取得する代わりにメタデータ タグに基づいてユーザー クエリの結果を絞り込む必要があることを認識する機能を追加します。 プロジェクトの回答は、クエリが同じであっても、メタデータ タグに基づいて異なる場合があります。 たとえば、"where is parking located" (駐車場はどこですか) という問いに対し、レストランの支店の場所が違えば、つまり、Location: Seattle (所在地: シアトル) のときと、Location: Redmond (所在地: レドモンド) のときで答えが変わります。
同義語を使用する
英語では同義語をある程度サポートしていますが、さまざま言い方があるキーワードに同義語を追加するには、大文字と小文字が区別される言葉の変更機能を利用します。
元の語 | シノニム |
---|---|
買う | 購入する net 銀行 ネット バンキング |
質問を区別する目的で明確な言葉を使う
優先度付けアルゴリズムはユーザーからのクエリとプロジェクト内の質問を一致させるアルゴリズムです。これは、それぞれの質問が異なるニーズに対処する場合に最も効果を発揮します。 複数の質問で同じ言葉が繰り返し使われていると、その言葉が含まれる問い合わせが届いたとき、正しい回答が選ばれる可能性が下がります。
たとえば、2 つの個別の質問と回答のペアがあり、次のような質問内容であるとします。
疑問がある場合 |
---|
駐車場所はどこですか |
ATM の "場所" はどこですか |
これら 2 つの質問は非常によく似た語で表現されていますが、この類似性のために、"<x>
の場所はどこですか" のように表現されるユーザーの問い合わせの多くが非常に近いスコアになる可能性があります。 代わりに、プロジェクト内の多くの質問に存在するかもしれない "場所" ような語を避け、"駐車場はどこですか" や "ATM はどこですか" のような質問で違いを明確にしてください。
共同作業
カスタム質問応答により、ユーザーはプロジェクトで共同作業を行うことができます。 プロジェクトにアクセスするためには、関連付けられた Azure リソース グループへのアクセス権がユーザーに必要です。 プロジェクトの編集と保守管理を外注する組織もありますが、その場合でも Azure リソースへのアクセスを保護できます。 この編集者と承認者のモデルは、異なるサブスクリプションで同じカスタム質問応答プロジェクトを持つ 2 つの同一の言語リソースを設定し、1 つを編集/テスト サイクル用に選ぶことによって実現されます。 テストが終了したら、インポート/エクスポート プロセスを利用してプロジェクト コンテンツをエクスポートし、承認者の言語リソースに転送します。この承認者が最終的にプロジェクトをデプロイし、エンドポイントを更新します。
アクティブ ラーニング
アクティブ ラーニングは、幅広い質と量のユーザー ベースのクエリがある場合に、代替の質問を提案するという最高の仕事をします。 クライアント アプリケーションのユーザー クエリが、検閲なしのアクティブ ラーニングのフィードバック ループに参加できるようにすることが重要です。 Language Studio で質問が提案されたら、それらの提案をレビューして、承認または拒否できます。