AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


意图识别,用DSPy理解用户的“弦外音”
发布日期:2024-06-04 15:41:45 浏览次数: 1765


点击上方蓝字关注我


本文:2800字   阅读7分钟 

之前介绍过一篇关于内隐语境研究的文章,内隐语境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}")

本文示例从数据准备、意图分类定义到微调和测试,我完整地演示了整个过程。DSPy框架简化了模型开发的复杂性,使得意图识别任务更加高效和便捷。通过这个模型,系统能够更准确地理解用户需求,从而提供更好的服务体验。您如果先理解更多DSPy的文章可以关注本公众号。

告别手写Prompt怕DSPy学不会?10行代码捏一个Agent,用DSPy Optimizers帮你优化Prompt


重磅 | DSPy让你不写一句Prompt照样构建Agent,从此,你不再卑躬屈膝讨好LLM


别再写脆弱的prompt讨好LLM啦!快用DSPy拯救你宝贵的prompt思维,偷偷甩掉99%的人


ICLR2024重磅 | DSPy或将手写Prompt推进历史,悄悄学会DSPy,一线技术圈很缺你这类人才

本文完整代码未来我会放入群中,如您需要,群后请向我要。
仅赞赏一篇文章进群的名额只剩十几个,进群请抓紧!
另外,群里为你准备了开群以来近五十份资料,包括开群以来本公众号文章的Prompt模板、模块和一些DSPy的代码文件完整示例,还有部署一些应用的Dockerfile,等你来一起讨论!另外,如果你有更多关于论文里Prompt的问题也可以到群里来,我会耐心解答你的问题。

<本文完结>

转载请与本喵联系,私自抓取转载将被起诉
AI已成为我洞察世界并输出想法的工具

本地部署LLM成为你自己AI资源的掌控者

本地离线生成式AI文生文全要素提效指南,更安全更经济更高效


这份指南还包含8500条复杂Prompt,以及管理工具和方法(包含system提示词)

想把方法论转化为复杂提示词?Prompt心法与算法高级指南,帮你从知到行升维实践


关于Prompt,这本手册,是你和我沟通的桥梁

第一性原理下的Prompt,助你跃升为大师的指导手册


?让我们一起创造更多美好! ?


如果您觉得这篇文章对您有帮助或启发
感谢您为我【点赞】【在看】

<您为我点赞在看,只有我能看到>

?微信号:xiumaoprompt

加我微信之前,请务必先点赞或在看

这样我才能更快地识别并回应您







53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询