Transformer课程 业务对话机器人Rasa 3.x Testing Your Assistant(二)

Transformer课程 业务对话机器人Rasa 3.x Testing Your Assistant(二)

Transformer课程 业务对话机器人Rasa 3.x Testing Your Assistant(二)

Rasa官网


www.zeeklog.com  - Transformer课程 业务对话机器人Rasa 3.x Testing Your Assistant(二)

Comparing NLU Performance

如果您对NLU训练数据进行了重大更改(例如,将一个意图拆分为两个意图或添加了大量训练示例),则应运行完整的NLU评估。您需要比较NLU模型的性能,而不需要对NLU模型进行更改。

您可以通过在交叉验证模式下运行NLU测试来实现这一点:

rasa test nlu --cross-validation

您还可以在训练集上训练模型并在测试集上进行测试。如果您使用训练测试集方法,最好使用rasa数据分割来洗牌和分割数据,而不是使用静态NLU测试集,后者很容易过时。

您可以在rasa测试的命令行文档中找到选项的完整列表。

要进一步改进模型,请查看此超参数优化教程。

Comparing NLU Pipelines

为了最大限度地利用训练数据,您应该在不同的管道和不同数量的训练数据上训练和评估您的模型。

为此,请将多个配置文件传递给rasa test命令:

rasa test nlu --nlu data/nlu.yml
   --config config_1.yml config_2.yml

这将执行几个步骤:

从data/nlu.yml创建一个80%训练集 20%测试集。
从全局训练集中划分出一定百分比的数据。
根据剩余的训练数据,为每个配置提供训练模型。
在全局测试集中评估每个模型。

在步骤2中,使用不同百分比的训练数据重复上述过程,以了解如果增加训练数据量,每个管道将如何运行。由于训练不是完全确定的,因此针对每个指定配置,整个过程重复三次。

图中显示了所有训练中f1成绩的平均值和标准偏差。f1分数图以及所有训练/测试集、训练模型、分类和错误报告将保存到名为nlu_comparison_results的文件夹中。

检查f1分数图可以帮助您了解NLU模型是否有足够的数据。如果图表显示,当使用所有训练数据时,f1成绩仍在提高,则使用更多数据可能会进一步提高。但如果在使用所有训练数据的情况下,f1成绩保持稳定,添加更多数据可能没有帮助。

如果要更改运行次数或排除百分比,可以:

rasa test nlu --nlu data/nlu.yml
  --config config_1.yml config_2.yml
  --runs 4 --percentages 0 25 50 70 90

Interpreting the Output

Intent Classifiers

rasa测试脚本将为您的意图分类模型生成一个报告(intent_report.json)、混淆矩阵(intent_conflusion_matrix.png)和置信度直方图(intent_histogram.png)。

该报告记录了每个意图的准确度、召回率和f1分数,并提供了总体平均值。您可以使用–report参数将这些报告保存为JSON文件。

混淆矩阵显示哪些意图被误认为其他意图。任何被错误预测的样本都会被记录并保存到名为errors的文件中 ,errors.json更易于调试。

www.zeeklog.com  - Transformer课程 业务对话机器人Rasa 3.x Testing Your Assistant(二)


直方图允许您可视化所有预测的置信度,正确预测和错误预测分别以蓝色和红色条显示。提高训练数据的质量将使蓝色直方图条在绘图中上移,红色直方图条在绘图中下移。它还应有助于减少红色直方图条本身的数量。

www.zeeklog.com  - Transformer课程 业务对话机器人Rasa 3.x Testing Your Assistant(二)

Response Selectors

rasa测试评估响应选择器的方式与评估意图分类器的方式相同,生成一个报告(response_selection_report.json)、混淆矩阵(response.selection.conflusion.matrix.png)、置信度直方图(response.selection.histogram.png)和错误(response.selection.errors.json)。如果管道包含多个响应选择器,则将在单个报告中对其进行评估。

该报告记录检索意图的每个子意图的精度、召回率和f1度量,并提供总体平均值。您可以使用–report参数将这些报告保存为JSON文件。

Entity Extraction#

rasa测试报告可训练实体提取器训练识别的每个实体类型的召回率、精度和f1分数。

只有可训练的实体提取器(如DIETClassifier和CRFEntityExtractor)通过rasa测试进行评估。未对DucklingHTTPExtractor等预训练提取器进行评估。

如果任何实体的注释不正确,则评估可能会失败。一个常见的问题是实体不能在标记内停止或启动。例如,如果您有一个名称实体的示例,如[Brian](名称)的房子,则只有当您的标记器将Brian的房子拆分为多个标记时,此示例才有效。

Entity Scoring

