使用这些最佳做法改进项目,并向客户端应用程序或聊天机器人的最终用户提供更好的结果。
提取
自定义问题解答持续改进着从内容提取问答对的算法,并扩展支持的文件和 HTML 格式的列表。 一般情况下,常见问题解答页面应单独存在,且不会与其他信息合并。 产品手册应该具备明确的标题,并且最好有一个索引页。
创建有价值的问题和解答
我们使用以下问答对列表来表示项目。 此方法有助于突出显示为自定义问题解答创建项目时的最佳做法。
| 问题 | Answer | 
|---|---|
| 我想买辆车 | 买车有三个选项。 | 
| 我想购买软件许可证 | 软件许可证可以在网上免费购买。 | 
| Microsoft 股价是多少? | 200 美元。 | 
| 如何购买 Microsoft 服务 | Microsoft 服务可以在线购买。 | 
| 想要销售汽车 | 发送汽车图片和文档。 | 
| 如何获取对标识卡的访问权限? | 通过公司门户应用以获取标识卡。 | 
应何时将备选问题添加到问答对?
自定义问题解答使用基于转换器的排名程序,它负责处理在语义上类似于项目中问题的用户查询。 例如,请查看以下问答对:
问:Microsoft 股价是多少?答:200 美元。
该服务可为语义类似的查询返回预期响应,例如:
“Microsoft股票的价值是多少? “Microsoft的股价是多少?” “一股微软的价格是多少?” “Microsoft股票的市值是什么?” “Microsoft股票的市场价值是什么?”
系统为其响应分配的置信度分数可能会有所不同。 此变化取决于输入查询与原始问答对的差异程度。
在某些情况下,需要客户添加备选问题。 如果您已验证特定查询未返回正确的答案,尽管项目中有正确答案,我们建议采取进一步行动。 将该查询作为备用问题添加到预期的问答对。 此步骤可帮助确保用户将来收到正确的响应。
对于每个问答对,有多少个备选问题最佳?
用户可以根据需要添加任意数量的备用问题,但只考虑前 5 个问题进行核心排名。 但是,其余部分对于精确匹配应用场景非常有用。 我们还建议将不同的意向/不同的备用问题保留在顶部,以提高相关性和分数。
自定义问题解答中的语义理解应该能够处理类似的备选问题。
超过 10 个问题后,投资回报会下降。 即使包含超过 10 个备用问题,也专注于尽可能使前 10 个问题在语义上有所不同。 这样做可确保这 10 个问题涵盖答案的所有可能意图。 对于本部分开头的项目,在问答对 #1 中,无需添加备选问题,例如 如何买车 或 我想买车。 而添加替代性问题,如 如何购买汽车 和 有哪些购买车辆的方式 可能很有用。
什么时候将同义词添加到项目?
自定义问题解答提供在项目级别使用同义词的灵活性。
为获得更好的关联性,你需要提供最终用户打算交换使用的首字母缩写词列表。 以下列表详细介绍了可接受的首字母缩略词:
- 
              
MSFT- Microsoft - 
              
ID- 标识 - 
              
ETA- 预计推出时间 
除了首字母缩略词,如果你认为字词在特定域的上下文中相似,而泛型语言模型并不认为它们相似,最好将它们添加为同义词。 例如,生产汽车型号 X 的汽车公司接收查询,如 我的汽车音频不起作用 ,该项目有关于 修复汽车 X 音频的问题。然后,我们需要添加“X”和“car”作为同义词。
基于转换器的模型已处理大多数常见的同义词事例,例如: Purchase - Buy、Sell - Auction、Price - Value。 对于另一个示例,请考虑以下问答对:问: Microsoft股票的价格是多少? 答: 200美元。
如果用户提问,如Microsoft股票价值、Microsoft股价、Microsoft股票价值、Microsoft股价或仅股票价值,你仍应能够提供正确的答案。 保持这种清晰度非常重要,尽管项目最初不包含 共享、 价值和 价值 等术语。
同义词中不允许使用特殊字符。
如何处理小写/大写字符?
回答答案时需要考虑到大小写,但系统非常智能,知道何时忽略大小写。 所以即便大小写错误,你应该也不会看到任何可识别的差异。
对于多轮问题,问答对的优先级是怎样的?
当项目包含分层关系(无论是手动添加还是通过提取)时,将应用特殊处理。 如果上一个响应解决了属于一组相关问答对的问题,则会影响处理后续查询的方式。 对于下一个查询,我们首先稍微优先考虑所有子问答对。 然后优先考虑同辈问答对,随后依次是孙级问答对。 
              自定义问题解答 REST API 与任何查询一起,都需要具有 context 属性的 previousQnAId 对象,该属性表示下一个靠前的答案。 根据上面的 QnAID ,会提升所有相关 QnAs。
