使用这些最佳做法改进项目,并向客户端应用程序或聊天机器人的最终用户提供更好的结果。
自定义问题解答持续改进着从内容提取问答对的算法,并扩展支持的文件和 HTML 格式的列表。 一般情况下,常见问题解答页面应单独存在,且不会与其他信息合并。 产品手册应该具备明确的标题,并且最好有一个索引页。
我们使用了以下问答对列表来作为项目的表示形式,从而在创作用于自定义问题解答的项目时突出显示最佳做法。
问题 | Answer |
---|---|
我想买辆车 | 买车有三个选项。 |
我想购买软件许可证 | 软件许可证可以在网上免费购买。 |
Microsoft 股价是多少? | 200 美元。 |
如何购买 Microsoft 服务 | Microsoft 服务可以在线购买。 |
想要销售汽车 | 请发送汽车照片和文档。 |
如何获取对标识卡的访问权限? | 通过公司门户应用以获取标识卡。 |
自定义问题解答使用基于转换器的排名程序,它负责处理在语义上类似于项目中问题的用户查询。 例如,请查看以下问答对:
问:Microsoft 股价是多少?答:200 美元。
该服务可为语义类似的查询返回预期响应,例如:
“Microsoft 股价价值多少? “Microsoft 的股票价值是多少?” “每股 Microsoft 值多少?” “Microsoft 股票市值是多少?” “每股 Microsoft 股票的市值是多少?”
但是,请务必了解,系统返回正确响应的置信度分数会因输入查询和原始问答对的不同而不同。
在某些情况下,需要客户添加备选问题。 如果已经验证了对于特定查询,无论是否出现在项目中,都不会返回正确答案,建议将该查询作为备用问题添加到预期的问答对。
用户可以根据需要添加任意数量的备用问题,但核心排名只考虑前 5 个问题。 但是,其余问题对于完全匹配方案非常有用。 还建议将不同的意向备用问题保留在顶部,从而提高相关性和分数。
自定义问题解答中的语义理解应该能够处理类似的备选问题。
如果超过 10 个问题,投资回报率将开始减少。 即使你要添加 10 个以上的备选问题,也可以尝试将前 10 个问题尽可能设为语义不同的问题,从而通过这 10 个问题来捕获答案的所有意图。 对于本部分开头的项目,在第 1 组问答对中,不要求添加备用问题(例如“我如何购买汽车”、“我想买辆车”)。 而增加诸如“如何购买汽车”、“买车有哪些选择”等备选问题是有用的。
自定义问题解答提供在项目级别使用同义词的灵活性。
为获得更好的关联性,你需要提供最终用户打算交换使用的首字母缩写词列表。 下面列出了可接受的首字母缩写:
MSFT
- MicrosoftID
- 标识ETA
- 预计推出时间
除首字母缩写外,如果你认为在特定域的上下文中存在相似字词,并且泛型语言模型不会将其归为相似,则最好将它们添加为同义词。 例如,如果生产汽车型号 X 的汽车公司收到“我的汽车音响不工作”之类的查询,且项目具有有关“维修汽车 X 音响”的问题,需要将“X”和“汽车”添加为同义词。
基于转换器的模型已处理大多数常见的同义词事例,例如: Purchase - Buy
、Sell - Auction
、Price - Value
。 对于另一个示例,请查看以下问答对:问:“Microsoft 股价是多少?” 答:“200 美元”。
如果我们收到“Microsoft 股价价值”、“Microsoft 股票价值”、“Microsoft 股票市值”、“股价价值”等用户查询,即使项目中原本并不存在这些查询中的词,例如“股票”、“价值”和“市值”,你也应该能够获取正确答案。
同义词中不允许使用特殊字符。
回答答案时需要考虑到大小写,但系统非常智能,知道何时忽略大小写。 所以即便大小写错误,你应该也不会看到任何可识别的差异。
当项目具有层次结构关系时(手动或通过提取添加),且先前回复是与其他问答对相关的答案时,对于下一次查询,我们会轻微偏向于按照所有子级问答对、同级问答对和孙级问答对的顺序进行回复。 自定义问题解答 REST API 与任何查询一起,都需要具有 previousQnAId
属性的 context
对象,该属性表示下一个靠前的答案。 根据上面的 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,但是,可以根据需要更改项目的阈值。 由于项目各不相同,因此应该进行测试,选择最适合项目的阈值。
默认情况下,自定义问题解答会搜索问题和答案。 如果只想要搜索问题,则在 REST API 请求的 POST 正文中使用 RankerType=QuestionOnly
来获取答案。
替代问题,可提高用户查询匹配到结果的可能性。 如果同样的问题能以多种方式提出,则替代问题就很有用。 这可以包含句子结构和措辞方式的更改。
原始查询 | 备用查询 | 更改 |
---|---|---|
是否有停车的地方? | 你们有停车场吗? | 句子结构 |
嗨 | 呦 你好 |
措辞方式或俚语 |
元数据添加了一种功能,可让客户端应用程序知晓它不应采用所有答案,而是要根据元数据标记缩小用户查询的结果范围。 即使查询相同,项目答案也可能因元数据标记而有所不同。 例如,如果餐馆分店的位置不同(即,元数据是“位置:西雅图”和“位置:雷德蒙德”),则“停车位在哪里?”就会有不同的答案”。
英语中对同义词提供一定程度的支持,可使用不区分大小写的单词更改将同义词添加到具有不同形式的关键字中。
原始字 | 同义词 |
---|---|
buy | purchase net-banking net banking |
如果每个问题都有不同需求,那么最好使用匹配排名算法,该算法会将用户查询与项目中的问题相匹配。 如果问题间存在重复的相同词组,则会降低为含有这些词的给定用户查询选择正确答案的概率。
例如,对于以下问题,你可能有两个不同的问答对:
问题 |
---|
停车位置在哪里 |
ATM 位置在哪里 |
由于这两个问题使用很类似的单词来措辞,因此这种相似性可能导致许多措辞类似于“<x>
位置在哪里”的用户查询获得很类似的分数。 可以改为尝试使用“停车点在哪里”和“ATM 在哪里”之类的查询进行清晰的区分,从而避免使用“位置”这样的词,此类词存在于项目的许多问题中。
自定义问题解答允许用户在项目上进行协作。 用户需要具有对相关 Azure 资源组的访问权限,以便访问项目。 一些组织可能希望外包项目的编辑和维护工作,且仍然能够保护 Azure 资源的访问权限。 在不同订阅中设置两个完全相同的语言资源(具有两个完全相同的自定义问题解答项目)并选择一个用于编辑测试循环,即可完成这一编辑者-审批者模型。 完成测试后,请使用导入-导出流程将项目内容导出并转移到审批者语言资源,由审批者进行最终的项目发布和终结点更新。
主动学习在提供大量基于用户的高质量和高数量的查询时,可以最好地建议备选问题。 重要的是允许客户端应用程序的用户查询在没有审查的情况下参与主动学习反馈循环。 在 Language Studio 中显示了建议提出的问题后,即可审阅并接受或拒绝这些建议。