为了评估实体提取,我们采用了一种简单的基于标记的方法。我们不完全考虑BILUO标签,而只考虑每个标记基础上的实体类型标签。对于“near Alexanderplatz”等位置实体,我们希望标签为LOC LOC,而不是基于BILOU的B-LOC L-LOC。

当涉及到评估时,我们的方法更加宽松,因为它奖励部分提取,而不惩罚实体的分割。例如,鉴于上述实体“near Alexanderplatz”和提取“Alexanderplatz”的系统,我们的方法奖励提取“Alexanderplatz”,并惩罚遗漏的单词“near”。

然而,基于BILOU的方法会将此标记为完全失败,因为它期望Alexanderplatz标记为实体(L-LOC)中的最后一个标记,而不是单个标记实体(U-LOC)。还要注意的是,“near”和“Alexanderplatz”的分离提取在我们的方法上会得到满分,而在基于BILOU的方法上会得到零分。

下面是对“near Alexanderplatz tonight”两种得分机制的比较:

www.zeeklog.com  - Transformer课程 业务对话机器人Rasa 3.x Testing Your Assistant(二)

Evaluating a Dialogue Model

通过使用测试脚本,您可以在一组测试故事上评估经过训练的对话模型:

rasa test core --stories test_stories.yml --out results

这将把所有失败的故事打印到results/failed_test_stories.yml中 。如果至少有一个动作预测错误,故事就会失败。

测试脚本还将把混淆矩阵保存到名为results/story_confmat.pdf的文件中。 对于域中的每个操作,混淆矩阵显示正确预测操作的频率以及预测错误操作的频率。

Interpreting the generated warnings

解释生成的警告#

测试脚本还将生成一个名为results/stories_with_warnings.yml文件,其中包含 action_unlikely_intent。该文件包含所有测试故事,在任何对话回合中都预测了其行动意图,但原始故事中的所有行动都预测正确。但是,如果一个测试故事最初包含一个不太可能的动作意图,例如,确保一个规则被设计为在一个不太可能的动作意图之后触发对话路径,但是策略集合没有这样做,那么相应的故事将以结果/失败的测试故事结束。results/failed_test_stories.yml是一个失败的故事。

这些故事是根据action_unlikely_intent 的预测来排序的。此严重性在预测时由 UnexpecTEDIntentPolicy意外终止策略本身计算。严重性越高,意图就越不可能,因此审查特定对话路径就变得越关键。

请注意,不太可能的行动意图是由“未预料到的”策略预测的,该策略在引擎盖下采用了基于机器学习的模型,因此也可能导致错误警告。如果训练故事中已经存在这些故事中的对话路径,则可以选择忽略这些警告。

Comparing Policy Configurations

要为对话模型选择配置,或为特定策略选择超参数,您需要衡量对话模型对以前从未见过的对话的概括程度。特别是在项目开始时,当您没有太多的真实对话来训练您的机器人时,您可能不想排除一些对话来用作测试集。

Rasa开源有一些脚本可以帮助您选择和微调策略配置。一旦您对它满意,您就可以在完整的数据集上训练您的最终配置。

要做到这一点,您首先必须针对不同的配置训练模型。创建两个(或更多)配置文件,包括要比较的策略,然后将它们提供给训练脚本以训练模型:

rasa train core -c config_1.yml config_2.yml \
  --out comparison_models --runs 3 --percentages 0 5 25 50 70 95

与NLU模型的评估方法类似,上述命令在多种配置和不同数量的训练数据上训练对话模型。对于提供的每个配置文件,Rasa开源将训练对话模型,其中0、5、25、50、70和95%的训练故事不包含在训练数据中。重复三次,以确保结果一致。

此脚本完成后,您可以将多个模型传递给测试脚本,以比较刚刚训练的模型:

rasa test core -m comparison_models --stories stories_folder
  --out comparison_results --evaluate-model-directory

这将评估stories_文件夹中的故事(可以是训练集或测试集)中的每个模型,并绘制一些图表,向您显示哪个策略执行得最好。由于之前的训练命令排除了一些训练数据来训练每个模型,因此上面的测试命令可以测量您的模型预测已完成故事的程度。要比较单个策略,请创建每个策略只包含一个策略的配置文件。

这个训练过程可能需要很长时间,所以我们建议让它在后台的某个地方运行,这样它就不会被打断。

Testing Action Code

用于测试动作代码的方法将取决于它的实现方式。例如,如果您连接到外部API,则应该编写集成测试,以确保这些API按照预期响应公共输入。无论您如何测试操作代码,都应该将这些测试包括在管道中,以便在每次进行更改时运行这些测试。

如果您有任何疑问或问题,请在我们论坛的专用测试部分与我们分享!

Rasa系列博客:

Read more

34个最优秀好用的Python开源框架!你用过几个?

34个最优秀好用的Python开源框架!你用过几个?

