在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
答案 0 :(得分:1)
这可能是一个过高的答案,但可能您只需要更多训练数据。这可能意味着您必须在delete
之外再加上其他单词。
是的,spaCy可以在您包括的单词之外进行泛化,但是如果针对该意图的所有训练数据都使用单词delete
,那么您正在训练它仅接受该单词,或者该单词极为重要。如果您添加了更多类似的词来删除,则会训练您允许使用相关词。
就TensorFlow管道而言,直到您使用它们才知道单词是否存在,因此最好为您提供服务,包括至少移除一次,以便它可以建立连接删除和移除(以及取消,调用掉落,掉落等)
此外,您当前正在使用小型spaCy语言模型,一旦获得了更多的训练数据,尝试使用较大的spaCy语言模型中的一种可能会很有用。