Rasa 使用ResponseSelector实现FAQ和闲聊

learn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code

FAQ:常见问题解答

1. 定义用户问题

ResponseSelector 训练数据中的 意图 命名格式跟普通的意图 格式不一样:

  • ResponseSelector 需要采用 group/intent 格式(group称为 检索意图)
  • 普通意图 命名不能包含/字符

示例

nlu:
  - intent: faq/work_location
    examples: |
      - 校园招聘录取的应届生主要工作地点在哪里?

2. 定义问题答案

ResponseSelector 定义 responses 作为 intent 问题答案

  • 约定:intent 名字假设为 x/y, responses 名字为 utter_x/y
responses:
  utter_faq/work_location:
    - text: 招聘信息中包含各职位的工作地点内容,请参考各职位内容的详细介绍。

3. 训练 Rasa

  • ResponseSelector 加入 pipeline
pipeline:
  - name: xxx特征提取组件
  - name: xxx意图分类组件
  - name: "ResponseSelector"
  • 启用 RulePolicy,自动进行问题分类,返回对应答案
policies:
  - name: MemoizationPolicy
  - name: TEDPolicy
  - name: RulePolicy
  • rules 设置问题分类映射到动作
rules:
  - rule: respond to FAQs
    steps:
      - intent: faq
      - action: utter_faq

4. FAQ机器人

功能分类:业务无关(打招呼)、业务相关(招聘)

tree

.
├── code_snippets_used_in_book
│   └── webclient.html
├── config.yml
├── credentials.yml
├── data
│   ├── nlu.yml
│   ├── responses.yml
│   ├── rules.yml
│   └── stories.yml
├── domain.yml
├── endpoints.yml
├── github-markdown.css
├── index.html
├── __init__.py
├── media
│   └── demo.png
├── README.md
├── showdown.min.js
└── webchat.js

nlu.yml

version: "3.0"
nlu:
  - intent: goodbye
    examples: |
      - 拜拜
      - 再见
      - 拜
      - 退出
      - 结束
  - intent: greet
    examples: |
      - 你好
      - 您好
      - hello
      - hi
      - 喂
      - 在么
  - intent: faq/notes
    examples: |
      - 应聘ACME校园招聘职位的注意事项?
  - intent: faq/work_location
    examples: |
      - 校园招聘录取的应届生主要工作地点在哪里?
  - intent: faq/max_job_request
    examples: |
      - 最多申请几个职位?
  - intent: faq/audit
    examples: |
      - 各阶段审核说明
  - intent: faq/write_exam_participate
    examples: |
      - 怎样参加笔试?
  - intent: faq/write_exam_location
    examples: |
      - 笔试考试地点如何安排?
  - intent: faq/write_exam_again
    examples: |
      - 笔试只安排一次吗?我笔试当天没有参加,是否还有再次笔试的机会?
  - intent: faq/write_exam_with-out-offer
    examples: |
      - 如果我没有收到笔试通知,但我很想进入ACME,能否直接进入考场参加考试?
  - intent: faq/interview_arrangement
    examples: |
      - 面试什么时候开始?会提前多少天通知面试安排?
  - intent: faq/interview_times
    examples: |
      - 一般会安排几次面试?
  - intent: faq/interview_from
    examples: |
      - 面试的形式是怎样的?是单独面试还是小组面试?
  - intent: faq/interview_clothing
    examples: |
      - 对面试的服装有什么具体的要求?
  - intent: faq/interview_paperwork
    examples: |
      - 面试时需要携带什么资料?
  - intent: faq/interview_result
    examples: |
      - 如何查询面试结果?

responses.yml

