使用ResponseSelector实现校园招聘FAQ机器人

  本文主要介绍使用ResponseSelector实现校园招聘FAQ机器人,回答面试流程和面试结果查询的FAQ问题。FAQ机器人功能分为业务无关的功能和业务相关的功能2类。

一.data/nlu.yml文件
  与普通意图相比,ResponseSelector训练数据中的意图采用group/intent格式(检索意图)。比如,普通意图intent: greet,而后者intent: faq/notes。如下所示:

version: "3.1"
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: |
      - 如何查询面试结果?

二.data/responses.yml文件
  主要是根据相关intent来进行相应的response。比如,utter_faq/notes的response对应于意图faq/notes。如下所示:

version: "3.1"
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: 我们会通过邮件或电话的形式,通知您面试结果。

三.data/stories.yml文件
  story即场景编排,如下所示:

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

四.data/rules.yml文件
  定义了规则名"respond to FAQs",当检索意图是faq时,执行utter_faq,如下所示:

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

五.domain.yml文件
  该文件主要包含intents、responses和actions等信息,如下所示:

version: "3.1"

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
  - utter_faq

六.config.yml文件
  主要是pipeline和policies设置。前者基本思路是分词、特征化、意图识别和实体抽取,后者定义各种策略。特别注意,FAQ机器人需要将ResponseSelector组件加入NLU的流水线,并且还需要启用RulePolicy和设置rule(参考四.data/rules.yml文件)。如下所示:

recipe: default.v1
language: "zh"

pipeline:
- name: JiebaTokenizer
- name: LanguageModelFeaturizer
  model_name: "bert"
#  model_weights: "bert-base-chinese"
  model_weights: "L:/20230713_HuggingFaceModel/20231004_BERT/bert-base-chinese"
- name: "DIETClassifier"
  epochs: 100
  tensorboard_log_directory: ./log
  learning_rate: 0.001
- name: "ResponseSelector"

policies:
- name: MemoizationPolicy
- name: TEDPolicy
- name: RulePolicy
assistant_id: 20231109-225257-frayed-branch

七.endpoints.yml文件
  action_endpoint、tracker_store和event_broker通常使用默认配置,如下所示:

# This file contains the different endpoints your bot can use.

# Server where the models are pulled from.
# https://rasa.com/docs/rasa/user-guide/running-the-server/#fetching-models-from-a-server/

#models:
#  url: http://my-server.com/models/default_core@latest
#  wait_time_between_pulls:  10   # [optional](default: 100)

# Server which runs your custom actions.
# https://rasa.com/docs/rasa/core/actions/#custom-actions/

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

# Tracker store which is used to store the conversations.
# By default the conversations are stored in memory.
# https://rasa.com/docs/rasa/api/tracker-stores/

#tracker_store:
#    type: redis
#    url: <host of the redis instance, e.g. localhost>
#    port: <port of your redis instance, usually 6379>
#    db: <number of your database within redis, e.g. 0>
#    password: <password used for authentication>

#tracker_store:
#    type: mongod
#    url: <url to your mongo instance, e.g. mongodb://localhost:27017>
#    db: <name of the db within your mongo instance, e.g. rasa>
#    username: <username used for authentication>
#    password: <password used for authentication>

# Event broker which all conversation events should be streamed to.
# https://rasa.com/docs/rasa/api/event-brokers/

#event_broker:
#  url: localhost
#  username: username
#  password: password
#  queue: queue

八.模型训练和运行Rasa服务器
1.模型训练

rasa train

2.运行Rasa服务器

rasa run --cors "*"

3.开启http server服务

python -m http.server

说明:测试FAQ机器人可以通过Web页面,还可通过命令行rasa shell --debug。

九.PyCharm调试Rasa代码
1.Rasa中的DAG
  Rasa中DAG图节点可能是NLP组件,也可能是Policy组件,本质上都可以抽象为Graph Component。如下所示:

  Rasa会把训练过的Component缓存到磁盘中,当某个Component发生变化的时候,比如CountVectorizer,只会把依赖CountVectorizer的组件(DIETClassifier、TEDPolicy和Policy Ensemble)再训练,而其它的组件不变。如下所示:

