AI知识库

53AI知识库

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


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


之前介绍过一篇关于内隐语境研究的文章,内隐语境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,一线技术圈很缺你这类人才


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

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

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

联系我们

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

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询