Rasa NLU是否支持通配符实体?如何提取自由文本实体?
Rasa NLU中的自由文本实体提取方案
嘿,好问题!Rasa确实有对应的机制来处理这种无明确定义的自由文本实体提取,不过它的实现方式和Wit、Dialogflow那些平台的预构建通配符实体略有不同,下面给你拆解清楚:
1. 自定义正则表达式实体
你可以手动定义正则表达式实体来模拟通配符的效果,匹配任意格式的目标文本。比如针对你例子里的场景,想要提取类似coconut nut is not a nut这类连续文本,就可以在Rasa的配置文件里设置一个宽泛的正则:
entities: - name: free_text regex: - pattern: ".*" case_sensitive: false
不过要注意,这种过于宽泛的正则容易匹配无关内容,建议结合特定意图来约束——比如只在research_topic这类意图下启用该实体的提取,避免干扰其他意图的实体识别。
2. 基于DIETClassifier的训练式提取
Rasa的DIET模型支持通过标注训练数据来学习提取自由文本实体,这比正则更灵活,能结合上下文判断目标内容。你只需要在训练样本里标记出要提取的自由文本部分就行,比如:
## intent:research_topic - Can you research for [coconut nut is not a nut](free_text) - I need details about [how renewable energy affects rural economies](free_text) - Look up info on [the differences between jazz and blues](free_text)
只要你提供足够多样的标注样本,DIET就能学会识别这类无固定格式的实体,甚至能适应不同语境下的文本变化。
小提醒
- 如果用正则的话,尽量不要直接用
.*这种全匹配,最好根据实际场景缩小范围(比如匹配到句号、问号前的内容,或者限定在特定动词后的文本),提升提取精度。 - 用DIET训练时,样本的多样性很重要,覆盖越多不同类型的自由文本场景,模型的泛化能力就越强。
内容的提问来源于stack exchange,提问作者DeepProblems
相关产品推荐
相关产品推荐