2.PyCharm调试Rasa代码
  PyCharm调试Rasa源码也比较方便,主要是设置脚本路径、参数和工作目录,如下所示:

  然后就可以调试训练数据是如何被处理的,DAG是如何被构建的,Component是如何被加载和运行的,最终模型文件是如何被存储的等。Rasa中的fingerprint_key可能是唯一标识的意思。
3.rasa train nlu --debug日志
  通过控制台输出日志,可辅助理解Rasa执行过程,以及源码调试,如下所示:

L:\20231106_ConversationSystem\20220407_RasaEcosystem\RasaBooks\RasaInAction\rasa_chinese_book_code\Chapter04\venv\Scripts\python.exe "D:/Program Files/JetBrains/PyCharm 2023.1.3/plugins/python/helpers/pydev/pydevd.py" --multiprocess --qt-support=auto --client 127.0.0.1 --port 38019 --file L:\20231106_ConversationSystem\20220407_RasaEcosystem\RasaBooks\RasaInAction\rasa_chinese_book_code\Chapter04\venv\Lib\site-packages\rasa\__main__.py train nlu --debug
Connected to pydev debugger (build 232.9559.58)

2023-11-10 23:24:32 DEBUG    h5py._conv  - Creating converter from 7 to 5
2023-11-10 23:24:32 DEBUG    h5py._conv  - Creating converter from 5 to 7

2023-11-10 23:26:17 DEBUG    rasa.shared.nlu.training_data.loading  - Training data format of 'data\nlu.yml' is 'rasa_yml'.  # nul.yml文件(rasa_yml数据格式)
2023-11-10 23:26:17 DEBUG    rasa.shared.nlu.training_data.loading  - Training data format of 'data\responses.yml' is 'rasa_yml'.  # responses.yml文件(rasa_yml数据格式)
2023-11-10 23:26:17 DEBUG    rasa.shared.nlu.training_data.loading  - Training data format of 'data\rules.yml' is 'unk'.  # rules.yml文件(unk数据格式)
2023-11-10 23:26:17 DEBUG    rasa.shared.nlu.training_data.loading  - Training data format of 'data\stories.yml' is 'unk'.  # stories.yml文件(unk数据格式)

2023-11-10 23:26:33 DEBUG    rasa.telemetry  - Skipping telemetry reporting: no license hash found.  # 跳过telemetry报告:找不到许可证哈希。
2023-11-10 23:27:24 DEBUG    rasa.engine.training.graph_trainer  - Starting training.  # 开始训练

