对话机器人(五)——RASA:Config

定义了模型将用于根据用户输入进行预测的组件策略。recipe: 当前配置文件所用的格式,rasa仅支持default.v1格式。

recipe: default.v1
language: en

pipeline:
# 将由 Suggested Config 功能选择

policies:
- name: MemoizationPolicy
- name: TEDPolicy
  max_history: 5
  epochs: 10

1. pipline组件

组件构成NLU pipline并按顺序将用户输入处理成结构化输出。包含语言模型、分词器、特征提取、实体识别、意图分类、结构化输出。

组件具有以下特征:

  • 组件的顺序至关重要
  • 组件是可以替换的
  • 有些组件时互斥的
  • 有些组件可以同时使用

a. 语言模型

加载预训练的词向量模型。

(1) MitieNLP

MITIE 库需要一个语言模型文件,必须在配置中指定。

pipeline:
- name: "MitieNLP"
  # 加载语言模型
  model: "data/total_word_feature_extractor.dat"

可以使用mitie预训练自己的词向量。参考: 用 Rasa NLUpedia 制造自己的中文NLU 系统

(2) spaCyNLP

初始化 spaCy 结构。每个 spaCy 组件都依赖于此,需要放在pipline的开头。

pipeline:
- name: "SpacyNLP"
  # 加载语言模型
  model: "en_core_web_md"
  # 当检索单词向量时,这将决定单词的大小写是否相关。' False'则是忽略大小写。
  case_sensitive: False

参考: 安装 SpaCy

b. 分词器

组件依赖备注
JiebaTokenizerJieba
MitieTokenizerMitie支持中文分词
spaCyTokenizerspaCy
  • 还可以自定义分词器
pipeline:
- name: "JiebaTokenizer"
  dictionary_path: "path/to/custom/dictionary/dir"
  # 检查是否拆分意图的标志
  "intent_tokenization_flag": False
  # 意图分割的符号
  "intent_split_symbol": "_"
  # 正则表达式检测token
  "token_pattern": None

c. 特征提取

组件类型特点
MitieFeaturizer密集特征
SpacyFeaturizer密集特征
ConveRTFeaturizer密集特征仅在英语会话语料库上进行训练
LanguageModelFeaturizer密集特征
RegexFeaturizer稀疏特征会读取训练数据中的正则表达式配置
CountVectorsFeaturizer稀疏特征使用词袋模型
LexicalSyntacticFeaturizer稀疏特征提供词法和语法特征
(1) MitieFeaturizer
pipeline:
- name: "MitieFeaturizer"
  # 池化操作。'mean'和'max'
  "pooling": "mean"
(2) SpacyFeaturizer
pipeline:
- name: "SpacyFeaturizer"
  # 池化操作。'mean'和'max'
  "pooling": "mean"
(3) ConveRTFeaturizer
pipeline:
- name: "ConveRTFeaturizer"
# 模型文件的远程URL/本地目录(必填)
"model_url": None
(4) LanguageModelFeaturizer

需要指定加载的语言模型和权重。

pipeline:
  - name: LanguageModelFeaturizer
    model_name: "bert"
    model_weights: "rasa/LaBSE"
    # 目录路径
    cache_dir: null

LanguageModelFeaturizer参数:

Language Model“model_name”“model_weights”
BERTbertrasa/LaBSE
GPTgptopenai-gpt
GPT-2gpt2gpt2
XLNetxlnetxlnet-base-cased
DistilBERTdistilbertdistilbert-base-uncased
RoBERTarobertaroberta-base
(5) RegexFeaturizer
pipeline:
- name: "RegexFeaturizer"
  # 文本将默认区分大小写
  "case_sensitive": True
  # 为查找表使用匹配词边界
  "use_word_boundaries": True
