如何使用RASA从用户语句中提取产品名称实体?
RASA固定句式任意产品实体提取解决方案
1. 排查正则不生效的核心原因
你写的正则没生效90%概率是配置问题:RASA中RegexFeaturizer仅负责给分类模型提供正则特征,不会直接提取实体,要让正则规则直接匹配实体,必须在pipeline中添加RegexEntityExtractor组件。
2. 调整config.yml配置
在你的pipeline中按如下顺序添加对应组件:
pipeline: - name: WhitespaceTokenizer - name: RegexFeaturizer - name: LexicalSyntacticFeaturizer # 新增正则实体提取组件 - name: RegexEntityExtractor use_regexes: true # 匹配含特殊字符的产品名可以关闭单词边界校验 use_word_boundaries: false - name: DIETClassifier epochs: 100 - name: EntitySynonymMapper
3. 编写匹配规则
在nlu.yml中添加对应正则规则,直接提取三类句式中的实体内容:
nlu: - regex: product examples: | # (?i)代表忽略大小写,括号内捕获组内容会被识别为product实体 - (?i)^add\s+(.+)\s+to\s+cart$ - (?i)^select\s+(.+)$ - (?i)^put\s+(.+)\s+in\s+cart$
可选:无正则训练方案
如果不想维护正则规则,可以在nlu训练示例中加入20-30条不同的示例,覆盖不同长度、包含数字/特殊字符/多空格的产品名,DIET会自动学习到add和to cart中间、select之后、put和in cart中间的内容就是product实体,训练充分的情况下也能稳定识别任意产品名,示例如下:
- intent: add_to_cart examples: | - Add [cotton oversized t-shirt](product) to cart - Add [wireless noise-cancelling headphone pro 2](product) to cart - Add [5-pack 100% organic bamboo socks](product) to cart - Select [US 9.5 black waterproof hiking shoes](product) - Select [vintage brown leather crossbody bag](product) - Put [24-pack 550ml mineral water](product) in cart - Put [limited edition RGB wireless gaming mouse](product) in cart
兜底优化方案(100%识别任意内容)
如果希望完全不依赖模型,固定提取对应位置的内容,可以自定义轻量实体提取组件:
- 继承RASA的
EntityExtractor基类 - 对识别到
add_to_cart/select_item/put_in_cart意图的用户输入做字符串切割,直接取出对应位置的内容作为product实体 - 将自定义组件添加到pipeline的最后即可
内容的提问来源于stack exchange,提问作者Pola8976
相关产品推荐
相关产品推荐