2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'train_JiebaTokenizer0' loading 'FingerprintComponent.create' and kwargs: '{}'.  # train_JiebaTokenizer0
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'run_JiebaTokenizer0' loading 'FingerprintComponent.create' and kwargs: '{}'.  # run_JiebaTokenizer0
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'run_LanguageModelFeaturizer1' loading 'FingerprintComponent.create' and kwargs: '{}'.  # run_LanguageModelFeaturizer1
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'train_DIETClassifier2' loading 'FingerprintComponent.create' and kwargs: '{}'.  # train_DIETClassifier2
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'train_ResponseSelector3' loading 'FingerprintComponent.create' and kwargs: '{}'.  # train_ResponseSelector3
2023-11-10 23:27:24 DEBUG    rasa.engine.training.graph_trainer  - Running the train graph in fingerprint mode.  # 在fingerprint模式下运行训练图。
2023-11-10 23:27:24 DEBUG    rasa.engine.runner.dask  - Running graph with inputs: {'__importer__': NluDataImporter}, targets: None and ExecutionContext(model_id=None, should_add_diagnostic_data=False, is_finetuning=False, node_name=None).
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'schema_validator' loading 'DefaultV1RecipeValidator.create' and kwargs: '{}'.  # schema_validator
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'schema_validator' running 'DefaultV1RecipeValidator.validate'.  # schema_validator
2023-11-10 23:27:24 DEBUG    rasa.shared.nlu.training_data.training_data  - Validating training data...  # 验证训练数据...
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'finetuning_validator' loading 'FinetuningValidator.create' and kwargs: '{}'.  # finetuning_validator
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'finetuning_validator' running 'FinetuningValidator.validate'.  # finetuning_validator
2023-11-10 23:27:24 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'finetuning_validator' was requested for writing.  # finetuning_validator
2023-11-10 23:27:24 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'finetuning_validator' was persisted.  # finetuning_validator
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'nlu_training_data_provider' loading 'NLUTrainingDataProvider.create' and kwargs: '{}'.  # nlu_training_data_provider
2023-11-10 23:27:24 DEBUG    rasa.engine.graph  - Node 'nlu_training_data_provider' running 'NLUTrainingDataProvider.provide'.  # nlu_training_data_provider
2023-11-10 23:27:24 DEBUG    rasa.shared.nlu.training_data.loading  - Training data format of 'data\nlu.yml' is 'rasa_yml'.  # nul.yml文件(rasa_yml数据格式)
2023-11-10 23:27:25 DEBUG    rasa.shared.nlu.training_data.loading  - Training data format of 'data\responses.yml' is 'rasa_yml'.  # responses.yml文件(rasa_yml数据格式)
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'train_JiebaTokenizer0' running 'FingerprintComponent.run'.  # train_JiebaTokenizer0
2023-11-10 23:27:25 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key '963f41cf1cdb9cadc8914a14e070fb8e' for class 'JiebaTokenizer'.  # 计算类'JiebaTokenizer'的指纹密钥
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'run_JiebaTokenizer0' running 'FingerprintComponent.run'.  # run_JiebaTokenizer0
2023-11-10 23:27:25 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key 'ae36d2dae4cc78840b153d44fee8f81a' for class 'JiebaTokenizer'.  # 计算类'JiebaTokenizer'的指纹密钥
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'run_LanguageModelFeaturizer1' running 'FingerprintComponent.run'.  # run_LanguageModelFeaturizer1
2023-11-10 23:27:25 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key 'f2bfce545dd2c1c12fb895b075954315' for class 'LanguageModelFeaturizer'.  # 计算类'LanguageModelFeaturizer'的指纹密钥
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'train_DIETClassifier2' running 'FingerprintComponent.run'.  # train_DIETClassifier2
2023-11-10 23:27:25 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key '1d3616cf6980e5f0f38aa9ceb51f1e7a' for class 'DIETClassifier'.  # 计算类'DIETClassifier'的指纹密钥
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'train_ResponseSelector3' running 'FingerprintComponent.run'.  # train_ResponseSelector3
2023-11-10 23:27:25 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key 'b91434757a05a4178cdc7f7882cfd9aa' for class 'ResponseSelector'.  # 计算类'ResponseSelector'的指纹密钥
2023-11-10 23:27:25 DEBUG    rasa.engine.training.graph_trainer  - Running the pruned train graph with real node execution.  # 使用真实节点执行修剪的训练图。
2023-11-10 23:27:25 DEBUG    rasa.engine.runner.dask  - Running graph with inputs: {'__importer__': NluDataImporter}, targets: None and ExecutionContext(model_id=None, should_add_diagnostic_data=False, is_finetuning=False, node_name=None).
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_before_node' running for node 'nlu_training_data_provider'.  # nlu_training_data_provider
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_before_node' running for node 'nlu_training_data_provider'.  # nlu_training_data_provider
2023-11-10 23:27:25 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key '1fbfa24243412736ce1002efbeba382f' for class 'NLUTrainingDataProvider'.  # 计算类'NLUTrainingDataProvider'的指纹密钥
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'nlu_training_data_provider' loading 'PrecomputedValueProvider.create' and kwargs: '{}'.  # nlu_training_data_provider
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'nlu_training_data_provider' running 'PrecomputedValueProvider.get_value'.  # nlu_training_data_provider
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_after_node' running for node 'nlu_training_data_provider'.  # nlu_training_data_provider
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_after_node' running for node 'nlu_training_data_provider'.  # nlu_training_data_provider
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_before_node' running for node 'train_JiebaTokenizer0'.  # train_JiebaTokenizer0
2023-11-10 23:27:25 INFO     rasa.engine.training.hooks  - Starting to train component 'JiebaTokenizer'.  # 开始训练组件'JiebaTokenizer'。
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_before_node' running for node 'train_JiebaTokenizer0'.  # train_JiebaTokenizer0
2023-11-10 23:27:25 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key '963f41cf1cdb9cadc8914a14e070fb8e' for class 'JiebaTokenizer'.  # 计算类'JiebaTokenizer'的指纹密钥
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'train_JiebaTokenizer0' loading 'JiebaTokenizer.create' and kwargs: '{}'.  # train_JiebaTokenizer0
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Node 'train_JiebaTokenizer0' running 'JiebaTokenizer.train'.  # train_JiebaTokenizer0
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_after_node' running for node 'train_JiebaTokenizer0'.  # train_JiebaTokenizer0
2023-11-10 23:27:25 INFO     rasa.engine.training.hooks  - Finished training component 'JiebaTokenizer'.  # 完成训练组件'JiebaTokenizer'。
2023-11-10 23:27:25 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_after_node' running for node 'train_JiebaTokenizer0'.  # train_JiebaTokenizer0
2023-11-10 23:27:25 DEBUG    rasa.engine.training.hooks  - Caching 'Resource' with fingerprint_key: '963f41cf1cdb9cadc8914a14e070fb8e' and output_fingerprint '141a681b80024953b9b7865284b9fece'.
2023-11-10 23:27:25 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_JiebaTokenizer0' was requested for reading.  # train_JiebaTokenizer0
2023-11-10 23:27:25 DEBUG    rasa.engine.storage.resource  - Skipped caching resource 'train_JiebaTokenizer0' as no persisted data was found.  # 跳过缓存资源'train_JiebaTokenizer0',因为找不到持久化数据。
2023-11-10 23:27:25 DEBUG    rasa.engine.caching  - Caching output of type 'Resource' succeeded.  # 缓存类型为'Resource'的输出成功。
2023-11-10 23:27:26 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_before_node' running for node 'run_JiebaTokenizer0'.  # run_JiebaTokenizer0
2023-11-10 23:27:26 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_before_node' running for node 'run_JiebaTokenizer0'.  # run_JiebaTokenizer0
2023-11-10 23:27:26 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key '496a8741f1dfb458bbfedb535d343623' for class 'JiebaTokenizer'.  # 计算类'JiebaTokenizer'的指纹密钥
2023-11-10 23:27:26 DEBUG    rasa.engine.graph  - Node 'run_JiebaTokenizer0' loading 'JiebaTokenizer.load' and kwargs: '{'resource': Resource(name='train_JiebaTokenizer0', output_fingerprint='141a681b80024953b9b7865284b9fece')}'.
2023-11-10 23:27:26 DEBUG    rasa.engine.graph  - Node 'run_JiebaTokenizer0' running 'JiebaTokenizer.process_training_data'.  # run_JiebaTokenizer0

