大语言模型在天猫AI导购助理项目的实践!

news2024/9/22 13:22:46

本文主要介绍了Prompt设计、大语言模型SFT和LLM在手机天猫AI导购助理项目应用。

ChatGPT基本原理

“会说话的AI”,“智能体”

图片

简单概括成以下几个步骤:

  1. 预处理文本:ChatGPT的输入文本需要进行预处理。

  2. 输入编码:ChatGPT将经过预处理的文本输入到神经网络中进行编码处理,使用的是多层transformer编码器结构。

  3. 预测输出:ChatGPT通过对输入进行逐个token预测,输出下一个最可能出现的token序列,使用的是softmax函数进行概率预测。

  4. 输出解码:ChatGPT将预测的token序列作为输入,经过多层transformer解码器结构进行解码处理,最终输出模型的回答。

  5. 重复步骤3和4:ChatGPT在处理输入时会持续输出预测的token序列,直到遇到停止符号或达到最大输出长度为止。

算法内核——Transformer

由 Encoder 和 Decoder 两个部分组成

图片

技术交流群

建了技术交流群!想要进交流群的同学,可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

方式①、添加微信号:mlc2060,备注:技术交流
方式②、微信搜索公众号:机器学习社区,后台回复:技术交流

在这里插入图片描述

Prompt设计

什么是prompt?

图片

看来跟我今天想分享的不太一样,加个具体的限定条件,然后呢?

图片

这下对了!

Prompt的不同能直接决定模型是否能按我们的预期输出

图片

prompt基本技巧

1.清晰,明确,避免模糊的词语

bad casegood case
产品描述不应该太短,用一些句子就行,也不用特别多用3到5个短语描述这个产品

给手机天猫写首诗

图片

给手机天猫写一首四句的古文诗,模仿李白的《早发白帝城》

图片

2.用###或者"""或者<>或者’''将指令和待处理的内容分开

bad casegood case
将下面内容总结为一句话。你应该提供尽可能清晰和具体的指令来表达你想让模型做什么。这将引导模型朝着期望的输出方向发展,并减少收到无关或不正确响应的可能性。不要混淆写一个清晰的提示和写一个简短的提示。在许多情况下,更长的提示提供更多的清晰度和上下文,这可以导致更详细和相关的输出。

将下面用三个引号括起来的内容总结为一句话:

需要总结的文本是:

'''

你应该提供尽可能清晰和具体的指令来表达你想让模型做什么。这将引导模型朝着期望的输出方向发展,并减少收到无关或不正确响应的可能性。不要混淆写一个清晰的提示和写一个简短的提示。在许多情况下,更长的提示提供更多的清晰度和上下文,这可以导致更详细和相关的输出。

'''

3.指定输出格式

bad casegood case

生成三个虚构书名,包括它们的作者和类型。

图片

生成三个虚构书名,包括它们的作者和类型。以JSON列表的格式提供,包括以下键:book_id、title、author、genre

图片

4.角色扮演,用扮演、担任等这一类词汇告诉大模型在对话中特定的人格或角色

bad casegood case

给我推销一款男士洗面奶

图片

system:我想让你扮演一个专业的导购员。你可以充分利用你的电商知识、导购话术,生动活泼的帮顾客介绍推销商品。

user:给我推销一款男士洗面奶

图片

图片

Few shot进阶

启用上下文in-context learning学习,在prompt中提供几个样例(这里只有一个例子one-shot)

图片

Chain of Thought(Cot)

思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理。

one-shotCot

model input:

Q:小明有5个球,他又买了2筐,每一筐有3个球。那么他现在总共有几个球?

A:答案是11

Q:小花有23个苹果,他们午餐用去了20个,又买了6个。那么现在还有多少个苹果?

model output:

图片

model input:

Q:小明有5个球,他又买了2筐,每一筐有3个球。那么他现在总共有几个球?

A:小明开始有5个球,又买了2筐球,每筐3个共6个球,合计11个球,答案是11

Q:小花有23个苹果,他们午餐用去了20个,又买了6个。那么现在还有多少个苹果?

model output:

图片

上面的例子很好的激发了大模型的潜能,是否有prompt技巧无能为力的问题?

答案是肯定的,一些偏实时,模型训练过程中缺乏的语料知识,它也无能为力。

Search API & GPT

图片

