大模型意图识别项目
项目介绍
这个项目主要是想做一个对电商场景的多模态意图识别,因为用户有时候会发送文字或者文字加图片,我们希望能用大模型识别用户的意图比如退货,物流查询,及时给用户反馈。
我们首先做的数据合成和数据构建,用self-instruct技术生成多样性的样本,然后构建高质量的数据清洗pipeline对数据进行清洗,最后构建出高质量的"insruction-input-output"数据集。
我们先进行了sft。因为数据集中有纯文字的也有文字和图片结合,我们采用任务与模态解耦的策略,使用lora微调了Qwen2.5-1.5B专门处理文字意图,对于带图片的我们使用Qwen2.5-VL模型。因为大部分数据集都是纯文字的,这样做可以加快线上推理的速度,也可以充分发挥模型优势。
在sft之后我们发现模型的泛化能力不太好,所以加入了grpo强化学习,在这里我们设计了准确率驱动的奖励函数。数据集有个问题是数据呈现长尾分布,所以我们做了类别加权激励,加大对低频意图的激励。另外对于电商业务场景来说,有些关键意图容错率比较低,所以我们要加大对关键意图的错误惩罚。 最后整体在zero-shot场景下准确率提升了14%,相比sft提升了9%
自我介绍
面试官好,我叫武贝宁,现在就读于新加坡国立大学的计算机硕士项目。 我想从三个角度简单介绍自己: 第一,兴趣方面。 我对人工智能方向非常有热情,尤其喜欢理解模型背后的机制,并将技术应用到真实场景中。在学习过程中我常常会主动探索前沿技术,比如 Transformer 的结构优化、多模态模型的增强方法等,这些内容我都特别愿意投入时间钻研。 第二,个人特质方面。 我做事认真细致,同时保持强烈的学习动力。在学习和项目中,我习惯将复杂问题拆解清楚,找到最有效的解决方式。如果遇到不熟悉的内容,我会主动查资料、做实验,直到真正理解为止。 第三,工作能力方面。 我具备扎实的计算机基础和编程能力,有实践经验,也能快速上手新技术。在项目中我负责过模型实现、性能优化等工作,能够独立推进任务,也擅长与团队沟通协作。我希望可以把自己的能力运用到实际业务中,为团队创造价值。
细节的问题
sft的准确率 0.81 +rl 0.92 ,没有做召回 sft的epoch=1: 防止rl自主探索空间太小,不进行sft直接上rl奖励函数曲线非常动荡
优化器:Adam,sgd
用什么框架训练强化学习: llama factory 奖励函数训练的形状,从数值从几到几 :0.7几-0.8几 比较陡荡 3h左右 学习率:$e^{-4}$ 基线的意图准确率多高,提升之后是多高? 0.7几 lora参数 alpha 64 & rank 32
数据去重需兼顾字符和语义层面,避免模型陷入机械重复的陷阱。同时指出数据集不能过于简单化,否则会导致模型在罕见场景下的表现欠佳。
微调方法
AutoDL租gpu 4090/显存24G/内存90G 2.08元/h ssh连接:vscode
sft数据构建
多样性指令样本:防止模型过拟合
数据怎么合成的?合成了多少条? 数据使用大模型辅助生成命令,1000条带标签的指令微调数据集,合成了6000条,清洗掉两千多条。最终用四千多条数据进行指令微调。
指令去重是怎么做的? 指令去重包括字符去重和语义去重。
- 字符去重:minihash
- minihash把文本拆分成词袋(N元组),用不同的哈希函数(k个)进行哈希。每个文档都变成长度为k的整数数组
- 使用局部敏感哈希(LSH)的方法分桶找相似值:定义条带(band)数,拆分每个文档,若两个文档在某条带上 MinHash 值相同,这两个文档就会被聚到同一个桶中备选。
- 候选对生成之后,由于 MinHash 只是一个近似,所以仍需计算两个文档的 N- 元组集合的交并比来算得准确的 Jaccard 相似性。
- N=5,阈值85%or90%
- 语义去重:BGE
- BGE把文本变成向量,计算他们的余弦相似度
- 聚类算法:kmeans
为什么用kmeans不用别的聚类算法?
复杂度评估怎么做的? 使用PPL困惑度计算复杂度,
如何定义高质量的SFT数据集? 几个指标 token长度 高质量数据集: 构建高质量数据集需综合考量多个指标,包括: 通过困惑度(Perplexity)过滤掉过于简单或复杂的句子。 通过语义去重(如使用BGE模型)避免重复文本。 从数据长度维度进行过滤,去除过短或过长的样本。
指令微调
为什么要采用任务与模态解耦
采用此策略的目的是为了应对并发量大的业务场景,提高服务响应速度。 在处理纯文本或不涉及图片的任务时,调用小型文本模型(如1.5B参数模型);而在处理包含图片的多模态任务时,则调用大型多模态模型(如7B参数模型),从而优化资源配置和降低延迟。 这里的并发能多少条并发呢?
强化学习
为什么要用强化学习?
- 谷歌论文:sft负责记忆,rl负责泛化
- sft本质是回忆训练数据中的模式,而不是真正理解任务。rl泛化能力很强,可以学会问题的底层逻辑,处理没有见过的情况。 grpo任务驱动的奖励函数是怎么做的? 为什么要用非对称的奖惩机制
奖励函数以任务的"准确率"为核心指标,对模型回答正确的样本给予正向奖励,错误的回答给予零或负向奖励。 进阶优化:
- 加权类别: 对低频出现的意图类别增加权重,以激励模型更好地理解和识别这些类别。
- 关键意图保护: 对于必须准确识别的意图(如"退货退款"),采用更严厉的惩罚机制,确保其不出错,这种方法被称为非对称奖惩。