# jieba分词
Building prefix dict from the default dictionary ...
2023-11-10 23:27:26 DEBUG    jieba  - Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
2023-11-10 23:27:26 DEBUG    jieba  - Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache
Loading model cost 1.116 seconds.
2023-11-10 23:27:27 DEBUG    jieba  - Loading model cost 1.116 seconds.
Prefix dict has been built successfully.
2023-11-10 23:27:27 DEBUG    jieba  - Prefix dict has been built successfully.

2023-11-10 23:27:27 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_after_node' running for node 'run_JiebaTokenizer0'.
2023-11-10 23:27:27 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_after_node' running for node 'run_JiebaTokenizer0'.
2023-11-10 23:27:27 DEBUG    rasa.engine.training.hooks  - Caching 'TrainingData' with fingerprint_key: '496a8741f1dfb458bbfedb535d343623' and output_fingerprint '1baa8435dc0351e013e3b8f3635e83d6'.
2023-11-10 23:27:27 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_before_node' running for node 'run_LanguageModelFeaturizer1'.
2023-11-10 23:27:27 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_before_node' running for node 'run_LanguageModelFeaturizer1'.
2023-11-10 23:27:27 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key 'de5a4adf999a20fb8e5716903003508c' for class 'LanguageModelFeaturizer'.
2023-11-10 23:27:27 DEBUG    rasa.engine.graph  - Node 'run_LanguageModelFeaturizer1' loading 'LanguageModelFeaturizer.load' and kwargs: '{}'.
2023-11-10 23:27:28 DEBUG    rasa.nlu.featurizers.dense_featurizer.lm_featurizer  - Loading Tokenizer and Model for bert

