如何在使用 Spacy 作为管道时提高 Rasa NLU 的准确性?

How to improve accuracy of Rasa NLU while using Spacy as pipeline?

在 Spacy 文档中提到它在特征化和分类中使用 vector similarity

例如,如果我们测试一个不在训练数据中但具有相同含义的句子,那么它应该按照训练句子分类的相同意图进行分类。

但这并没有发生。 假设训练数据是这样的-

## intent: delete_event
- delete event
- delete all events
- delete all events of friday
- delete ...

现在,如果我测试 remove event,那么它不会被归类为 delete_event,而是属于其他意图。

我尝试将管道更改为 supervised_embeddings 并且还对 spacy 管道的组件进行了更改。但是还是有这个问题。

我不想为 remove... 文本创建训练数据,因为根据它的文档,spacy 应该支持它。

我没有其他包含句子 delete... 的意图。

rasa 中的配置文件 -

language: "en_core_web_sm"

pipeline:
- name: "SpacyNLP"
- name: "SpacyTokenizer"
- name: "SpacyFeaturizer"
- name: "RegexFeaturizer"
- name: "SpacyEntityExtractor"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "SklearnIntentClassifier"

policies:
- name: MemoizationPolicy
- name: KerasPolicy
- name: MappingPolicy

这可能是一个过度的回答,但您可能只需要更多的训练数据。这可能意味着除了 delete.

之外,您还必须包含其他一些词

是的,spaCy 可以在您包含的词之外进行概括,但是如果您针对该意图的所有训练数据都使用词 delete 那么您正在训练它只接受该词或该词非常重要.如果你包含更多要删除的相似词,你训练它允许相关词。

就 TensorFlow 管道而言,它甚至不知道单词的存在,直到你使用它们,所以你最好至少包括一次删除,这样它就可以构建连接删除和删除(和取消)的向量,取消,放弃等)

此外,您目前使用的是小型 spaCy 语言模型,一旦获得更多训练数据,尝试使用较大的语言模型可能会有用。