【导读】 人工智能和深度学习的热潮极大的带动了Python的发展,迅速在Python生态圈中催生了大批的涉及各个方面的优秀Python开源框架,今天小编就带你回顾下2018年度最优秀好用的Python开源框架。 下面是从2018年中近10000个python开源框架中评价整理的34个最为好用的开源框架,它们细分可以分为Python Toolkit、Web、Terminal、Code Editor、Debugging、complier、Data Related、Chart8类,分布情况如下图: Python ToolKit * Pipenv - 人类的Python开发工作流程 * * * Pyxel - 一个复古的Python游戏开发环境 * * * PyTest v3.5 - Python框架,可以轻松编写小型测试,然后进行扩展以支持复杂的功能测试 * * * Poetry - Python依赖和包管理框架 * * * Loguru - Python日志框架 * * * Faust - Python流应用开发库

By Ne0inhk
2020 必学的10大顶级 Python 库

2020 必学的10大顶级 Python 库

内容来源于网络 作为数据科学和机器学习相关的研究和开发人员,大家每天都要用到 python。在本文中,我们将讨论一些 python 中的顶级库,开发人员可以使用这些库在现有的应用程序中应用、清洗和表示数据,并进行机器学习研究。 资料展示: web开发请看: 10个对 Web 开发者最有用的 Python 库 我们将讨论以下 10 个库: * TensorFlow * Scikit-Learn * Numpy * Keras * PyTorch * LightGBM * Eli5 * SciPy * Theano * Pandas 简介 python 是最流行和使用最广泛的编程语言之一,它已经取代了业界许多编程语言。 python 在开发人员中流行的原因有很多。然而,最重要的一点是它有大量的库供用户使用。 python 的简单性吸引了许多开发人员为机器学习创建新的库。由于有大量的库,python 在机器学习专家中变得非常流行。 所以,这里要介绍的第一个库是 TensorFlow。 1.TensorFlow 什么是

By Ne0inhk
8个超流行的 Python 可视化工具包,爱了

8个超流行的 Python 可视化工具包,爱了

喜欢用 Python 做项目的小伙伴不免会遇到这种情况:做图表时,用哪种好看又实用的可视化工具包呢?之前文章里出现过漂亮的图表时,也总有读者在后台留言问该图表时用什么工具做的。下面,作者介绍了八种在 Python 中实现的可视化工具包,其中有些包还能用在其它语言中。快来试试你喜欢哪个? 用 Python 创建图形的方法有很多,但是哪种方法是最好的呢?当我们做可视化之前,要先明确一些关于图像目标的问题:你是想初步了解数据的分布情况?想展示时给人们留下深刻印象?也许你想给某人展示一个内在的形象,一个中庸的形象? 本文将介绍一些常用的 Python 可视化包,包括这些包的优缺点以及分别适用于什么样的场景。这篇文章只扩展到 2D 图,为下一次讲 3D 图和商业报表(dashboard)留了一些空间,不过这次要讲的包中,许多都可以很好地支持 3D 图和商业报表。 Matplotlib、Seaborn 和 Pandas 把这三个包放在一起有几个原因:首先 Seaborn 和 Pandas 是建立在 Matplotlib

By Ne0inhk
不破不立~EDG夺冠,用Python分析词云图展示粉丝弹幕数据,来感受粉丝的热情吧

不破不立~EDG夺冠,用Python分析词云图展示粉丝弹幕数据,来感受粉丝的热情吧

大家好~我是恰恰,好久不见啦~Python的乐趣就在于在互联网时代,能实现很多人工做不到的事~    虽然我不是经常玩游戏,但是我这该死的爱国情怀,在EDG夺冠的时候,我也是十分激动的! 北京时间11月6日,在英雄联盟S11总决赛中,中国LPL赛区战队EDG电子竞技俱乐部以3∶2战胜韩国LCK赛区战队DK,获得2021年英雄联盟全球总决赛冠军。 这个比赛也是备受全网瞩目: 微博热搜第一名,显示有8194万观看; bilibili平台,吸引3.5亿人气,满屏弹幕; 腾讯视频600万人看过; 斗鱼和虎牙平台的热度也是居高不下; 比赛结束后,央视新闻也发微博祝贺EDG战队夺冠; 我们不仅可以通过直播和新闻来感受比赛的整个过程,也可以通过Python来分析热点来感受粉丝的热情。 1. 简单说明 没看过直播的朋友不要紧,有回放呀!整个视频已经为大家整理好了,从开幕式,到五场比赛,再到夺冠时刻,一共7个视频。 每个视频中,都有粉丝发布的弹幕。今天要做的,就是获取每个视频里面的弹幕数据,看看粉丝在躁动的心情下,说了点啥? 不得不说,B站网页的变化速度真快,我记得去年还是很容

By Ne0inhk