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

时间:2019-07-12 10:55:42

标签: spacy rasa-nlu

在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

1 个答案:

答案 0 :(得分:1)

这可能是一个过高的答案,但可能您只需要更多训练数据。这可能意味着您必须在delete之外再加上其他单词。

是的,spaCy可以在您包括的单词之外进行泛化,但是如果针对该意图的所有训练数据都使用单词delete,那么您正在训练它仅接受该单词,或者该单词极为重要。如果您添加了更多类似的词来删除,则会训练您允许使用相关词。

就TensorFlow管道而言,直到您使用它们才知道单词是否存在,因此最好为您提供服务,包括至少移除一次,以便它可以建立连接删除和移除(以及取消,调用掉落,掉落等)

此外,您当前正在使用小型spaCy语言模型,一旦获得了更多的训练数据,尝试使用较大的spaCy语言模型中的一种可能会很有用。