本文使用《使用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. C静态库的创建与使用--为什么要引入静态库?

    C源程序需要经过预处理.编译.汇编几个阶段,得到各自源文件对应的可重定位目标文件,可重定位目标文件就是各个源文件的二进制机器代码,一般是.o格式.比如:util1.c.util2.c及main.c三个 ...

  2. PHP -pop魔术方法

    PHP魔术方法: PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利,在 PHP 中的作用是非常重要的.PHP 中的魔术方法通常以__(两个下划线)开始,可以在要使用时灵活调用. 例题 [ ...

  3. 04-华为HyperReplication中的多时间片技术

    简介 多时间片技术,是应用于HyperReplication的异步远程复制:提高效率, 在同步远程复制中,没有这个概念: 时间片:在Cache中管理一段时间内写入数据的逻辑空间(数据大小没有限定): ...

  4. 由mysql转为oracle注意事项

    1. text类型->nclob 2. 表名是关键字   引号 3. 字段名是关键字 引号 4. 日期型和mysql不同,hh24:mi:ss  就是HH:mm:ss,库里存日期型也可以(查询时 ...

  5. 当scroll-view水平滚动,内容溢出时,文本会自动竖向排列问题

    当scroll-view水平滚动,内容溢出时,文本会自动竖向排列 解决方法:thite-space:nowrap:规定段落中的文本不进行换行

  6. Windows10 下载并编译指定版本chromium源码

    1.一些信息 Chromium 的官网是 https://www.chromium.org/ Git 仓库是 https://chromium.googlesource.com/chromium/sr ...

  7. InnoDB 存储引擎之 Buffer Pool

    Mysql 5.7 InnoDB 存储引擎整体逻辑架构图 一.Buffer Pool 概述 InnoDB 作为一个存储引擎,为了降低磁盘 IO,提升读写性能,必然有相应的缓冲池机制,这个缓冲池就是 B ...

  8. JUC并发编程学习笔记(四)8锁现象

    8锁现象 八锁->就是关于锁的八个问题 锁是什么,如何判断锁的是谁 对象.class模板 深刻理解锁 锁的东西无外乎就两样:1.同步方法的调用者,2.Class模板. 同一个锁中,只有当前线程资 ...

  9. Net 高级调试之七:线程操作相关命令介绍

    一.简介 今天是<Net 高级调试>的第六篇文章.上一篇文章我们说了值类型,引用类型,数组等的内存表现形式.有了这个基础,我们可以更好的了解我们的程序在运行时的状态,内存里有什么东西,它们 ...

  10. 让 keil MDK 支持C99

    打开options fot target-> C/C++ 在 Misc Controls 中添加 --c99.