"""
网页搜索结果:
{web_results}

当前日期:{current_date}

指令: 用给定的网络搜索结果,总结回复用户query

用户Query: {query}

回复语言: {reply_language}
"""

私有化知识库(嵌入式向量检索+LLM)

图片

ReAct框架

大模型Agent功能,大模型会自己分析问题,选择合适的工具,最终解决问题。

ReAct方式的作用就是协调LLM模型和外部的信息获取,与其他功能交互。如果说LLM模型是大脑,那ReAct框架就是这个大脑的手脚和五官。

关键概念描述
Thought由LLM模型生成,是LLM产生行为和依据
ActAct是指LLM判断本次需要执行的具体行为
ObsLLM框架对于外界输入的获取。
尽可能回答以下问题,可以使用工具:
{工具名和描述}
使用以下格式回答:
问题:你必须回答的问题

思考:你应该一致保持思考,思考要怎么解决问题
动作:{工具名}。每次动作只选择一个工具,工具列表{工具名和描述}
输入:{调用工具时需要传入的参数}
观察:{第三方工具返回的结果}

【思考-动作-输入-观察】循环N次

思考:最后,输出最终结果
最终结果:针对原始问题,输出最终结果
开始!
问题:上海最高楼是多少?它楼层高度的平方是多少?
思考:我需要知道上海最高楼,然后进行计算。
动作:搜索API
观察:632米
思考:我需要计算上海最高楼高度的平方,然后得到结果。
动作:计算器
输入:632^2
观察:399424
思考:
最终结果:上海最高楼632米,它的高度平方是399424

大模型SFT(supervised fine tuning)

预训练 VS 微调

预训练:模型以一种无监督的方式去训练,学习根据前文生成下一个单词。在海量数据下进行,让大模型具备语言理解和生成能力。

指令微调:有监督的方式进行学习,包括任务描述,输入等,去预测答案。目标是如何跟人类指令对齐,让模型更加适应专业化领域场景

图片

业务数据从哪来?

  1. 人工标注

  2. 种子数据 + self-instruct(gpt 3.5构造)

图片

P-tuning

动机:Fine-tuning需要微调整个预训练语言模型,且额外添加了新的参数,而Prompting则可以将整个预训练语言模型的参数保持固定,而只需要添加prompt来预测结果即可;

图片

P-tuning:将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。

P-tuning V2:每一层都加入可训练的prompts,只对Prompt部分的参数进行训练,而语言模型的参数固定不变。

LoRA

Low-rank Adaption of LLM,利用低秩适配(low-rank adaptation)的方法,可以在使用大模型适配下游任务时只需要训练少量的参数即可达到一个很好的效果。在计算资源受限的情况下的弥补方案。

图片

图片

对于不同的下游任务,只需要在预训练模型基础上重新训练AB就可以了,这样也能加快大模型的训练节奏。

LoRA VS 全参数微调

lora的优点在于轻量化,低资源。但缺点很明显,参与训练的模型参数量不多,在百万到千万级别的参数量,实验来看效果比全量微调差一些。

C-Eval评估

C-Eval由上海交通大学,清华大学,爱丁堡大学共同完成,是构造了一个覆盖人文,社科,理工,其他专业四个大方向,52 个学科(微积分,线代 …),从中学到大学研究生以及职业考试,一共 13948 道题目的中文知识和推理型测试集。

图片

C-Eval认为:一个模型要强,首先需要广泛的知识,然后在知识的基础上做推理,这样才能代表一个模型可以做复杂且困难的事情。

此外,还有一些公开评测集,用于评估模型在学科综合、语言能力、推理能力等。

图片

手机天猫AI导购助理项目落地应用

项目背景

“AI形象”璇玑作为个人专属导购员,在交互式对话中进行用户理解、导购商品。

定位:交互式搜索导购产品

图片

算法框架

图片

语料收集

  1. 电商种子问题收集:端内会话日志、小红书sug收集电商领域种子问题:

  2. 问题泛化:明确场景问题定义,通过手猫核心query、种子问题等,设计prompt,通过gpt补充收集问题;

  3. 人工标注: 标注高质量语料;

  4. self-instruction:通过prompt(few-shot)方法根据已有人工标注扩充新的instruction。通过gpt获取更多训练语料,解决标注人效瓶颈。

模型训练

base模型选型

中文评测

图片

数学评测

图片

训练平台:AOP/星云/PAI

