安装Rasa需要的Python版本
在3.7 <= python <= 3.10
如果python版本太低或太高,pip安装都将会失败,我用的是3.10版本。
window下python默认会有多版本管理工具,python Launcher,可以很方便在window下对多版本python进行管理
1.查看所有可用版本
py -0
2.运行指定版本安装rasa(3.10),等待一会儿安装成功
py -3.10 -m pip install rasa
3.安装成功后,使用rasa init
命令初始化,会询问你是否安装到当前目录下,也可以指定目录。第二次会询问你是否马上训练模型,如果选是的话,会在models目录下生成一个tar.gz模型。如果不马上训练也可以自己通过rasa train
命令训练模型。
py -3.10 -m rasa init
初始化目录结构如下
对书上案例进行操作
书上用的应该是rasa2.x版本,和我3.4版本不一样
贴上代码:
data/nlu.yml
intent:意图
[]()
:这种是实体,rasa是对文本中的意图和实体提取之后再判断怎么回答,[]中可以定义多个不同的字符串,这些都会被rasa标记成()里的内容,如感冒、发烧、喉咙痛,都会被标记成disease。
version: "3.1"
nlu:
- intent: greet
examples: |
- 你好
- 1
- 在吗
- 您好
- intent: goodbye
examples: |
- 88
- 再见
- intent: medicine
examples: |
- 我[感冒](disease)了
- 我[发烧](disease)了
- 我[喉咙痛](disease)
domain.yml,在这里配置了nlu.yml中的意图
version: "3.1"
intents:
- greet
- goodbye
- medicine
config.yml,rasa默认没有支持中文分词,需要配置中文分词器
recipe: default.v1
language: zh
pipeline:
- name: JiebaTokenizer
- name: LanguageModelFeaturizer
model_name: bert
model_weights: bert-base-chinese
- name: "DIETClassifier"
epochs: 100
开始训练nlu模型
用到了JiebaTokenizer,rasa没有自带,需要用pip下载这个组件
py -3.10 -m pip install jieba
py -3.10 -m pip install transformers
训练:
py -3.10 -m rasa train nlu
训练完之后会在models目录下得到一个nlu模型
nlu对话分析
命令行运行
py -3.10 -m rasa shell nlu
进入之后,会等待我输入一句话,我输入“我感冒了”
nlu模块对这句话进行分析
text:是我输入的这句话
entities:text中提取的实体(这里提取到了感冒关键字)
intent:意图,medicine是在nlu.yml中配置的一个意图,confiedence是评分,这里高达0.99,分数很高
intent_ranking:是对意图的一个排名,可以看到medicine排名第一
总结
rasa主要有两个模块,一个是nlu,一个是core
nlu模块作用主要是理解用户的语言,提取用户输入的关键词,涉及到对语句的分词,并根据匹配度进行排名,有点类似es的分词和倒排索引
core模块是管理对话上下文,对用户输入选择合适的返回,对话的每行记录都会被管理,rasa会根据对话历史记录和当前用户输入判断该怎么回复用户。
还有一个叫nlg,和nlu是反过来的,是把机器语言组装成用户语言返回给用户,方便用户理解。