2023-11-10 23:27:32 DEBUG    rasa.engine.graph  - Node 'run_LanguageModelFeaturizer1' running 'LanguageModelFeaturizer.process_training_data'.
2023-11-10 23:27:41 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_after_node' running for node 'run_LanguageModelFeaturizer1'.
2023-11-10 23:27:41 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_after_node' running for node 'run_LanguageModelFeaturizer1'.
2023-11-10 23:27:41 DEBUG    rasa.engine.training.hooks  - Caching 'TrainingData' with fingerprint_key: 'de5a4adf999a20fb8e5716903003508c' and output_fingerprint '1192d8329eb2a6d87f6e965765d10871'.
2023-11-10 23:27:41 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_before_node' running for node 'train_DIETClassifier2'.
2023-11-10 23:27:41 INFO     rasa.engine.training.hooks  - Starting to train component 'DIETClassifier'.
2023-11-10 23:27:41 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_before_node' running for node 'train_DIETClassifier2'.
2023-11-10 23:27:41 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key '7d66b69a551ffbc2a45237a02ffc5aa7' for class 'DIETClassifier'.
2023-11-10 23:27:41 DEBUG    rasa.engine.graph  - Node 'train_DIETClassifier2' loading 'DIETClassifier.create' and kwargs: '{}'.

2023-11-10 23:27:41 DEBUG    rasa.engine.graph  - Node 'train_DIETClassifier2' running 'DIETClassifier.train'.
2023-11-10 23:27:41 DEBUG    rasa.nlu.classifiers.diet_classifier  - No label features found. Computing default label features.
2023-11-10 23:27:41 DEBUG    rasa.nlu.classifiers.diet_classifier  - You specified 'DIET' to train entities, but no entities are present in the training data. Skipping training of entities.
2023-11-10 23:27:42 DEBUG    rasa.nlu.classifiers.diet_classifier  - Following metrics will be logged during training:
2023-11-10 23:27:42 DEBUG    rasa.nlu.classifiers.diet_classifier  -   t_loss (total loss)
2023-11-10 23:27:42 DEBUG    rasa.nlu.classifiers.diet_classifier  -   i_acc (intent acc)
2023-11-10 23:27:42 DEBUG    rasa.nlu.classifiers.diet_classifier  -   i_loss (intent loss)
2023-11-10 23:27:42 DEBUG    rasa.utils.tensorflow.data_generator  - The provided batch size is a list, this data generator will use a linear increasing batch size.