version: "3.0"
responses:
  utter_faq/notes:
    - text: 1、登在校园招聘板块内的职位信息才适用于应届毕业生招聘,请所有的应届毕业生去校园招聘的版块寻找您感兴趣的职位。2、列出的每个职位的要求是该职位的最低要求,为了保证您应聘的成功率,希望您严格按照职位的要求考虑您的选择。3、提交成功后,在招聘结束前,您将不能修改或再次提交简历,因此,请于仔细确认填写信息后提交简历。
  utter_faq/work_location:
    - text: 招聘信息中包含各职位的工作地点内容,请参考各职位内容的详细介绍。
  utter_faq/max_job_request:
    - text: 对于校园招聘,最多申请2个职位。
  utter_faq/audit:
    - text: 1、简历审核:应聘者需要通过ACME网站,填写并提交个人简历,ACME的招聘专员将对收取的简历进行认真的审查和筛选。了解应聘者的情况,并筛选出符合职位要求的简历,同时确认简历记载内容是否属实。2、笔试审核:ACME技术类测试主要针对应聘者的专业技能进行检查和评价。3、面试审核:经过实施评价应聘者基本素质的第一阶段面试和评价专业知识的第二阶段面试,对应聘者是否符合ACME人才理念以及应聘者的工作能力做出客观的综合评价,从而决定是否录用该应聘者。
  utter_faq/write_exam_participate:
    - text: 通过简历审核的应聘者,我们将采用短信、e-mail、ACME公告栏以及电话通知的方式告知您
  utter_faq/write_exam_location:
    - text: 笔试地点将根据您在简历中填写的学校所在城市进行统筹安排
  utter_faq/write_exam_again:
    - text: 校园招聘的大规模的笔试仅安排一次,请收到笔试通知的同学认真对待笔试机会。
  utter_faq/write_exam_with-out-offer:
    - text: 由于我们是按照严格的招聘流程筛选出的笔试名单,所以非常抱歉,对于没有收到笔试通知的同学,就不能参加本次校园招聘的笔试。
  utter_faq/interview_arrangement:
    - text: 不同的职位面试进度安排不同,除特殊安排外,笔试结束一周左右会安排面试。
  utter_faq/interview_times:
    - text: 一般情况下,业务部门和人力资源部会同时或者分别安排一次面试。个别特殊职位需要2次及以上的面试。
  utter_faq/interview_from:
    - text: 面试一般以单独面试的形式进行,但根据各公司的面试安排,也会进行小组面试。
  utter_faq/interview_clothing:
    - text: 面试着装没有统一要求,但建议您尽量穿着较为正式的职业装参加。
  utter_faq/interview_paperwork:
    - text: 面试时,请您携带可以证明您身份的有效证件,有特殊要求的职位请携带好能证明您专业水平的证书原件以及复印件。
  utter_faq/interview_result:
    - text: 我们会通过邮件或电话的形式,通知您面试结果。

stories.yml

version: "3.0"
stories:
  - story: greet
    steps:
      - intent: greet
      - action: utter_greet
  - story: say goodbye
    steps:
      - intent: goodbye
      - action: utter_goodbye

rules.yml

version: "3.0"
rules:
  - rule: respond to FAQs
    steps:
      - intent: faq
      - action: utter_faq

domain.yml

version: "3.0"

session_config:
  session_expiration_time: 60
  carry_over_slots_to_new_session: true
intents:
  - goodbye
  - greet
  - faq
responses:
  utter_greet:
    - text: 你好,我是 Silly,我是一个基于 Rasa 的 FAQ 机器人
  utter_goodbye:
    - text: 再见!
  utter_default:
    - text: 系统不明白您说的话
actions:
  - utter_goodbye
  - utter_greet
  - utter_default
  - respond_faq

config.yml

recipe: default.v1
language: "zh"

pipeline:
  - name: JiebaTokenizer
  - name: LanguageModelFeaturizer
    model_name: "bert"
    model_weights: "bert-base-chinese"
  - name: "DIETClassifier"
    epochs: 100
    tensorboard_log_directory: ./log
    learning_rate: 0.001
  - name: "ResponseSelector"

policies:
  - name: MemoizationPolicy
  - name: TEDPolicy
  - name: RulePolicy

endpoints.yml

action_endpoint:
  url: "http://localhost:5055/webhook"

客户端/服务端

html、 js 等文件

测试

  • 训练 rasa train

  • 运行服务 rasa run --cors "*" --cors "*" 解决跨域问题

  • Chapter04> python -m http.server

  • 在浏览器里 打开 index.html
    在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael阿明

如果可以,请点赞留言支持我哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值