(6) CountVectorsFeaturizer
pipeline:
- name: "CountVectorsFeaturizer"
  # 要使用的分析器,'word'、'char' 或 'char_wb'
  "analyzer": "word"
  # 设置 n-gram 的上下边界
  "min_ngram": 1
  "max_ngram": 1
  # 设置词汇表外标记
  "OOV_token": "_oov_"
  # 是否使用共享词汇
  "use_shared_vocab": False
(7) LexicalSyntacticFeaturizer

为实体提取创建特征。在用户消息中的每个令牌上移动一个滑动窗口,并根据配置创建功能。由于存在默认配置,因此无需指定配置。

pipeline:
- name: LexicalSyntacticFeaturizer
  "features": [
    ["low", "title", "upper"],
    ["BOS", "EOS", "low", "upper", "title", "digit"],
    ["low", "title", "upper"],
  ]

d. 实体识别

多数组件不可同时使用,少数组件可有条件地和其他组件同时使用

组件备注
MitieEntityExtractor
SpacyEntityExtractor只能用Spacy内置的实体提取模型,无法进行再训练。人名、地名、组织结构名等。
CRFEntityExtractor
DucklingEntityExtractor只能用预定义的实体,不能再训练。邮箱、距离、时间等。
DIETClassifier
RegexEntityExtractor读取训练数据中的查找表及正则表达式
EntitySynonymMapper用于同义词改写,将提取到的实体标准化

实体识别的结果包含实体类型(entity)、实体对应开始(start)和结尾的位置(end)、实体置信度(confidence)、实体名(value)、提取器(extractor)。

{
    "entities": [{
        "value": "New York City",
        "start": 20,
        "end": 33,
        "confidence": null,
        "entity": "city",
        "extractor": "MitieEntityExtractor"
    }]
}

e. 意图分类

组件依赖备注
MitieIntentClassifierMitie
LogisticRegressionClassifier
SklearnIntentClassifierSklearn
KeywordIntentClassifier
DIETClassifierTensorflow
FallbackClassifier若其他组件预测的意图得分低,该组件将意图改为NLU fallback
{
    "intent": {"name": "greet", "confidence": 0.780},
    "intent_ranking": [
        {
            "confidence": 0.780,
            "name": "greet"
        },
        {
            "confidence": 0.140,
            "name": "goodbye"
        },
        {
            "confidence": 0.080,
            "name": "restaurant_search"
        }
    ]
}

置信度:(confidence)

f. 组合意图分类和实体提取

DIETClassifier:通过在transformer输出序列上与输入标记序列相对应的CRF标记层来预测实体标记序列。对于意图标签,transformer输出的完整话语和意图标签嵌入到单个语义向量空间。我们使用点积损失最大化与目标标签的相似性和最小化与负样本的相似性。

{
    "intent": {"name": "greet", "confidence": 0.8343},
    "intent_ranking": [
        {
            "confidence": 0.385910906220309,
            "name": "goodbye"
        },
        {
            "confidence": 0.28161531595656784,
            "name": "restaurant_search"
        }
    ],
    "entities": [{
        "end": 53,
        "entity": "time",
        "start": 48,
        "value": "2017-04-10T00:00:00.000+02:00",
        "confidence": 1.0,
        "extractor": "DIETClassifier"
    }]
}

g. 选择器 ResponseSelector

目的:FAQ(常见问题解答)/闲聊。

为每种问题定义一种分类,为每种分类定义想要返回给用户的答案。从一组候选回复中预测机器人回复。

(1) 如何定义用户问题

采用group/intent格式命名,group称为检索意图。

(2) 如何定义问题答案

