自然语言处理(NLP)—— rasa的测试

1. 测试 Rasa NLU 模型

运行 `rasa test nlu` 命令会测试你的 Rasa NLU 模型。这个命令主要做以下几件事情:

1.1 意图识别测试

检查模型在识别用户意图方面的性能。这包括每个意图的准确率、召回率和 F1 得分。

1.2 实体提取测试

检查模型在识别和提取预定义实体方面的性能。同样会计算准确率、召回率和 F1 得分。

1.3 交叉验证测试

如果没有提供专门的测试数据集,命令将执行交叉验证。交叉验证是一种统计方法,用于评估并比较学习算法的性能,通过将数据集分成训练和测试数据的多个组合来进行。

1.4 结果报告

在执行测试后,你会得到一个报告,通常是在一个新创建的 `results` 文件夹中。这个报告详细说明了模型的性能,并包括意图和实体的混淆矩阵、分类报告和错误预测的例子。

1.5 模型对比

如果你有多个模型或多个配置,并且你想比较它们的性能,这个命令可以帮助你通过在相同数据集上运行它们来评估它们的性能差异。

确保 `data/nlu.yml` 包含了你的 NLU 训练数据,并且 `config.yml` 包含了 NLU 模型的配置信息。这个测试对于理解你的 NLU 模型在实际使用中可能的性能表现至关重要,同时也是迭代改进模型的一个重要部分。

2. 如何使用 spaCy

使用 spaCy 作为 Rasa 的一部分涉及以下几个步骤:

2.1 安装 spaCy

首先,你需要安装 spaCy 以及相应语言模型。可以通过以下命令安装:

pip install spacy
python -m spacy download en_core_web_md

确保选择一个适合你的语言和需求的模型。`en_core_web_md` 是针对英语的中等大小模型,提供了词性标注、句法分析以及实体识别的能力。

2.2 配置 Rasa 使用 spaCy

在你的 Rasa 配置文件(通常是 `config.yml`)中,需要加入以下几行来使用 spaCy:

pipeline:
- name: SpacyNLP
  model: "en_core_web_md"
- name: SpacyTokenizer
- name: SpacyFeaturizer
- name: SpacyEntityExtractor
- name: EntitySynonymMapper
- name: SklearnIntentClassifier

2.3 训练 Rasa 模型

配置好了 spaCy 后,你就可以像往常一样训练 Rasa 模型了。使用以下命令来进行训练:

rasa train

2.4 使用 spaCy 进行实体提取

在你的 NLU 训练数据中,你可以通过指定实体类型来标注实体,spaCy 实体提取器将能识别这些实体。比如:

nlu:
- intent: search_flight
  examples: |
    - I want to fly from [Berlin](location) to [San Francisco](location)
    - Show me flights to [Paris](location)

2.5 注意事项

在你的 Rasa 项目中使用 spaCy 之前,确保你的 Rasa 版本和 spaCy 版本兼容。使用 spaCy 会影响你的 NLU 模型的性能,因为 spaCy 的模型通常比 Rasa 默认使用的 TensorFlow Embedding 更为复杂。如果使用的是其他语言,需要下载对应语言的 spaCy 模型并在配置文件中相应地更新。

3. 知识驱动技术

在 Rasa 中,你可以集成多种技术来增强聊天机器人的能力。以下是你提到的每种技术类型的一些 Rasa 组件或相关的实现方式:

3.1 本体论 (Ontology)

