V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shubiao
V2EX  ›  问与答

怎么把大模型微调成文本分类模型?

  •  
  •   shubiao · 316 天前 · 2423 次点击
    这是一个创建于 316 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我司以前是在用 NLP 的文本分类能力, 给用户内容打标签, 然后根据标签给用户做个性化推荐, 最近准备切到大模型上, 但微调效果不尽人意, 请懂的朋友给指点下.

    通过 chatgpt 获取 5k 条数据

    给 chatgpt 的 prompt

    你是数据分析师, 帮我从标签集中选择一个最适合文字内容的标签
    文字内容: 1234
    标签集: A, B, C
    

    整理成微调所需数据, 开始微调

    使用的chatglm-6b, 把给 gpt 的 prompt 和输出结果给他

    {
            "instruction": "你是数据分析师, 帮我从标签集中选择一个最适合文字内容的标签, 文字内容: 1234, 标签集: A, B, C",
            "input": "",
            "output": "购物"
       }
    

    把微调后的模型运行起来, 进行 api 访问

    即把原来调 gpt 的接口改成微调后模型的, 同样的 prompt 调用

    但发现回答的狗屁不是

    请问哪里做的不对?

    • 目前想到的是 xx-6b 能力太差, 和 gpt 千亿级的参数不可同日而语, 但我们也不要那么强的能力, 只需要根据文本内容进行分类即可
    • qwen 也开源了 14b 的模型, 但我司的成本也就控制到了 4090 上, 所以加钱这个方案就继续用 NLP 就好了
    第 1 条附言  ·  316 天前
    文字来自于客户图片上 ocr 后得出来的
    chatglm-6b, LoRa 的微调方式
    数量少可以再加量
    20 条回复    2024-01-16 22:02:08 +08:00
    Morriaty
        1
    Morriaty  
       316 天前
    你是做的 few shot instruct 还是 prompt tuning ? 如果是 few shot , 这种方式效果不稳定。简单来说,few shot 不更新模型参数,prompt tuning 会更新模型参数。可以看看 peft 库
    vToExer
        2
    vToExer  
       316 天前
    一般情况下专用小模型的效果会强于通用大模型,如 gpt 在测试集上的准确率低于原分类模型,那么 chatglm 准确率只会更差。采用 LoRA/Adapter 微调可能有提升,前提是数据分布比较均匀,且在验证集上 loss 收敛
    sywsy
        3
    sywsy  
       316 天前
    如果是常识性的分类估计不需要微调,细分领域的话看你的微调方式,lora 微调怎么也需要几万条数据,少的话可能反而会有反作用,但话说回来如果有几万条数据随便调个 bert 模型效果应该百分百比大模型效果好
    ospider
        4
    ospider  
       316 天前
    老老实实用 Bert 吧
    paopjian
        5
    paopjian  
       316 天前
    感觉没必要盲目追求大模型, bert 那些小模型训练后效果应该也不错, 真要用大模型的 haul 先用 chatgpt 试水,再用开源模型训练一下? 我看 https://github.com/WangRongsheng/Aurora 他们号称 lora 微调后的模型可以打 chatgpt3.5, 学一下他们的思想?
    gaobh
        6
    gaobh  
       316 天前 via iPhone
    你这 prompt 太简单了。按这个格式来试试: 你是一个 <角色>,你关注 <主题>,你要需要回答:<问题>

    <上下文>

    你是一个 <角色>,你关注 <主题>
    你需要按照以下方式返回:
    <输出规则>

    问题:<问题>

    现在我要<主题>,请参照以下 Prompt 制作,注意都用<语言>生成:

    ## 角色
    你是一个<角色>。请你帮我<主题>

    ## 规则:

    <输出规则>

    ## 策略:

    <策略步骤逻辑>

    ## 格式
    返回格式如下,"{xxx}"表示占位符:
    <我是格式>
    ```

    现在请按照上面的要求<主题>:
    ```
    shubiao
        7
    shubiao  
    OP
       316 天前
    @gaobh 我的 prompt 也很长, 上面只是个意思, 其实我想问下这个思路对吗 ? 给 gpt 的 prompt 在微调时直接塞给 chatglm, 调微调后的模型也是同样的 prompt, 只更改其中的"文字"部分
    shubiao
        8
    shubiao  
    OP
       316 天前
    @sywsy 就是常识性的东西, 用户来自各行各业, 我们只是想分辨出来来自那个行业(还有二级分类, 加起来 200+)

    直接用效果不怎么好(好像都理解不了太长的 prompt), 才想着微调一个
    gaobh
        9
    gaobh  
       316 天前 via iPhone
    @shubiao #7 只能用 openai gpt4 ,其他大模型都不行
    thorneLiu
        10
    thorneLiu  
       316 天前 via Android
    用 bert
    june4
        11
    june4  
       316 天前
    在 prompt 给出几个例子可以更有效控制回答输出
    me221
        12
    me221  
       316 天前
    这场景没必要用大模型啊,专用模型性能更强
    sywsy
        13
    sywsy  
       316 天前
    @shubiao 有二级分类估计效果会比较差,除非你有几万条分布均匀的数据进行微调,另外不知道你是不是 chatglm3 ,对比 chatglm 应该是能强一些的,还可以试试 qwen-7b ,但是感觉怎么都是必然不如 bert 的,这还是单准确率一项,综合考虑性能、成本等等 bert 应该能完爆 llm
    siriussilen
        14
    siriussilen  
       316 天前
    @Morriaty 都已经做微调了,还能是 few shot instruct ?
    siriussilen
        15
    siriussilen  
       316 天前
    1. 你的这批数据及 prompt ,gpt4 能做到多少分? gpt4 能否完成你的任务?
    2. 5000 条业务数据太多了,模型很容易丧失通用能力,俗称变傻了,混一点通用样本,有奇效
    3. 因为你的任务是一个判别式的任务,最后一层输出 token 的 softmax 可以拿掉,或者加一个约束惩罚,看看你的常用类别比如“购物”tokenlizer 之后是不是唯一一个,如果是的话,可以只让模型输出第一个首 token 的概率,把任务转化成判别式的任务,也能涨点
    shubiao
        16
    shubiao  
    OP
       316 天前
    @siriussilen #15
    1. 这 5k 条就是通过 gpt4 得到的. 正确率 90%.
    再详细一下: 就是同一 prompt 仅替换"文字部分", 进行了 5k 次调用, 让 gpt4 返回的结果, 来作为我们微调的原始数据

    2. 上面有朋友说要几万条才可以, 我们是 5k 条样例给到了 chatglm, 所以你们说的几千和几万不是一个意思嘛...
    通用样本是什么意思, 发这条帖子我其实就是在问准备什么样的微调数据, 以及调用时需要做什么修改?

    3. 超出能力圈了, 还在学习中
    siriussilen
        17
    siriussilen  
       316 天前
    @shubiao Lora 我没做过我不了解,我是做全参数微调,几百条就够了,别轻视大模型的拟合能力,另外几百条数据这个点,也可以参考一下 OpenAI 的文档,主要是一些边界 Case 的处理很关键
    siriussilen
        18
    siriussilen  
       316 天前
    另 gpt3.5 论文细节是是一个 20B 的通用模型,所以用领域数据精调后打败了 3.5 没什么感到牛逼的 - -
    reeco
        19
    reeco  
       316 天前
    分类为什么要用大模型
    yufeng0681
        20
    yufeng0681  
       316 天前
    有了答案,告知一下啊。
    我现在对 NLP 的想法是 ,花钱让 chatgpt 来做 NLP 的事。 省掉专用的 NLP 研发(比如从 3 个研发变成 1 个研发)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:43 · PVG 07:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.