自然语言处理(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
相关推荐
如生命般费解的谜团42 分钟前
LLM学习笔记(7)Scaled Dot-product Attention
人工智能·笔记·学习·语言模型·json
IT古董2 小时前
【机器学习】如何使用Python的Scikit-learn库实现机器学习模型,并对数据进行预处理和特征缩放以提高模型性能?
python·机器学习·scikit-learn
FreeIPCC3 小时前
电话机器人是什么?
大数据·人工智能·语言模型·机器人·开源·信息与通信
至善迎风3 小时前
施密特正交化与单位化的情形
线性代数·算法·决策树·机器学习
字节数据平台3 小时前
火山引擎数据飞轮探索零售企业大促新场景:下放营销活动权限
大数据·人工智能
努力学习的啊张4 小时前
消息称三星正与 OpenAI 洽谈,有望令 Galaxy AI 整合ChatGPT,三星都要和chatgpt合作了,你会使用chatgpt了吗?
人工智能·chatgpt
Together_CZ4 小时前
GPT-4 Technical Report——GPT-4技术报告
人工智能·gpt-4
huaqianzkh5 小时前
人工智能大趋势下软件开发的未来
人工智能
酱香编程,风雨兼程6 小时前
深度学习——多层感知机的从零开始实现和简洁实现
人工智能·深度学习
King.6246 小时前
sql工具!好用!爱用!
大数据·数据库·人工智能·sql·学习