如何将Rasa作为库使用,基于config、nlu、stories训练模型并测试
将Rasa作为Python库使用:基于config、NLU、Stories训练与测试模型
如果你想把Rasa当作Python库而非命令行框架使用,直接通过代码调用API完成模型训练和测试,可以按照以下步骤操作:
前置准备
- 安装Rasa:
pip install rasa - 准备好所需配置文件:
config.yml:定义NLU pipeline和对话策略nlu.yml:NLU训练数据(意图、实体示例)stories.yml:对话流程示例domain.yml:领域配置(包含意图、实体、可用动作、回复模板等,Core模型必需)
1. 训练NLU模型
通过Rasa的NLU API单独训练意图识别和实体提取模型:
from rasa.nlu.training_data import load_data from rasa.nlu.config import RasaNLUModelConfig from rasa.nlu.model import Trainer # 加载NLU训练数据和配置文件 nlu_training_data = load_data("nlu.yml") nlu_config = RasaNLUModelConfig.from_yaml_file("config.yml") # 初始化训练器并执行训练 nlu_trainer = Trainer(nlu_config) nlu_trainer.train(nlu_training_data) # 将训练好的模型保存到指定目录 nlu_model_path = nlu_trainer.persist("./models/nlu", fixed_model_name="latest")
2. 训练Core对话模型
训练处理对话流程的Core模型,依赖domain和stories数据:
from rasa.core.agent import Agent from rasa.core.policies import MemoizationPolicy, KerasPolicy from rasa.core.training import load_data as load_stories_data from rasa.core.domain import Domain # 加载领域配置和对话stories domain = Domain.load("domain.yml") stories = load_stories_data("stories.yml") # 配置对话策略(可根据需求调整) policies = [MemoizationPolicy(max_history=3), KerasPolicy()] # 初始化Agent并训练Core模型 agent = Agent(domain, policies=policies) agent.train(stories) # 保存Core模型 agent.persist("./models/core")
3. 联合训练NLU+Core模型
如果需要一次性训练NLU和Core模型,可使用Rasa的联合训练API:
from rasa import train # 执行联合训练,自动处理NLU和Core部分 train( domain="domain.yml", config="config.yml", training_files=["nlu.yml", "stories.yml"], output="./models" )
4. 测试NLU模型
加载训练好的NLU模型,测试意图识别和实体提取效果:
from rasa.nlu.model import Interpreter # 加载NLU模型 interpreter = Interpreter.load(nlu_model_path) # 测试示例文本 test_text = "我要预约下周三的牙科门诊" parsed_result = interpreter.parse(test_text) print(f"识别意图: {parsed_result['intent']['name']}") print(f"意图置信度: {parsed_result['intent']['confidence']:.2f}") print(f"提取实体: {[(ent['entity'], ent['value']) for ent in parsed_result['entities']]}")
5. 测试Core对话模型
加载Core模型,模拟对话交互:
from rasa.core.agent import Agent # 加载Core模型(如果是联合训练的模型,直接加载整体模型路径即可) agent = Agent.load("./models/core") # 模拟单轮对话 response = agent.handle_text("我想预约门诊") for msg in response: print(f"机器人回复: {msg['text']}") # 模拟多轮对话 tracker = agent.create_tracker() tracker = agent.handle_message("我想预约门诊", tracker) tracker = agent.handle_message("下周三", tracker) final_response = agent.handle_message("牙科", tracker) for msg in final_response: print(f"机器人回复: {msg['text']}")
内容的提问来源于stack exchange,提问作者Darshan Tank
相关产品推荐
相关产品推荐