Epochs:   0%|          | 0/100 [00:00<?, ?it/s]
Epochs: 100%|██████████| 100/100 [01:26<00:00,  1.15it/s, t_loss=0.258, i_loss=0.0123, i_acc=1]
2023-11-10 23:29:09 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_DIETClassifier2' was requested for writing.
2023-11-10 23:29:09 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_DIETClassifier2' was persisted.
2023-11-10 23:29:09 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_after_node' running for node 'train_DIETClassifier2'.
2023-11-10 23:29:09 INFO     rasa.engine.training.hooks  - Finished training component 'DIETClassifier'.
2023-11-10 23:29:09 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_after_node' running for node 'train_DIETClassifier2'.
2023-11-10 23:29:09 DEBUG    rasa.engine.training.hooks  - Caching 'Resource' with fingerprint_key: '7d66b69a551ffbc2a45237a02ffc5aa7' and output_fingerprint '9a50714386a54eebbd0b5eb4ab2fd23c'.
2023-11-10 23:29:09 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_DIETClassifier2' was requested for reading.
2023-11-10 23:29:09 DEBUG    rasa.engine.caching  - Caching output of type 'Resource' succeeded.
2023-11-10 23:29:11 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_before_node' running for node 'train_ResponseSelector3'.
2023-11-10 23:29:11 INFO     rasa.engine.training.hooks  - Starting to train component 'ResponseSelector'.
2023-11-10 23:29:11 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_before_node' running for node 'train_ResponseSelector3'.
2023-11-10 23:29:11 DEBUG    rasa.engine.training.fingerprinting  - Calculated fingerprint_key '0e102b0ba0b459b1556ae9eb4aaac987' for class 'ResponseSelector'.
2023-11-10 23:29:11 DEBUG    rasa.engine.graph  - Node 'train_ResponseSelector3' loading 'ResponseSelector.create' and kwargs: '{}'.
2023-11-10 23:29:11 DEBUG    rasa.engine.graph  - Node 'train_ResponseSelector3' running 'ResponseSelector.train'.
2023-11-10 23:29:11 INFO     rasa.nlu.selectors.response_selector  - Retrieval intent parameter was left to its default value. This response selector will be trained on training examples combining all retrieval intents.
2023-11-10 23:29:11 DEBUG    rasa.nlu.classifiers.diet_classifier  - No label features found. Computing default label features.
2023-11-10 23:29:11 DEBUG    rasa.nlu.selectors.response_selector  - Following metrics will be logged during training:
2023-11-10 23:29:11 DEBUG    rasa.nlu.selectors.response_selector  -   t_loss (total loss)
2023-11-10 23:29:11 DEBUG    rasa.nlu.selectors.response_selector  -   r_acc (response acc)
2023-11-10 23:29:11 DEBUG    rasa.nlu.selectors.response_selector  -   r_loss (response loss)
2023-11-10 23:29:11 DEBUG    rasa.utils.tensorflow.data_generator  - The provided batch size is a list, this data generator will use a linear increasing batch size.
Epochs: 100%|██████████| 300/300 [00:39<00:00,  7.55it/s, t_loss=2.93, r_loss=1.17, r_acc=1]
2023-11-10 23:29:51 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_ResponseSelector3' was requested for writing.
2023-11-10 23:29:51 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_ResponseSelector3' was persisted.
2023-11-10 23:29:51 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_ResponseSelector3' was requested for writing.
2023-11-10 23:29:51 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_ResponseSelector3' was persisted.
2023-11-10 23:29:51 DEBUG    rasa.engine.graph  - Hook 'LoggingHook.on_after_node' running for node 'train_ResponseSelector3'.
2023-11-10 23:29:51 INFO     rasa.engine.training.hooks  - Finished training component 'ResponseSelector'.
2023-11-10 23:29:51 DEBUG    rasa.engine.graph  - Hook 'TrainingHook.on_after_node' running for node 'train_ResponseSelector3'.
2023-11-10 23:29:51 DEBUG    rasa.engine.training.hooks  - Caching 'Resource' with fingerprint_key: '0e102b0ba0b459b1556ae9eb4aaac987' and output_fingerprint '300fbcfe9f004bf2a6870e283e7b4f92'.
2023-11-10 23:29:51 DEBUG    rasa.engine.storage.local_model_storage  - Resource 'train_ResponseSelector3' was requested for reading.
2023-11-10 23:29:51 DEBUG    rasa.engine.caching  - Caching output of type 'Resource' succeeded.
2023-11-10 23:29:51 DEBUG    rasa.engine.storage.local_model_storage  - Start to created model package for path 'models\nlu-20231110-232632-arid-seasoning.tar.gz'.
2023-11-10 23:29:58 DEBUG    rasa.engine.storage.local_model_storage  - Model package created in path 'models\nlu-20231110-232632-arid-seasoning.tar.gz'.
Your Rasa model is trained and saved at 'models\nlu-20231110-232632-arid-seasoning.tar.gz'.
2023-11-10 23:29:58 DEBUG    rasa.telemetry  - Skipping telemetry reporting: no license hash found.