基于达摩院模型基座qwen-14B,针对璇玑产品,新增电商领域的训练数据,增强模型的电商领域知识、安全、导购等能力。

params="--stage sft \
--model_name_or_path /data/oss_bucket_0/Qwen_14B_Chat_ms_v100/  \
--do_train \
--dataset_dir data \
--dataset xuanji \
--template chatml  \
--finetuning_type  full  \
--output_dir file_path  \
--overwrite_cache \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine  \
--logging_steps 5 \
--save_strategy epoch \
--save_steps 10000 \
--learning_rate 2e-6 \
--num_train_epochs 3.0 \
--warmup_ratio 0.15 \
--warmup_steps 0 \
--weight_decay 0.1 \
--fp16 ${fp16} \
--bf16 ${bf16} \
--deepspeed ds_config.json \
--max_source_length 4096 \
--max_target_length 4096 \
--use_fast_tokenizer False \
--is_shuffle True \
--val_size 0.0 \
"
pai -name pytorch112z
-project algo_platform_dev
-Dscript='${job_path}'
  -DentryFile='-m torch.distributed.launch --nnodes=${workerCount} --nproc_per_node=${node}  ${entry_file}'
-DuserDefinedParameters=\"${params}\"
-DworkerCount=${workerCount}
-Dcluster=${resource_param_config}
-Dbuckets=${oss_info}${end_point}

训练中间过程

图片

模型部署&调用

  • 达摩院千问

模型基于allspark做量化加速,部署在dashscope平台,机器为双卡A10。

# For prerequisites running the following sample

import dashscope
from dashscope import Generation
from http import HTTPStatus

dashscope.api_key = 'your-dashscope-api-key'

response_generator = Generation.call(
    model='model_name',
    prompt=build_prompt([
        {'role':'system','content':'content_info'},
        {'role':'user', 'content':'query'}
    ]),
    stream=True,
    use_raw_prompt=True,
    seed=random_num
)

for resp in response_generator:
    # when stream, you need to get the result through iteration
    if resp.status_code == HTTPStatus.OK:
        print(resp.output)
    else:
        print('Failed request_id: %s, status_code: %s, \
                  code: %s, message:%s' %
              (resp.request_id, resp.status_code, resp.code, resp.message))

# Result: 
# {"text": "汝亦来", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可唤我一声「百晓生", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可唤我一声「百晓生」,不知可否?", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可唤我一声「百晓生」,不知可否?", "finish_reason": "stop"}
  • Whale私有化

部署发布:

图片

模型管理:

图片

from whale import TextGeneration
import json

# 设置apiKey
# 预发或线上请勿指定base_url
TextGeneration.set_api_key("api_key", base_url="api_url")

# 设置模型生成结果过程中的参数

config = {"pad_token_id": 0,  "bos_token_id": 1,  "eos_token_id": 2,  "user_token_id": 0,  "assistant_token_id": 0,  "max_new_tokens": 2048,  "temperature": 0.95,  "top_k": 5,  "top_p": 0.7,  "repetition_penalty": 1.1,  "do_sample": False,  "transformers_version": "4.29.2"}
prompt = [
    {
      "role": "user",
      "content": "content_info"
    }
]

# 请求模型
response = TextGeneration.call(
    model="model_name",
    prompt=json.dumps(prompt),
    timeout=120,
    streaming=True,
    generate_config=config)


# 处理流式结果
for event in response:
    if event.status_code == 200:
        print(event.finished)
        if event.finished is False:
            print(event.output['response'], end="")
    else:
        print('error_code: [%d], error_message: [%s]'
              % (event.status_code, event.status_message))
  • EAS

借助EAS,将代码和模型文件分离进行LLM服务部署,基于http协议提供流式输出。模型存储在oss上。

模型评测

基础能力评测:在公开评测集上评估模型中英文、推理、知识问答能力表现。

业务评测:以业务人工评测为主,每个大模型任务150个评测问题。

体验问题:埋点日志获取,定期review。

参考链接

1.https://www.semanticscholar.org/paper/Attention-is-All-you-Need-Vaswani-Shazeer/204e3073870fae3d05bcbc2f6a8e263d9b72e776

2.https://huggingface.co/Qwen/Qwen-14B-Chat

3.https://github.com/yuanzhoulvpi2017/zero_nlp

4.https://github.com/THUDM/ChatGLM-6B/tree/main/ptuning

