|
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-wrap: wrap;background-color: rgb(255, 255, 255);visibility: visible;line-height: normal;">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);">之前介绍过一篇关于内隐语境研究的文章,内隐语境Prompt,让LLM更懂你的弦外音,用DSPy实现。今天给大家介绍一下用DSPy实现日常工作中的意图识别。意图识别是自然语言处理(NLP)中的一个重要任务,广泛应用于客服、智能助手等领域。通过识别用户的意图,系统可以更好地理解用户需求并提供相应的服务。本文将介绍如何使用DSPy框架和deepseek的API来构建一个意图识别模型,并展示该模型在实际应用中的效果。  ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);text-align: right;">ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 22px;letter-spacing: 0.578px;text-align: right;text-wrap: wrap;">图片由xiumaodalle生成ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);">首先在代码之前,我们应该简单了解一下内隐语境,内隐语境在中国有着非常深邃的含义,有时无需直言也能传递一定的意图。LLM的内隐语境学习其实是一个难点,用Prompt很难批量准确运行。而意图识别的用途又非常实际和广泛,恰好DSPy能够解决这个难题,不用写一句prompt,靠代码来实现意图识别。数据集准备 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);">首先,我们需要准备一个意图识别的数据集。以下是一个包含六类意图的示例数据集:train_data = { '支付问题': [ "为什么我的支付失败了?", "怎么绑定我的银行卡进行支付?", ], '商品咨询': [ "这款商品有货吗?", "请问这款手机有什么功能?", ], '促销活动': [ "现在有什么促销活动吗?", "我怎么参加你们的优惠活动?", ], '发票问题': [ "我怎么申请电子发票?", "发票什么时候可以开出来?", ], '账户安全': [ "我的账户被盗了怎么办?", "如何开启账户的双重验证?", ], '售后服务': [ "你们提供售后服务吗?", "保修期内维修是免费的吗?", ], } ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);">定义意图识别数据集 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);">我们创建一个类IntentDataset来处理数据集,并生成用于模型训练的示例。classIntentDataset: def__init__(self, data): self.data = data self.intent_labels = list(data.keys())
defgen_demonstration(self, shot_num): demonstrations = [] forintent inself.intent_labels: examples = random.sample(self.data[intent], shot_num) demonstrations.append(self._format_demonstration(intent, examples)) return'\n'.join(demonstrations) ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);">定义意图分类器ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;text-wrap: wrap;background-color: rgb(255, 255, 255);">接下来,我们定义意图分类器的输入输出接口,并创建一个分类模型。classIntentClassifier(dspy.Signature): """定义意图分类器的输入输出接口""" query = dspy.InputField(default="", desc="用户询问") intent = dspy.OutputField(default="", desc="预测的意图标签")
classModel(dspy.Module): """定义意图分类模型""" def__init__(self, demonstrations): super().__init__() self.demonstrations = demonstrations
defforward(self, **kwargs): """模型前向传播""" query = kwargs.get('query', '') prompt = f"{self.demonstrations}\n用户询问: {query}\n意图类别: " response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ], max_tokens=1024, temperature=0.7, stream=False ) intent = response.choices[0].message.content.strip() returndspy.Example(input={'query': query}, output=intent)
微调和验证模型我们使用DSPy的BootstrapFewShot进行微调,并定义验证逻辑来评估模型性能。 # 初始化意图分类模型 model = Model(demonstrations)
# 微调意图分类模型 fromdspy.teleprompt importBootstrapFewShot
# 定义验证逻辑 defvalidate_intent(example, pred, trace=None): returnpred.output == example.output
测试意图识别模型最后,我们测试模型对新询问的意图识别能力,并打印预测结果。 # 测试新询问的意图识别 test_query = "我上周买的电脑坏了,可以换一台新的吗?"
# 获取预测 pred = compiled_model(query=test_query)
# 打印结果 print(f"测试询问: {test_query}") print(f"预测意图: {pred.output}")
 本文示例从数据准备、意图分类定义到微调和测试,我完整地演示了整个过程。DSPy框架简化了模型开发的复杂性,使得意图识别任务更加高效和便捷。通过这个模型,系统能够更准确地理解用户需求,从而提供更好的服务体验。您如果先理解更多DSPy的文章可以关注本公众号。告别手写Prompt怕DSPy学不会?10行代码捏一个Agent,用DSPy Optimizers帮你优化Prompt
重磅 | DSPy让你不写一句Prompt照样构建Agent,从此,你不再卑躬屈膝讨好LLM
别再写脆弱的prompt讨好LLM啦!快用DSPy拯救你宝贵的prompt思维,偷偷甩掉99%的人
ICLR2024重磅 | DSPy或将手写Prompt推进历史,悄悄学会DSPy,一线技术圈很缺你这类人才 |