Process finished with exit code 0

参考文献:
[1]《Rasa实战》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/133659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue 3 打印解决方案:Vue-Plugin-HiPrint

文章目录 1. Vue-Plugin-HiPrint 简介2. 安装和使用2.1 安装2.2 引入并注册插件2.3 在组件中使用 3. 配置和高级用法4. 示例应用5. 总结 &#x1f389;欢迎来到Java学习路线专栏~Vue 3 打印解决方案&#xff1a;Vue-Plugin-HiPrint ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f37…

x3daudio1_7.dll怎么解决?x3daudio1_7.dll丢失的5个详细处理方法

首先&#xff0c;让我们来了解一下X3DAudio1_7.dll丢失的原因。X3DAudio1_7.dll是一个非常重要的动态链接库文件&#xff0c;它负责处理计算机中的音频输出。然而&#xff0c;由于各种原因&#xff0c;例如软件安装错误、病毒感染、系统升级等&#xff0c;我们可能会遇到X3DAud…

超强C语言跨年烟花代码,精美无比,附源码分步解析

现在大家是不是都觉得程序员不懂浪漫&#xff1f;那真的大错特错&#xff0c;今天就让你们看看什么是程序员的浪漫&#xff01; 我们今天就来写写《烟花》表白程序&#xff0c;不要惊讶&#xff0c;不要激动&#xff0c;学会了快去拿给心中的那个人看&#xff01;&#xff01;…

【论文解读】针对生成任务的多模态图学习

一、简要介绍 多模态学习结合了多种数据模式&#xff0c;拓宽了模型可以利用的数据的类型和复杂性&#xff1a;例如&#xff0c;从纯文本到图像映射对。大多数多模态学习算法专注于建模来自两种模式的简单的一对一数据对&#xff0c;如图像-标题对&#xff0c;或音频文本对。然…

玩转ansible之参数调试和文件操作篇

更多IT技术文章&#xff0c;欢迎关注微信公众号“运维之美” 玩转ansible之参数调试和文件操作篇 01 剧本调试和帮助02 使用场景举例 上节我们学习了使用ansible进行软件安装&#xff0c;那么安装完软件后&#xff0c;就需要linux系统和软件配置修改了&#xff0c;对于linux主机…

Java程序设计2023-第八次上机练习

8-1简单文本编辑器 编写简单文本编辑器&#xff0c;该程序可以新建、打开、编辑和保存文本文件。当用户点击New时&#xff0c;新建一个文件&#xff0c;用户可以编辑文件内容&#xff0c;然后点击Save保存文件。用户点击Open时&#xff0c;选择一个已有文件&#xff0c;然后可…

leetcode:206. 反转链表

一、题目 函数原型&#xff1a; struct ListNode* reverseList(struct ListNode* head) 二、思路 要对链表进行反转&#xff0c;可以有两种方法&#xff1a; 1.改变链表中每个结点之间的指针域指向&#xff0c;最后返回尾结点即可。 2.新建一个链表&#xff0c;将原链表中的结点…

gorm之项目实战-使用gen以及定义表间关系

gorm之项目实战 ER图 关系整理 一对一关系&#xff1a; User 和 UserLog&#xff1a; 一个用户对应一个用户日志&#xff0c;通过 User 模型的主键与 UserLog 模型的外键建立一对一关系。 一对多关系&#xff1a; User 和 Teacher&#xff1a; 一个用户可以对应多个老师&…

win10网络和Internet设置

