官方文档
https://rasa.com/docs/rasa/components
记录几个感觉比较重要的:
语言模型 Language Model
- MitieNLP: 预训练的语言模型之一,需要指定模型文件,网上有可以下载到的用百度知道和维基百科训练好的中文模型文件。
- SpacyNLP: 另一个预训练的语言模型。也需要指定模型文件,以中文为例,有几个版本,https://spacy.io/usage/models, 小的几十M,大的几百M. 推荐使用至少中型模型,即 md,否则影响意图分类的性能。
在一些文章里看到说是官方推荐使用 SpacyNLP, 但是我在官方文档里没有找到这样的说明。但给我的感觉是 SpacyNLP 更正规一些,至少可以下载到官方训练好的语言模型。而不需要去百度网盘去下载一些个人训练的模型。
是否必须使用语言模型? 之所以有这个疑问,是因为我看到可以使用结巴分词,那么就没有使用语言模型的必要了。
如果 Rasa NLU 里面引用预训练的语言模型,那就需要提前加载,如果 Tokenize 使用空格分词或者结巴分词,特征向量使用 One-hot 编码或者 CountVectorsFeaturizer 编码,那就不在需要语言模型了。
分词组件 Tokenizers
将对话文本分割成 token, 即切割成词。
- WhitespaceTokenizer: 基于空格的分词策略,不适合中文,适合英文。
- JiebaTokenizer: 比较出名的中文分词组件,结巴分词。
- MitieTokenizer: 使用 MITIE 进行分词。依赖 Mitie
- SpacyTokenizer: 使用 spaCy 进行分词。依赖 spaCy
特征提取组件 Featurizers
可以使用多个组件来提取特征,例如正则等。
- RegexFeaturizer: Creates a vector representation of user message using regular expressions, 正则提取
其他几个,我没看懂。。。等实操时再理解吧。
意图分类组件 Intent Classifiers
即,意图识别。
Intent classifiers assign one of the intents defined in the domain file to incoming user messages.
意图定义在项目根目录的 domain.yml 配置文件中,例如:
version: "3.1"
intents:
- greet
- goodbye
- bot_challenge
responses:
utter_greet:
- text: "Hey! How are you?"
utter_goodbye:
- text: "Bye"
utter_iamabot:
- text: "I am a bot, powered by Rasa."
- MitieIntentClassifier
- LogisticRegressionClassifier
- SklearnIntentClassifier
- KeywordIntentClassifier: 通过关键词匹配来识别意图,默认是大小写敏感,可以设置成不敏感。适合小项目,其实就很适合我目前需求。
- DIETClassifier
- FallbackClassifier
Entity Extractors
疑问
意图是如何识别出来的? 仅仅从 nlu.yml 配置文件中的那些硬编码规则,如何能智能识别意图?
data 目录下的 nlu.yml 就是训练数据。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式