2、【rasa】问题的意图识别和实体提取
文件目录
.
├── actions
│ ├── actions.py
│ └── __init__.py
├── config.yml # 告诉rasa如何训练模型。配置组件,例如分词组件、特征提取组件等
├── credentials.yml
├── data
│ └── nlu.yml # 让rasa理解用户问题。用于存放处理好的用户问题数据
├── domain.yml # 在本项目中只是申明了在nlu.yml文件中出现的意图
├── endpoints.yml
├── models # 用于存放训练好的模型
│ ├── nlu-20220809-221140-maroon-canary.tar.gz
│ └── nlu-20220813-112249-generative-fjord.tar.gz
└── README.md
重要文件
./data/nlu.yml
该文件定义了意图,例如 intent: greet
、实体,例如 [感冒](disease)
在nlu定义的意图需要在./domain.yml
重新申明一次。
version: "3.0"
nlu:
- intent: greet
examples: |
- 你好
- hello
- hi
- 喂
- 在么
- intent: goodbye
examples: |
- 拜拜
- 再见
- 拜
- 退出
- 结束
- intent: medicine
examples: |
- [感冒](disease)了该吃什么药
- 我[便秘](disease)了,该吃什么药
- 我[胃痛](disease),该吃什么药
- 一直[打喷嚏](disease)吃什么药好
- 父母都有[高血压](disease),我应该推荐他们吃什么药好呢
- 头上烫烫的,感觉[发烧](disease)了,该吃什么药好
- [减肥](disease)有什么好的药品推荐吗?
- intent: medical_department
examples: |
- [感冒](disease)了该吃去哪个科室看病
- 我[便秘](disease)了,该去挂哪个科室的号
- 我[胃痛](disease),该去医院看哪个门诊啊
- 一直[打喷嚏](disease)挂哪一个科室的号啊
- [头疼](disease)该挂哪科
- intent: medical_hospital
examples: |
- 我生病了,不知道去哪里看病
- [减肥](disease)有什么好的医院或者健康中心推荐吗?
- 想做个[体检](disease),有哪家医院或者哪里的诊所或者健康中心比较实惠啊?
- 父母都有[高血压](disease),我应该推荐他们去哪家医院好呢
./domain.yml
在这个例子中只是申明了在nlu.yml
文件中出现的意图
version: "3.0"
intents:
- greet
- goodbye
- medicine
- medical_department
- medical_hospital
./config.yml
用于定义模型的配置
recipe: default.v1
language: zh # 设置语言为中文
# 定义流水线
pipeline:
- name: JiebaTokenizer # 分词组件
- name: LanguageModelFeaturizer # 特征提取组件
model_name: bert
model_weights: bert-base-chinese
- name: "DIETClassifier" # 实体和意图联合提取组件
epochs: 100
# 定义模型训练策略,这里没有定义,所以将采用默认配置
policies:
参考资料
http://www.broadview.com.cn/book/5958
下载本书的代码,然后看第2章的内容。同时注意安装requirements.txt
中的依赖
如何运行
首先训练模型:
rasa train
然后调试nlu模块,也就是意图识别和实体提取模块:
rasa shell nlu