win10网络设置 win10进入网络设置的常用入口有两个 第一个入口 桌面右下角右键网络图标&#xff0c;然后打开“网络和Internt设置” 第二个入口 桌面的“我的网络”快捷方式&#xff0c;或者我的电脑进去后&#xff0c;左侧栏找到“网络” 右键“属性” 可以看到&#xff0c;…

【论文阅读VLDB13】Online, Asynchronous Schema Change in F1

Online, Asynchronous Schema Change in F1 ABSTRACT 在一个globally 分布式数据库&#xff0c;with shared data, stateless servers, and no global membership.进行一个schema演变。证明许多常见的模式更改可能会导致异常和数据库损坏&#xff0c;通过将破坏引起的模式更改…

Git 命令详解

系列文章目录 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 C技能系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the future of dream we…

消息队列简介

消息队列 在认识rabbitMQ之前&#xff0c;我们需要先认识下消息队列。 消息队列&#xff0c;一般简称为MQ&#xff08;Message Queue&#xff09;。先不管消息(Message)这个词&#xff0c;先看看队列(Queue)。 队列就是一种先进先出的数据结构。 所以消息队列可以简单理解为&a…

rasa train nlu详解:1.2-_train_graph()函数

本文使用《使用ResponseSelector实现校园招聘FAQ机器人》中的例子&#xff0c;主要详解介绍_train_graph()函数中变量的具体值。 一.rasa/model_training.py/_train_graph()函数   _train_graph()函数实现&#xff0c;如下所示&#xff1a; def _train_graph(file_importer…

Kubernetes基础(七)-Pod资源Limits与Requests

在k8s的集群环境中&#xff0c;资源的合理分配和使用非常重要。毕竟容器化要解决的问题之一就是资源的充分利用。在集群中分配资源的时候就不得不提到Limits和Requests。 1 Namespace配额 Kubernetes 是允许管理员在命名空间中指定资源 Requests 和 Limits 的&#xff0c;这一…

Linux输入与输出设备的管理

计算机系统中CPU 并不直接和设备打交道&#xff0c;它们中间有一个叫作设备控制器&#xff08;Device Control Unit&#xff09;的组件&#xff0c;例如硬盘有磁盘控制器、USB 有 USB 控制器、显示器有视频控制器等。这些控制器就像代理商一样&#xff0c;它们知道如何应对硬盘…

Python 使用tkinter的Menu菜单command参数与bind方法共用触发事件

用普通函数作为媒介&#xff0c;使用event_generate()方法模拟触发bind()事件来创建一个模拟的event对象&#xff0c;并将其传递给绑定的事件处理函数。 运行结果 示例代码 import tkinter as tk# 菜单事件 def menuEvent(event):print(event.x, event.y)label.config(textf鼠…

HIKVISION流媒体管理服务器后台任意文件读取漏洞

默认账号密码为 admin/12345 构造payload /systemLog/downFile.php?fileName../../../../../../../../../../../../../../../windows/system.ini漏洞证明 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播…

Yum配置、相关命令和常见问题

搭建光盘源 将系统盘读取出来&#xff0c;找到系统盘下存放软件包的目录 2.配置yun仓库 输入命令进入仓库编辑 #必须以.repo结尾 :wq 回车保存退出 3.命令行输入yum repolist 查看yum仓库 配置硬盘源 1.将硬盘源拷贝到目录&#xff0c;或者挂载到目录 2.指定repo文件baseu…

php性能追踪与分析

PHP扩展下载&#xff1a;https://pecl.php.net/package/xhprof php.ini配置 [xhprof] extensionxhprof xhprof.output_dir/temp/xhprof auto_prepend_file /temp/inject_xhprof.php if(php_sapi_name() cli) {return; }$xhprof_config[enabled]1;if(!empty($xhprof_config…

自动化测试测试框架封装改造

PO模式自动化测试用例 PO设计模式是自动化测试中最佳的设计模式&#xff0c;主要体现在对界面交互细节的封装&#xff0c;在实际测试中只关注业务流程就可以了。 相较于传统的设计&#xff0c;在新增测试用例后PO模式有如下优点&#xff1a; 1、易读性强 2、可扩展性好 3、…