微信扫码
与创始人交个朋友
我要投稿
之前介绍过一篇关于内隐语境研究的文章,内隐语境Prompt,让LLM更懂你的弦外音,用DSPy实现。今天给大家介绍一下用DSPy实现日常工作中的意图识别。意图识别是自然语言处理(NLP)中的一个重要任务,广泛应用于客服、智能助手等领域。通过识别用户的意图,系统可以更好地理解用户需求并提供相应的服务。本文将介绍如何使用DSPy框架和deepseek的API来构建一个意图识别模型,并展示该模型在实际应用中的效果。
图片由xiumaodalle生成
首先在代码之前,我们应该简单了解一下内隐语境,内隐语境在中国有着非常深邃的含义,有时无需直言也能传递一定的意图。LLM的内隐语境学习其实是一个难点,用Prompt很难批量准确运行。而意图识别的用途又非常实际和广泛,恰好DSPy能够解决这个难题,不用写一句prompt,靠代码来实现意图识别。
数据集准备
首先,我们需要准备一个意图识别的数据集。以下是一个包含六类意图的示例数据集:
train_data = {
'支付问题': [
"为什么我的支付失败了?",
"怎么绑定我的银行卡进行支付?",
],
'商品咨询': [
"这款商品有货吗?",
"请问这款手机有什么功能?",
],
'促销活动': [
"现在有什么促销活动吗?",
"我怎么参加你们的优惠活动?",
],
'发票问题': [
"我怎么申请电子发票?",
"发票什么时候可以开出来?",
],
'账户安全': [
"我的账户被盗了怎么办?",
"如何开启账户的双重验证?",
],
'售后服务': [
"你们提供售后服务吗?",
"保修期内维修是免费的吗?",
],
}
定义意图识别数据集
我们创建一个类IntentDataset来处理数据集,并生成用于模型训练的示例。
class IntentDataset:
def __init__(self, data):
self.data = data
self.intent_labels = list(data.keys())
def gen_demonstration(self, shot_num):
demonstrations = []
for intent in self.intent_labels:
examples = random.sample(self.data[intent], shot_num)
demonstrations.append(self._format_demonstration(intent, examples))
return '\n'.join(demonstrations)
接下来,我们定义意图分类器的输入输出接口,并创建一个分类模型。
class IntentClassifier(dspy.Signature):
"""定义意图分类器的输入输出接口"""
query = dspy.InputField(default="", desc="用户询问")
intent = dspy.OutputField(default="", desc="预测的意图标签")
class Model(dspy.Module):
"""定义意图分类模型"""
def __init__(self, demonstrations):
super().__init__()
self.demonstrations = demonstrations
def forward(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()
return dspy.Example(input={'query': query}, output=intent)
我们使用DSPy的BootstrapFewShot进行微调,并定义验证逻辑来评估模型性能。
# 初始化意图分类模型
model = Model(demonstrations)
# 微调意图分类模型
from dspy.teleprompt import BootstrapFewShot
# 定义验证逻辑
def validate_intent(example, pred, trace=None):
return pred.output == example.output
最后,我们测试模型对新询问的意图识别能力,并打印预测结果。
# 测试新询问的意图识别
test_query = "我上周买的电脑坏了,可以换一台新的吗?"
# 获取预测
pred = compiled_model(query=test_query)
# 打印结果
print(f"测试询问: {test_query}")
print(f"预测意图: {pred.output}")
告别手写Prompt怕DSPy学不会?10行代码捏一个Agent,用DSPy Optimizers帮你优化Prompt
重磅 | DSPy让你不写一句Prompt照样构建Agent,从此,你不再卑躬屈膝讨好LLM
别再写脆弱的prompt讨好LLM啦!快用DSPy拯救你宝贵的prompt思维,偷偷甩掉99%的人
ICLR2024重磅 | DSPy或将手写Prompt推进历史,悄悄学会DSPy,一线技术圈很缺你这类人才
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-08-13
2024-04-26
2024-08-21
2024-07-09
2024-06-13
2024-08-04
2024-04-11
2024-07-18
2024-07-01