如何处理口音?
所有主要欧洲语言的口音都受支持。 如果查询的口音不正确,置信度分数可能略有不同,但服务仍返回相关答案,并使用模糊搜索处理轻微错误。
如何处理用户查询中的标点?
在将标点符号发送到排名堆栈之前,在用户查询中会忽略标点符号。 理想情况下,它不应影响相关性分数。 忽略的标点如下:,?:;\"'(){}[]-+。./!*؟
聊天内容
向机器人中添加聊天内容可以轻松地使其更健谈而有趣。 在创建项目时,可以轻松地从预定义的个性添加聊天数据源,并随时更改它们。 了解如何向知识库添加聊天内容。
支持多种语言的聊天。
选择一种个性
聊天支持多种预定义的个性:
| 个性 | 自定义问题解答数据集文件 | 
|---|---|
| Professional | qna_chitchat_professional.tsv | 
| 友好 | qna_chitchat_friendly.tsv | 
| 有趣 | qna_chitchat_witty.tsv | 
| 体贴 | qna_chitchat_caring.tsv | 
| 热情 | qna_chitchat_enthusiastic.tsv | 
响应既有正式的,也有非正式的和粗鲁的。 应该选择与所需机器人语气最接近的个性。 可以查看数据集,并选择一个用作机器人基础的数据集,然后自定义响应。
编辑特定于机器人的问题
有一些针对机器人的特定问题是聊天数据集的一部分,并配有通用答案。 更改这些答案,使之能够最好地反映机器人的细节。
建议让以下聊天问答对更详细具体:
- 你是谁?
 - 该怎么办?
 - 你多大了?
 - 谁创建了你?
 
添加带有元数据标记的自定义聊天
如果添加自己的聊天问答对,请确保添加元数据,以便返回这些答案。 元数据名称/值对为 editorial:chitchat。
搜索答案
自定义问题解答 REST API 同时使用问题和答案来搜索用户查询的最佳答案。
只有在答案不相关的情况下才搜索问题
如果不想搜索答案,请使用 RankerType=QuestionOnly。
例如,当项目是首字母缩略词的目录,并将其作为问题,将其完整形式作为答案时。 答案的值无助于搜索相应的答案。
排名/评分
请确保充分利用受支持的排名功能。 这样做可以提高给定用户查询得到相应响应的可能性。
选择一个阈值
用作阈值的默认置信度分数为 0,但是,可以根据需要更改项目的阈值。 由于项目各不相同,因此应该进行测试,选择最适合项目的阈值。
选择 Ranker 类型
默认情况下,自定义问题解答会搜索问题和答案。 如果只想要搜索问题,则在 REST API 请求的 POST 正文中使用 RankerType=QuestionOnly 来获取答案。
添加替代问题
替代问题,可提高用户查询匹配到结果的可能性。 如果同样的问题能以多种方式提出,则替代问题就很有用。 备用问题可能包括句子结构和单词样式的更改。
| 原始查询 | 备用查询 | 更改 | 
|---|---|---|
| 是否有停车的地方? | 你们有停车场吗? | 句子结构 | 
| 嗨 | 呦 你好  | 
措辞方式或俚语 | 
使用元数据标记筛选问题和解答
元数据增加了客户端应用程序知道它不应获取所有答案的功能,而是缩小基于元数据标记的用户查询结果的范围。 即使查询相同,项目答案也可能因元数据标记而有所不同。 例如, 停车地点 的答案可能会因分支位置而异。 如果元数据为 Location:Seattle,则答案与元数据是否为 Location: Redmond 不同。
使用同义词
英语中对同义词提供一定程度的支持,可使用不区分大小写的单词更改将同义词添加到具有不同形式的关键字中。
| 原始字 | 同义词 | 
|---|---|
| buy | 购买 网上银行 网上银行  | 
使用不同的词来区分问题
如果每个问题都有不同需求,那么最好使用匹配排名算法,该算法会将用户查询与项目中的问题相匹配。 如果问题间存在重复的相同词组,则会降低为含有这些词的给定用户查询选择正确答案的概率。
例如,对于以下问题,你可能有两个不同的问答对:
| 问题 | 
|---|
| 停车位置在哪里 | 
| ATM 位置在哪里 | 
由于这两个问题使用类似措辞,这种相似性可能导致许多用户查询得到相似的评分,这些查询的表达方式类似于位置<x>。 相反,请尝试清晰地区分你的查询。 例如,使用特定问题,例如 停车场的位置 和 ATM 的位置。 避免使用一般字词(如 位置),因为它们可能会在项目中出现许多不同的问题。
协作
自定义问题解答允许用户在项目上进行协作。 用户需要具有对相关 Azure 资源组的访问权限,以便访问项目。 一些组织可能希望外包项目的编辑和维护工作,且仍然能够保护 Azure 资源的访问权限。 在不同订阅中设置两个完全相同的语言资源(具有两个完全相同的自定义问题解答项目)并选择一个用于编辑测试循环,即可完成这一编辑者-审批者模型。 测试完成后,将导出项目内容。 然后,使用 导入-导出 过程传输它们。 此过程将内容移动到审批者的语言资源,后者部署项目并更新终结点。
主动学习
主动学习在提供大量基于用户的高质量和高数量的查询时,可以最好地建议备选问题。 请务必允许客户端应用程序的用户查询在没有审查的情况下参与主动学习反馈循环。 在 Language Studio 中显示了建议提出的问题后,即可审阅并接受或拒绝这些建议。