当前位置: 首页 > news >正文

rasa NLU意图解析基础学习

一.rasa作用:

Rasa NLU:提取用户想要做什么和关键的上下文信息。
Rasa Core:基于对话历史,选择最优的回复和动作。
通道(channel)和动作(action):连接对话机器人与用户及后端服务系统。
tracker store、lock storeevent broker等辅助系统

二.rasa 项目构建:

# 创建虚拟环境 需要3.4以上,3.9以下,因为python版本识别问题3.10以上会识别问题
python -m venv rasa_env
source rasa_env/bin/activate  # Linux/Mac
rasa_env\Scripts\activate     # Windows# 安装Rasa核心库
pip install rasa# 初始化项目(自动生成示例文件)
rasa init --no-prompt

三.rasa项目结构:

1.domain.yml 定义实体和意图,回答

领域(domain)定义了对话机器人需要知道的所有信息,

包括意图(intent):告诉要处理的意图有哪些,比如:保险咨询,保单查询,理赔申请 

实体(entity): 要提取的用户话语中的关键字和自己业务模型的领域实体: 比如: 保额,公司名称,产品名称

词槽(slot): 用户问题中需要抽取的实体,并且持久化对话中的关键信息,使对话系统能够根据这些信息跨多个回合(turns)保持一致性,避免重复询问或误解