意图名为intent的问题都需要有一个名为utter_intent的response作为答案。

  • response:对应检索意图下的预测响应键,预测的置信度和相关响应。
  • ranking:使用前 10 个候选响应键的置信度进行排名。
{
    "response_selector": {
      "faq": {
        "response": {
          "id": 1388783286124361986,
          "confidence": 0.7,
          "intent_response_key": "chitchat/ask_weather",
          "responses": [
            {
              "text": "It's sunny in Berlin today",
              "image": "https://i.imgur.com/nGF1K8f.jpg"
            },
            {
              "text": "I think it's about to rain."
            }
          ],
          "utter_action": "utter_chitchat/ask_weather"
         },
        "ranking": [
          {
            "id": 1388783286124361986,
            "confidence": 0.7,
            "intent_response_key": "chitchat/ask_weather"
          },
          {
            "id": 1388783286124361986,
            "confidence": 0.3,
            "intent_response_key": "chitchat/ask_name"
          }
        ]
      }
    }
}

2. 策略

策略:决定对话每个step要执行的动作。学习故事,从而预测动作。

通过特征提取组件将故事转换成对话状态,从而得到对话状态特征,按照对话特征预测下一个对话动作。

# config.yml
policies:
  - name: "MemoizationPolicy"
     max_history: 5
  - name: "FallbackPolicy"
     nlu_threshold: 0.4
     core_threshold: 0.3
     fallback_action_name: "my_fallback_action"
  - name: "path.to.your.policy.class"
     arg1: "..."

a. 内建的策略

策略名描述
TEDPolicy(transformer embedding dialogue)将当前会话映射成一个对话向量,找到和这个向量最近的已知动作的对话向量。
MemoizationPolicy记住历史中出现的状态和对应的动作,即字典。
AugmentedMemoizationPolicy比MemoizationPolicy多一个遗忘机制,随机遗忘当前对话历史中的部分步骤,试图在训练的故事集中寻找和当前历史匹配的故事。
RulePolicy规则驱动。包含:MappingPolicy、FallbackPolicy、TowStageFallbackPolicy、FormPolicy
❃ TEDPolicy

一种用于下一步动作预测和实体识别的多任务架构。该架构由两个任务共享的几个transformer encoder组成。实体标签序列是通过CRF标记层预测的,该标记层位于对应于输入令牌序列的用户序列transformer encoder输出之上。对于下一个动作预测,对话transformer encoder输出和系统动作标签被嵌入到单个语义向量空间中。我们使用点积损失来最大化与目标标签的相似性并最小化与负样本的相似性。

TED 策略架构包括以下步骤

  1. 连接特征

    • 用户输入(用户意图和实体)或通过用户序列transformer encoder处理的用户文本,
    • 通过机器人序列transformer encoder处理的先前系统动作或机器人话语,
    • 插槽和动作表单

    对于每个时间步,进入对话transformer之前的嵌入层的输入向量。

  2. 将输入向量的嵌入馈送到对话transformer encoder中。

  3. 将密集层应用于对话transforme的输出,以获得每个时间步的对话嵌入。

  4. 应用密集层为每个时间步的系统操作创建嵌入。

  5. 计算对话嵌入和嵌入式系统动作之间的相似度。这一步是基于StarSpace的想法。

  6. 将用户序列transformer encoder的令牌级输出与每个时间步的对话transformer encoder的输出连接起来。

  7. 应用 CRF 算法来预测每个用户文本输入的上下文实体。

配置,参数

  • max_history:查看多少条历史对话来决定下一步动作。默认为None,则会话重启后所有的历史记录被考虑在内。

其他参数见官方文档

# config.yml
policies:
- name: TEDPolicy
  epochs: 200

b. 策略优先级

每个策略独立预测下一个动作后,会使用得分最高的动作。在得分相同的情况下,策略的优先级数值越高,策略就越优先。

优先级策略
6RulePolicy
3MemoizationPolicy和AugmentedMemoizationPolicy
1TEDPolicy

3. endpoints

端点:定义rasa core和其他服务进行连接的配置信息。endpoints.yml

目前支持的端点:event broker、tracker store、lock store、action server、NLU 服务器、NLG服务器和model storage。

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

参考文献:
[1] 孔小泉,王冠.Rasa实战:构建开源对话机器人[M].电子工业出版社.2022:201.
[2] RASA官方文档 https://rasa.com/docs/rasa/rules

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值