5.https://www.bilibili.com/video/BV1jP411d7or/?spm_id_from=333.337.search-card.all.click

6.https://arxiv.org/pdf/2305.08322v1.pdf

7.https://zhuanlan.zhihu.com/p/630111535?utm_id=0

8.https://cdn.baichuan-ai.com/paper/Baichuan2-technical-report.pdf

9.https://github.com/tatsu-lab/stanford_alpaca

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1135037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu22.04(非虚拟机)安装教程(2023最新最详细)

目录 简介 一.下载Ubuntu Server镜像&#xff0c;官方地址下载即可 ​二.安装Ubuntu镜像 简介 Linux是一种自由和开放源代码的操作系统内核&#xff0c;被广泛应用于各种计算机系统中。它以稳定性、安全性和灵活性而闻名&#xff0c;并成为服务器、嵌入式设备和个人计算机等…

国产手机性能再次飞升,H公司落后三代,但仍然比不过苹果

国产手机将采用全新的芯片&#xff0c;性能将进一步提升&#xff0c;这是国产手机的又一个重大进步&#xff0c;这次不再挤牙膏&#xff0c;真正为消费者带来性能跃升的手机&#xff0c;让消费者刷视频更流畅&#xff0c;玩游戏也更畅快。 据了解国产手机即将采用的新款芯片骁龙…

EMT4J—— Java 版本迁移检测工具

最近因为工作需要研究了emt4j&#xff0c;这里写一篇文章记录一下。 非专业Java er&#xff0c;有不同意见欢迎评论区分享。 目录 EMT4J是什么&#xff1f; 如何使用&#xff1f; Command-line Java Agent 简单的源码分析 目录分析 规则解析 参考资料 EMT4J是什么&am…

nginx只允许英文名的文件下载,中文名就是找不到文件

本文主要向大家介绍了Linux运维知识之linux下nginx不支持中文URL路径的解决方案&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习Linux运维知识有所帮助。 1、确定你的系统是UTF编码 [rootlocalhost ~]# echo $LAGN en_US.UTF-8 2、nginx配置文件里默认编码…

python爬虫之正则表达式实战----爬取图片

文章目录 1. 图片爬取流程分析2. 爬取家常菜图片 1. 图片爬取流程分析 先获取网址&#xff0c;URL&#xff1a;https://www.xiachufang.com/category/40076/ 定位想要爬取的内容使用正则表达式爬取导入模块指定URLUA伪装&#xff08;模拟浏览器&#xff09;发起请求&#xff0…

【springcloud-config】配置中心客户端导入依赖spring-cloud-config-server后,maven一直爆红问题解决

问题描述 配置中心客户端导入了 spring-cloud-config-server 后&#xff0c;导入依赖爆红&#xff1b; 解决办法&#xff1a; 参考官网中文文档&#xff1a;spring-cloud -config 配置中心 中文文档 补充导入 spring-config-starter-config 配置即可 <!--springcloud-c…

Transformer英语-法语机器翻译实例

依照Transformer结构来实例化编码器&#xff0d;解码器模型。在这里&#xff0c;指定Transformer编码器和解码器都是2层&#xff0c;都使用4头注意力。为了进行序列到序列的学习&#xff0c;我们在英语-法语机器翻译数据集上训练Transformer模型&#xff0c;如图11.2所示。 da…

【设计模式】第5节:创建型模式之“简单工厂、工厂方法和抽象工厂模式”

一、简单工厂模式 ProductFactory是创建商品的工厂&#xff0c;商品Product可以实现Product接口中的一些功能。 当需要根据入参的不同生成多种不同的产品时&#xff0c;可以将生成不同产品的逻辑剥离出来&#xff0c;使用产品工厂创建不同的产品。 二、工厂方法 ConcreteFact…

知识点滴 - Email地址不区分大小写

电子邮件地址本身对字符大小写不敏感。这意味着实际的电子邮件地址&#xff0c;如 "exampleemail.com"&#xff0c;并不区分字母的大小写。无论你输入的是大写字母还是小写字母&#xff0c;它仍然会到达同一个电子邮件账户。例如&#xff0c;如果您的电子邮件地址是 …

信创生态丨九州未来与超聚变完成兼容性互认证