在 Rasa 中并没有内置直接支持本体论的组件。但是,你可以利用自定义 actions 来集成外部的本体论管理系统,比如使用 [OWL](https://www.w3.org/OWL/) (Web Ontology Language) 或其他本体论框架。

3.2 逻辑推理

同上,逻辑推理通常需要通过外部服务或自定义代码在 actions 中实现。

3.3 词网 (WordNet)

不是 Rasa 的直接组件。但是,你可以使用如 [NLTK](https://www.nltk.org/) 这样的自然语言处理库来访问词网,并在自定义 actions 中使用它。

3.4 同义词

在 NLU 管道中,可以通过查找表(lookup tables)或同义词(synonyms)功能来实现同义词识别。

4. 学习驱动技术

4.1 频率方法

Rasa 的意图分类器(如 `RegexIntentClassifier`)可以基于正则表达式匹配使用频率方法。

4.2 统计机器学习

`DIETClassifier` 是一个基于 Transformer 的模型,能同时进行意图识别和实体识别。`CRFEntityExtractor` 是基于条件随机场(CRF)的实体提取器。

4.3 深度学习

`ResponseSelector` 用于检索式响应选择。`TEDPolicy` 使用 Transformer 模型来预测对话中的下一步行为。

5. 语法驱动技术

5.1 句法分析

Rasa 没有内置句法分析工具,但你可以集成如 [spaCy](https://spacy.io/) 的 NLP 库来执行句法分析。

5.2 正则表达式

`RegexFeaturizer` 可以基于用户提供的正则表达式生成消息特征。`RegexEntityExtractor` 可以使用正则表达式来识别和提取消息中的实体。

5.3 词形归并

`SpacyNLP` 与 spaCy 集成,提供词形归并功能。

5.4 形态分析

同上,`SpacyNLP` 组件可以进行形态分析。

6. 经典的 Rasa NLU Pipeline 配置示例

以下是一些 Rasa NLU pipeline 的经典配置示例:

6.1 基于 spaCy 的 Pipeline

适用于需要利用 spaCy 的强大语言处理能力,特别是在句法分析方面。

language: "en"

pipeline:
- name: SpacyNLP
- name: SpacyTokenizer
- name: SpacyFeaturizer
- name: SpacyEntityExtractor
- name: DIETClassifier
  epochs: 100
- name: EntitySynonymMapper
- name: ResponseSelector
  epochs: 100

6.2 基于 TensorFlow 的 Pipeline

适用于需要深度学习和自定义实体提取的场景。

language: "en"

pipeline:
- name: WhitespaceTokenizer
- name: RegexFeaturizer
- name: LexicalSyntacticFeaturizer
- name: CountVectorsFeaturizer
- name: CountVectorsFeaturizer
  analyzer: "char_wb"
  min_ngram: 1
  max_ngram: 4
- name: DIETClassifier
  epochs: 100
  constrain_similarities: true
- name: EntitySynonymMapper
- name: ResponseSelector
  epochs: 100
- name: FallbackClassifier
  threshold: 0.3
  ambiguity_threshold: 0.1

6.3 基于 BERT 的 Pipeline (使用 Rasa 2.0 及以上)

适用于想要使用 BERT 或类似预训练转换器模型进行意图识别和实体提取的场景。

language: "en"

pipeline:
- name: HFTransformersNLP
  model_name: "bert"
  model_weights: "rasa/LaBSE"
- name: LanguageModelTokenizer
- name: LanguageModelFeaturizer
- name: DIETClassifier
  epochs: 200
  constrain_similarities: true
- name: EntitySynonymMapper
- name: ResponseSelector
  epochs: 200

6.4 基于规则的 Pipeline

适用于那些想要以规则为基础进行实体提取和意图分类的简单场景。

language: "en"

pipeline:
- name: WhitespaceTokenizer
- name: RegexFeaturizer
- name: RegexEntityExtractor
- name: CRFEntityExtractor
- name: EntitySynonymMapper
- name: SklearnIntentClassifier

7. 默认 Pipeline

pipeline:

# No configuration for the NLU pipeline was provided. The following default pipeline was used to train your model.
# If you'd like to customize it, uncomment and adjust the pipeline.
# See https://rasa.com/docs/rasa/tuning-your-model for more information.

# 1. 符号化器
- name: WhitespaceTokenizer

# 2. 特征提取器
- name: RegexFeaturizer
- name

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

# 3. 意图分类器
- name: DIETClassifier
  epochs: 100
  constrain_similarities: true

# 4. 实体提取器
- name: EntitySynonymMapper

# 5. 响应选择器
- name: ResponseSelector
  epochs: 100
  constrain_similarities: true

# 6. 回退分类器
- name: FallbackClassifier
  threshold: 0.3
  ambiguity_threshold: 0.1
相关推荐
DogDaoDao33 分钟前
【预备理论知识——2】深度学习:线性代数概述
人工智能·深度学习·线性代数
牛哥带你学代码34 分钟前
交叠型双重差分法
人工智能·深度学习·机器学习
学步_技术41 分钟前
自动驾驶系列—线控系统:驱动自动驾驶的核心技术解读与应用指南
人工智能·机器学习·自动驾驶·线控系统·转向系统
jmoych1 小时前
AI正悄然地影响着企业数字化转型
人工智能
说私域1 小时前
社群团购中的用户黏性价值:以开源小程序多商户AI智能名片商城源码为例
人工智能·小程序
quaer1 小时前
Open-Sora全面开源?
开发语言·算法·机器学习·matlab·矩阵
深度学习实战训练营2 小时前
基于keras的停车场车位识别
人工智能·深度学习·keras
乔代码嘚2 小时前
AI2.0时代,普通小白如何通过AI月入30万
人工智能·stable diffusion·aigc
墨@#≯2 小时前
机器学习系列篇章0 --- 人工智能&机器学习相关概念梳理
人工智能·经验分享·机器学习
Elastic 中国社区官方博客2 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索