动作(action和回复(response): 机器人回复的模板,可以在规则中配置,比如欢迎语,结束语

可以在后续故事中引用这些模版作为action

表单(form)

以完成任务为核心目的的对话过程,可以理解为引导用户填写表单(form)的过程。

2.nlu.yml : 训练数据文件

具有特殊含义的键有intent、synonym、regex和lookup。除intent外,其他3个都是可选的.

①具有intent键表明当前的对象是用来存储训练样例的,训练样例对象有一个名字为examples的列表,每个列表里面都是一个训练样本。

- intent: premium_inquiryexamples: |- 保费多少钱- 费率多少钱一个人- [雇主险]询价(insurance_type)- [团意险](insurance_type)的费率多少钱一个人- [100万](coverage_amount)保额需要多少保费- [50人](employee_count)公司的保费多少钱- 保费如何计算- 有没有保费优惠

②具有synonym键表明当前的对象是用来存储同义词信息的。例如,西红柿是番茄的同义词

- synonym: 团意险examples: |- 团体意外险- 团体人身意外险- 团体意外伤害保险- 团体人身意外险

③具有lookup键表明当前的对象是用来存储查找表的,例如地区表

④具有regex键表明当前的对象是用来存储正则表达式的,可以提取数字等等

3.rule.yml (硬性规则文件)

定义框架逻辑(如流程入口/出口)

使用场景:

   需要 强制逻辑(如退出、安全操作、槽位状态跳转)。

    高风险操作(如退款、删除数据)需严格遵循步骤。

    必须执行的“硬规则   

比如: 

rules:- rule: 只要用户说再见,就回复说再见steps:- intent: goodbye- action: utter_goodbye

4.stories.yml (故事文件)

定义 示例路径(用于训练对话模型),通过 示例对话路径让模型学习如何响应,需要与 nlu.yml 一起训练模型

比如: 通过用户输入的条件,逐步补全后推荐产品列表

- story: 基本保险查询steps:- intent: greet  #欢迎意图- action: utter_greet  #欢迎语句模版- intent: insurance_inquiry #保险查询意图entities:- insurance_type: "企业财产险"  #识别出实体保险产品类型- action: utter_ask_company_name #询问用户公司名称- intent: company_info_request   #用户公司请求意图entities:- company_name: "科技有限公司"   #识别用户输入的问题中公司名称实体- action: utter_ask_company_size  #询问公司规模话术模版- intent: company_info_request    #公司信息请求意图entities:- company_size: "中小企业"       #识别出公司名称- action: utter_ask_industry_type  #询问公司行业类型- intent: company_info_request     #公司信息请求意图entities:- industry_type: "科技"           #识别出公司的行业- action: utter_insurance_recommendation  #推荐产品话术模型- intent: goodbye                         #再见意图- action: utter_goodbye                   #再见的话术

5.config.yml(配置文件)

①可以设置rasa主要语言

②Pipeline

  NLU 处理流程
     Pipeline 定义了 Rasa 如何将用户的自然语言输入(文本或语音)转换为结构化的意图(Intent)和实体(Entities)。


 对话状态跟踪
    通过组件组合,Pipeline 可以优化意图识别、实体提取的准确性,进而提升对话系统的整体表现。


模型定制化
     开发者可根据业务需求选择不同的组件(如词向量模型、特征提取器)来优化特定场景的处理能力(如多语言、领域特定实体)

比如定义: 分词器(JiebaTokenizer),词袋特征(CountVectorsFeaturizer), 匹配正则规则定义的实体(RegexFeaturizer)

language: "zh"  # 语言设置(如中文)pipeline:- name: WhitespaceTokenizercase_sensitive: False- name: RegexFeaturizer  # 匹配正则规则定义的实体- name: LexicalSyntacticFeaturizer  # 词序特征- name: CountVectorsFeaturizeranalyzer: "char_wb"min_ngram: 1max_ngram: 4- name: ConveRT  # 使用预训练词向量模型- name: DIETClassifierepochs: 200intent_token_masking: True  # 掩码机制提升精度- name: ResponseSelectorepochs: 100

③Policies
Policies 是 Rasa 的决策引擎,通过 规则或机器学习模型,根据当前对话状态(如用户的意图、实体、对话历史、表单状态等)来选择下一步操作。具体作用包括:意图与实体的理解:基于 NLU 的输出(由 pipeline 处理)。


对话状态跟踪:维护对话上下文,记录用户的输入和机器人的响应。
决策制定:根据策略选择合适的回复、动作或流程分支。
错误处理:如用户输入超出范围时的回退逻辑

主要包括:

MemoizationPolicy: 记录用户和机器人之前的交互历史,通过记忆机制重复相同的操作路径。

RulePolicy: 基于 显式规则(定义在 domain.yml 的 rules 部分)控制对话流程。

TEDPolicy: 基于 机器学习模型,通过对话历史学习用户的意图模式,预测下一步动作。

FallbackPolicy :处理异常

④Policies 与 Pipeline 的区别

  • Pipeline(在 NLU 配置中):负责将用户输入转化为 意图和实体(自然语言理解)。
  • Policies(在 Core 配置中):基于 NLU 的输出和对话历史,决定下一步 动作或响应(对话决策)。

四.rasa训练调试

1.训练模型命令:

#训练模型rasa train#指定配置文件训练rasa train --config config.yml --domain domain.yml --data data/#测试对话rasa shell

2.训练好的模型会在models下

3.运行模型

启动rasa模型rasa run --cors "*" --enable-api启动指定模型rasa run --model ./models/model_20231025-144536.tar.gz日志
rasa run --log-file out.log

4.测试模型训练效果接口

http://localhost:5005/model/parse

http://www.xdnf.cn/news/969229.html

相关文章:

  • 全国空气质量监测站点数据分析:从原始数据到空间可视化
  • 1. 网络基础
  • 带eachers的html转word
  • 渲染学进阶内容——joml库
  • 深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
  • cell properties修改参数
  • 突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
  • Vue 指令详解:概念与作用
  • 渲染学进阶内容——模型
  • ssc377d修改flash分区大小
  • 86壳温湿度传感器:高温下工业生产的安全防线
  • Elasticsearch增删改查语句
  • GAMES202-高质量实时渲染(Real-Time Ray-Tracing)
  • Minktec 柔性弯曲传感器应用:3D 脊柱姿势追踪与人体活动识别
  • 半加器和全加器
  • React19源码系列之 事件优先级
  • Netty从入门到进阶(三)
  • 淘宝SKU与视频详情API接口使用指南
  • 6月10日day50打卡
  • 鹰盾播放器禁止录屏操作的深度技术解析与全栈实现方案
  • AI写实数字人实时交互系统本地私有化部署方案
  • Java TCP网络编程核心指南
  • 服务器硬防的应用场景都有哪些?
  • V837s-sdk buildroot文件系统设置串口登录密码
  • Docker 创建及部署完整流程
  • spring jms使用
  • pnpm install 和 npm install 的区别
  • 力扣HOT100之堆:347. 前 K 个高频元素
  • 基于51单片机的三位电子密码锁
  • LDPC码的编码算法