近日&#xff0c;九州未来与超聚变积极开展了兼容性适配工作&#xff0c;并完成产品兼容性互认证。双方兼容性测试基于Intel64、鲲鹏架构完成&#xff0c;测试结果显示&#xff1a;九州未来Animbus IaaS V8可基于超聚变FusionOS 23服务器操作系统安全稳定运行&#xff0c;产品相…

并发编程-线程池ForkJoinPool工作原理分析

由一道算法题引发的思考 算法题&#xff1a; 如何充分利用多核CPU的性能&#xff0c;快速 对一个2千万大小的数组进行排序&#xff1f; 分解 求解 合并 这道算法题可以拆解来看&#xff1a; 1&#xff09;首先这是一道排序的算法题&#xff0c;而且是需要使用高效的排序算法…

[量化投资-学习笔记003]Python+TDengine从零开始搭建量化分析平台-Grafana画K线图

在前面两个笔记&#xff1a; PythonTDengine从零开始搭建量化分析平台-数据存储 PythonTDengine从零开始搭建量化分析平台-MA均线的多种实现方式 中有提到使用 Grafana 画图&#xff0c;不过画的都是均线。除了均线&#xff0c;Grafana 非常人性的提供离 K线图模块。 配置简单…

深度学习 anaconda 安装问题

配置anaconda 在官网下载匹配版本的anaconda&#xff08;官网下载可能时间比较长&#xff09;&#xff0c;可以选择清华镜像。 安装过程默认即可&#xff0c;或者根据情况进行修改。 旧版本是可以在安装的时候勾选添加路径到环境变量中的&#xff0c;但是我安装的是2023.9月…

代码随想录算法训练营第三十三天丨 贪心算法part04

860.柠檬水找零 思路 这道题目刚一看&#xff0c;可能会有点懵&#xff0c;这要怎么找零才能保证完成全部账单的找零呢&#xff1f; 但仔细一琢磨就会发现&#xff0c;可供我们做判断的空间非常少&#xff01; 只需要维护三种金额的数量&#xff0c;5&#xff0c;10和20。 …

计算机中了mallox勒索病毒怎么办,勒索病毒解密,数据恢复

最近一段时间&#xff0c;云天数据恢复中心陆续收到很多企业的求助&#xff0c;企业的计算机服务器遭到了mallox勒索病毒攻击&#xff0c;导致企业的数据库无法正常使用&#xff0c;严重影响了企业的正常生产生活&#xff0c;为此&#xff0c;云天数据恢复中心的工程师通过对此…

【深度学习】使用Pytorch实现的用于时间序列预测的各种深度学习模型类

深度学习模型类 简介按滑动时间窗口切割数据集模型类CNNGRULSTMMLPRNNTCNTransformer 简介 本文所定义模型类的输入数据的形状shape统一为 [batch_size, time_step&#xff0c;n_features]&#xff0c;batch_size为批次大小&#xff0c;time_step为时间步长&#xff0c;n_feat…

Promise及相关知识细学

学习关键语句: Promise promise学习 promise.all promise.race promise.resolve 1. 写在前面 promise 是前端绕不开的东西 , 所以我们一定要好好学习 , 写这篇文章的目的是加深对 promise 的学习和使用程度 2. 开始 2.1 准备 首先创建一个文件夹 , 里面新建一个 index.htm…

Navicat 16 支持 Redis Cluster 集群模式 | 新功能 √

Redis Cluster 适用于需要处理大量数据和高并发访问&#xff0c;并且需要保证高可用性和可扩展性的场景。它在国内许多行业中都得到了广泛的应用。为了满足广大专业用户的需求&#xff0c;Navicat 16 再次升级&#xff0c;新增 Redis Cluster 功能&#xff0c;为Redis 用户带来…

FreeRTOS 计数型信号量 详解

目录 什么是计数型信号量&#xff1f; 计数型信号量相关 API 函数 1. 创建计数型信号量 2. 释放二值信号量 3. 获取二值信号量 计数型信号量实操 什么是计数型信号量&#xff1f; 计数型信号量相当于队列长度大于1 的队列&#xff0c;因此计数型信号量能够容纳多个资源&a…

探索JavaScript ES6+新特性

JavaScript是一门十分流行的编程语言&#xff0c;它不断发展演变以适应现代Web开发需求。ES6&#xff08;也称为ECMAScript 2015&#xff09;是JavaScript的第六个版本&#xff0c;引入了许多令人兴奋的新特性和语法糖。本文将介绍一些ES6中最有趣和实用的特性。 箭头函数 箭…