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_inquiry
  examples: |
    - 保费多少钱
    - 费率多少钱一个人
    - [雇主险]询价(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: WhitespaceTokenizer
    case_sensitive: False

  - name: RegexFeaturizer  # 匹配正则规则定义的实体

  - name: LexicalSyntacticFeaturizer  # 词序特征

  - name: CountVectorsFeaturizer
    analyzer: "char_wb"
    min_ngram: 1
    max_ngram: 4

  - name: ConveRT  # 使用预训练词向量模型

  - name: DIETClassifier
    epochs: 200
    intent_token_masking: True  # 掩码机制提升精度

  - name: ResponseSelector
    epochs: 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值