本文使用《使用ResponseSelector实现校园招聘FAQ机器人》中的例子,主要详解介绍train_nlu()函数中变量的具体值。

一.rasa/model_training.py/train_nlu()函数

  train_nlu()函数实现,如下所示:

def train_nlu(
config: Text,
nlu_data: Optional[Text],
output: Text,
fixed_model_name: Optional[Text] = None,
persist_nlu_training_data: bool = False,
additional_arguments: Optional[Dict] = None,
domain: Optional[Union[Domain, Text]] = None,
model_to_finetune: Optional[Text] = None,
finetuning_epoch_fraction: float = 1.0,
) -> Optional[Text]:
"""Trains an NLU model. # 训练一个NLU模型。 Args:
config: Path to the config file for NLU. # NLU的配置文件路径。
nlu_data: Path to the NLU training data. # NLU训练数据的路径。
output: Output path. # 输出路径。
fixed_model_name: Name of the model to be stored. # 要存储的模型的名称。
persist_nlu_training_data: `True` if the NLU training data should be persisted with the model. # 如果NLU训练数据应该与模型一起持久化,则为`True`。
additional_arguments: Additional training parameters which will be passed to the `train` method of each component. # 将传递给每个组件的`train`方法的其他训练参数。
domain: Path to the optional domain file/Domain object. # 可选domain文件/domain对象的路径。
model_to_finetune: Optional path to a model which should be finetuned or a directory in case the latest trained model should be used. # 可选路径,指向应该进行微调的模型,或者在应该使用最新训练的模型的情况下指向一个目录。
finetuning_epoch_fraction: The fraction currently specified training epochs in the model configuration which should be used for finetuning. # 模型配置中当前指定的训练时期的fraction,应该用于微调。 Returns:
Path to the model archive. # 模型归档的路径。
"""
if not nlu_data: # 没有NLU数据
rasa.shared.utils.cli.print_error( # 打印错误
"No NLU data given. Please provide NLU data in order to train " # 没有给出NLU数据。请提供NLU数据以训练
"a Rasa NLU model using the '--nlu' argument." # 使用--nlu参数训练Rasa NLU模型
)
return None # 只训练NLU,因此仍然必须选择训练文件
file_importer = TrainingDataImporter.load_nlu_importer_from_config(
config, domain, training_data_paths=[nlu_data], args=additional_arguments
) training_data = file_importer.get_nlu_data() # 获取NLU数据
if training_data.contains_no_pure_nlu_data(): # 如果没有纯NLU数据
rasa.shared.utils.cli.print_error( # 打印错误
f"Path '{nlu_data}' doesn't contain valid NLU data in it. " # 路径{nlu_data}中不包含有效的NLU数据
f"Please verify the data format. " # 请验证数据格式
f"The NLU model training will be skipped now." # 现在将跳过NLU模型训练
)
return None return _train_graph( # 训练图
file_importer, # 文件导入器
training_type=TrainingType.NLU, # 训练类型
output_path=output, # 输出路径
model_to_finetune=model_to_finetune, # 模型微调
fixed_model_name=fixed_model_name, # 固定模型名称
finetuning_epoch_fraction=finetuning_epoch_fraction, # 微调时期fraction
persist_nlu_training_data=persist_nlu_training_data, # 持久化NLU训练数据
**(additional_arguments or {}), # 额外的参数
).model # 模型

1.传递来的形参数据

  形参config="config.yml",nlu_data="data",output="models",persist_nlu_training_data=False,其它的都是None,如下所示:

2.train_nlu()函数组成

  该函数主要由3个方法组成,如下所示:

  • file_importer = TrainingDataImporter.load_nlu_importer_from_config(*) #file_importer数据类型为NluDataImporter
  • training_data = file_importer.get_nlu_data() #根据nlu数据创建一个TrainingData类对象
  • return _train_graph(*) #训练config.yml文件中pipline对应的图

二.training_data数据类型

  training_data数据类型为rasa.shared.nlu.training_data.training_data.TrainingData,如下所示:



1.MIN_EXAMPLES_PER_ENTITY=2

每个实体的最小样本数量。

2.MIN_EXAMPLES_PER_INTENT=2

每个意图的最小样本数量。

3.action_names=set()

action名字集合。

4.entities=set()

entity集合。

5.entity_examples=[]

entity例子集合。

6.entity_groups=set()

entity组的集合。

7.entity_roles=set()

entity角色集合。

8.entity_synonyms=set()

entity近义词集合。

9.intent_examples=[25*Message]

  intent例子列表,列表中数据为rasa.shared.nlu.training_data.message.Message数据结构。对于普通意图,Message数据结构如下所示:



  对于检索意图,Message数据结构如下所示:

10.intents

具体数值为set('faq', 'goodbye', 'greet')。

11.lookup_tables=[]

查找表。

12.nlu_examples=[25*Message]

内容和intent_examples相同,不再介绍。

13.number_of_examples_per_entity

每个entity例子的数量。

14.number_of_examples_per_intent

每个intent例子的数量,即{'faq': 14, 'goodbye': 5, 'greet': 6}。

15.number_of_examples_per_response

  每个response例子的数量,如下所示:

{'faq/notes': 1, 'faq/work_location': 1, 'faq/max_job_request': 1, 'faq/audit': 1, 'faq/write_exam_participate': 1, 'faq/write_exam_location': 1, 'faq/write_exam_again': 1, 'faq/write_exam_with-out-offer': 1, 'faq/interview_arrangement': 1, 'faq/interview_times': 1, 'faq/interview_from': 1, 'faq/interview_clothing': 1, 'faq/interview_paperwork': 1, 'faq/interview_result': 1}

16.regex_features=[]

正则特征。

17.response_examples=[14*Message]

  response例子,如下所示:

18.responses

  response例子,如下所示:

19.retrieval_intents=set('faq')

检索意图。

20.training_examples=[25*Message]

内容和intent_examples相同,不再介绍。

参考文献:

[1]https://github.com/RasaHQ/rasa

[2]rasa 3.2.10 NLU模块的训练:https://zhuanlan.zhihu.com/p/574935615

rasa train nlu详解:1.1-train_nlu()函数的更多相关文章

  1. SQL 中详解round(),floor(),ceiling()函数的用法和区别?

    SQL 中详解round(),floor(),ceiling()函数的用法和区别? 原创 2013年06月09日 14:00:21   摘自:http://blog.csdn.net/yueliang ...

  2. 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?

    第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一.    案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...

  3. 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现

    第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一.    案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...

  4. 详解wait和waitpid函数

    #include <sys/types.h> /* 提供类型pid_t的定义 */ #include <sys/wait.h> pid_t wait(int *status) ...

  5. Linux 信号详解一(signal函数)

    信号列表 SIGABRT 进程停止运行 SIGALRM 警告钟 SIGFPE 算述运算例外 SIGHUP 系统挂断 SIGILL 非法指令 SIGINT 终端中断 SIGKILL 停止进程(此信号不能 ...

  6. (译)详解javascript立即执行函数表达式(IIFE)

    写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏.本文虽然是译文,但是直译的 ...

  7. 《Windows驱动开发技术详解》之派遣函数

    驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同 ...

  8. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  9. 详解MySQL中concat函数的用法(连接字符串)

    MySQL中concat函数 使用方法: CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制 ...

  10. 详解javascript立即执行函数表达式(IIFE)

    立即执行函数,就是在定义函数的时候直接执行,这里不是申明函数而是一个函数表达式 1.问题 在javascript中,每一个函数在被调用的时候都会创建一个执行上下文,在函数内部定义的变量和函数只能在该函 ...

随机推荐

  1. Informix 4gl错误代码信息和更正

    (一)Informix信息和更正 出版日期:6 1996 年 年 1 11 月 0 成功. 操作成功.当 SQL 语句成功地执行时,数据库服务器把这个 SQLCODE 值返回给应用程序. 100 没有 ...

  2. Isito 入门(九):安全认证

    本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 7,认证 Peer Authentication PeerAuthentication 的定义 实验 Reque ...

  3. JUC并发编程学习笔记(六)Callable(简单)

    Callable(简单) callable接口和runnable接口类似,都是为了执行另外一条线程而设计的,区别是Runnable不会返回结果也不会抛出异常. 1.可以有返回值 2.可以抛出异常 3. ...

  4. 高精度减法(C语言实现)

    高精度减法(C语言实现) 介绍 众所周知,整数在C和C++中以int ,long,long long三种不同大小的数据存储,数据大小最大可达2^64,但是在实际使用中,我们仍不可避免的会遇到爆long ...

  5. Rasa NLU中的组件

      Rasa NLU部分主要是解决NER(序列建模)和意图识别(分类建模)这2个任务.Rasa NLP是一个基于DAG的通用框架,图中的顶点即组件.组件特征包括有顺序关系.可相互替换.可互斥和可同时使 ...

  6. 关于MM32F001无法debug的问题

    以下问题仅来自于个人的调试发现和猜测, 并不代表芯片有任何问题. 实际上我也仅仅是试用了一下. 主要发现芯片总是被锁住(FLASH被写保护?),具体如下: (1) 内存溢出时芯片被写保护, 导致再次d ...

  7. linux开发基于iMX6ULL-uboot编译环境配置

    1.下载半导体官方的uboot和linux内核固件 2.下载uboot 3.下载linux内核(选择5.4版本的分支下载) 下载后如下所示 解压后如下 查看文件夹中的内容 创建一个git仓库然后开始自 ...

  8. 搭建Samba服务器笔记全套

    Top 目录 安装 端口与服务管理 其他常用命令 配置 全局配置 共享库配置 用户名密码认证库配置 Samba 登录用户配置 防火墙配置 设定安全的上下文关系 本地系统设置访问读写权限 Pdbedit ...

  9. FPGA与Simulink联合仿真环境搭建(硬件在环)

    硬件在环(HIL) \(\quad\)官方的一些定义:硬件在环 (HIL) 测试是一种实时仿真,让您无需使用系统硬件即可开始测试嵌入式代码.如果正在开发的代码未按照规范运行,您可以通过此项测试来发现可 ...

  10. 🔥🔥Java开发者的Python快速进修指南:自定义模块及常用模块

    好的,按照我们平常的惯例,我先来讲一下今天这节课的内容,以及Java和Python在某些方面的相似之处.Python使用import语句来导入包,而Java也是如此.然而,两者之间的区别在于Pytho ...