#LLM入门|Prompt#2.2_ AI 应用开发的范式_Language_Models,the_Chat_Format_and_Tokens

news2024/7/6 18:04:38

在本章中,我们将和您分享大型语言模型(LLM)的工作原理、训练方式以及分词器(tokenizer)等细节对 LLM 输出的影响。
我们还将介绍 LLM 的提问范式(chat format),这是一种指定系统消息(system message)和用户消息(user message)的方式,让您了解如何利用这种能力。

一、语言模型

大大语言模型(LLM)是通过预测下一个词的监督学习方式进行训练的。目标是预测下一个词的概率分布。
训练方式

  • 准备大规模文本数据集,并从中提取句子或句子片段作为模型输入。
  • 模型根据当前输入的上下文预测下一个词的概率分布。
  • 通过比较模型预测和实际下一个词,并不断更新模型参数以最小化两者之间的差异,使模型预测能力不断提高。

基础语言模型 vs. 指令调优语言模型

  • 基础语言模型(Base LLM)
    • 通过反复预测下一个词进行训练,没有明确的目标导向。
    • 在开放式的prompt下可能生成戏剧化的内容,给出与问题无关的回答。
  • 指令调优语言模型(Instruction Tuned LLM)
    • 进行了专门的训练,以更好地理解问题并给出符合指令的回答。
    • 在任务导向的对话应用中表现更好,生成遵循指令的语义准确的回复。

训练过程

  • 基础语言模型转变为指令调优语言模型的过程
    1. 在大规模文本数据集上进行无监督预训练,获得基础语言模型。
    2. 使用包含指令及对应回复示例的小数据集对基础模型进行有监督的fine-tune,使其逐步学会遵循指令生成输出。
    3. 通过人类对输出进行评级,使用强化学习技术进一步调整模型,增加生成高质量输出的概率。这通常使用基于人类反馈的强化学习(RLHF)技术来实现

相较于训练基础语言模型可能需要数月的时间,从基础语言模型到指令微调语言模型的转变过程可能只需要数天时间,使用较小规模的数据集和计算资源。
通过训练过程,可以将基础语言模型转变为指令调优语言模型,提高其在特定任务下的表现,并节约训练时间和资源。

二、Tokens

在描述LLM时,需要考虑到一项重要的技术细节,即LLM实际上不是重复预测下一个单词,而是重复预测下一个token。Token是指文本中的最小单位,可以是单词、词组或字符。

分词器(Tokenizer)的作用

  • LLM使用分词器将输入文本拆分为一系列token,而不是原始的单词。
  • 分词器可以将生僻词或复杂词组拆分为更小的token,从而降低字典规模,提高模型训练和推断的效率。

示例

  • 对于句子"Learning new things is fun!",每个单词被转换为一个token。
  • 对于较少使用的单词,如"Prompting as powerful developer tool",单词"prompting"会被拆分为三个token,即"prom"、“pt"和"ing”。

通过Token化技术,LLM能够更高效地处理各种类型的文本输入,并提高模型的训练和推断效率。

# 为了更好展示效果,这里就没有翻译成中文的 Prompt
# 注意这里的字母翻转出现了错误,吴恩达老师正是通过这个例子来解释 token 的计算方式
response = get_completion("Take the letters in lollipop \
and reverse them")
print(response)
The reversed letters of "lollipop" are "pillipol".

但是,“lollipop” 反过来应该是 “popillol”。
但分词方式也会对语言模型的理解能力产生影响。当您要求 ChatGPT 颠倒 “lollipop” 的字母时,由于分词器(tokenizer) 将 “lollipop” 分解为三个 token,即 “l”、“oll”、“ipop”,因此 ChatGPT 难以正确输出字母的顺序。这时可以通过在字母间添加分隔,让每个字母成为一个token,以帮助模型准确理解词中的字母顺序。

因此,语言模型以 token 而非原词为单位进行建模,这一关键细节对分词器的选择及处理会产生重大影响。开发者需要注意分词方式对语言理解的影响,以发挥语言模型最大潜力。
❗❗❗ 对于英文输入,一个 token 一般对应 4 个字符或者四分之三个单词;对于中文输入,一个 token 一般对应一个或半个词。不同模型有不同的 token 限制,需要注意的是,这里的 token 限制是输入的 Prompt 和输出的 completion 的 token 数之和,因此输入的 Prompt 越长,能输出的 completion 的上限就越低。 ChatGPT3.5-turbo 的 token 上限是 4096。
tokens.png

三、Helper function 辅助函数 (提问范式)

语言模型提供了专门的“提问格式”,可以更好地发挥其理解和回答问题的能力。本章将详细介绍这种格式的使用方法。
chat-format.png
这种提问格式区分了“系统消息”和“用户消息”两个部分。系统消息是我们向语言模型传达讯息的语句,用户消息则是模拟用户的问题。例如:

系统消息:你是一个能够回答各类问题的助手。

用户消息:太阳系有哪些行星?

通过这种提问格式,我们可以明确地角色扮演,让语言模型理解自己就是助手这个角色,需要回答问题。这可以减少无效输出,帮助其生成针对性强的回复。本章将通过OpenAI提供的辅助函数,来演示如何正确使用这种提问格式与语言模型交互。掌握这一技巧可以大幅提升我们与语言模型对话的效果,构建更好的问答系统。

import openai
def get_completion_from_messages(messages, 
                                 model="gpt-3.5-turbo", 
                                 temperature=0, 
                                 max_tokens=500):
    '''
    封装一个支持更多参数的自定义访问 OpenAI GPT3.5 的函数

    参数: 
    messages: 这是一个消息列表,每个消息都是一个字典,包含 role(角色)和 content(内容)。角色可以是'system'、'user' 或 'assistant’,内容是角色的消息。
    model: 调用的模型,默认为 gpt-3.5-turbo(ChatGPT),有内测资格的用户可以选择 gpt-4
    temperature: 这决定模型输出的随机程度,默认为0,表示输出将非常确定。增加温度会使输出更随机。
    max_tokens: 这决定模型输出的最大的 token 数。
    '''
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, # 这决定模型输出的随机程度
        max_tokens=max_tokens, # 这决定模型输出的最大的 token 数
    )
    return response.choices[0].message["content"]

在上面,我们封装一个支持更多参数的自定义访问 OpenAI GPT3.5 的函数 get_completion_from_messages 。在以后的章节中,我们将把这个函数封装在 tool 包中。

messages =  [  
{'role':'system', 
 'content':'你是一个助理, 并以 Seuss 苏斯博士的风格作出回答。'},    
{'role':'user', 
 'content':'就快乐的小鲸鱼为主题给我写一首短诗'},  
] 
response = get_completion_from_messages(messages, temperature=1)
print(response)
在大海的广漠深处,
有一只小鲸鱼欢乐自由;
它的身上披着光彩斑斓的袍,
跳跃飞舞在波涛的傍。

它不知烦恼,只知欢快起舞,
阳光下闪亮,活力无边疆;
它的微笑如同璀璨的星辰,
为大海增添一片美丽的光芒。

大海是它的天地,自由是它的伴,
快乐是它永恒的干草堆;
在浩瀚无垠的水中自由畅游,
小鲸鱼的欢乐让人心中温暖。

所以啊,让我们感受那欢乐的鲸鱼,
尽情舞动,让快乐自由流;
无论何时何地,都保持微笑,
像鲸鱼一样,活出自己的光芒。

在上面,我们使用了提问范式与语言模型进行对话:

系统消息:你是一个助理, 并以 Seuss 苏斯博士的风格作出回答。

用户消息:就快乐的小鲸鱼为主题给我写一首短诗

下面让我们再看一个例子:

# 长度控制
messages =  [  
{'role':'system',
 'content':'你的所有答复只能是一句话'},    
{'role':'user',
 'content':'写一个关于快乐的小鲸鱼的故事'},  
] 
response = get_completion_from_messages(messages, temperature =1)
print(response)Copy to clipboardErrorCopied

从小鲸鱼的快乐笑声中,我们学到了无论遇到什么困难,快乐始终是最好的解药。Copy to clipboardErrorCopied
将以上两个例子结合起来:

# 以上结合
messages =  [  
{'role':'system',
 'content':'你是一个助理, 并以 Seuss 苏斯博士的风格作出回答,只回答一句话'},    
{'role':'user',
 'content':'写一个关于快乐的小鲸鱼的故事'},
] 
response = get_completion_from_messages(messages, temperature =1)
print(response)Copy to clipboardErrorCopied
在海洋的深处住着一只小鲸鱼,它总是展开笑容在水中翱翔,快乐无边的时

Prompt 技术在 AI 应用开发中的革命性变革

在 AI 应用开发领域,Prompt 技术的出现带来了革命性的变革,但其重要性并未得到广泛认知。

传统机器学习工作流程的挑战
  • 传统监督机器学习需要大量标记数据,耗时耗力。
  • 选择、调整、评估模型需要数周甚至数月。
  • 模型部署及运行需要额外时间和资源,通常需要团队数月完成。
基于 Prompt 的机器学习方法的优势
  • 使用简单的 Prompt 即可构建应用,大大简化了流程。
  • 构建过程通常仅需数分钟到数小时,与传统方法相比节省大量时间。
  • 快速迭代、调用模型进行推理,极大提高了开发效率。
适用范围与局限性
  • 适用于非结构化数据应用,特别是文本和视觉应用。
  • 不适用于结构化数据应用,如处理大量数值的机器学习应用。
  • 虽然整个系统构建仍需时间,但使用 Prompt 技术可加速组件构建过程。

总结

Prompt 技术改变了 AI 应用开发的范式,使开发者能更快速、高效地构建和部署应用。然而,应认识到其局限性,以更好地推动 AI 应用的发展。
在下一章中,我们将展示如何利用 Prompt 技术评估客户服务助手的输入,作为构建在线零售商客户服务助手示例的一部分。

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

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

相关文章

大象如何转身-苹果放弃10年领域

1.苹果放弃造车 汽车作为普通家庭最贵的消费品之一,近些年很多手机厂商也纷纷下场造车,特别是去年华为、小米不约而同举行发布会。对于手机市场已经逐渐稳定了,这些手机大厂又开始瞄准汽车制造。加上之前燃油车厂商,汽车这个市场…

(二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布

前言 本节内容会介绍如何使用Docker Pipeline插件实现docker项目的pipeline流水线项目的可持续化集成发布,在开始本节内容之前,我们要先搭建好docker环境,以及镜像本地存储仓库docker harbor,关于docker和docker harbor的安装,可查看作者往期博客内容。 正文 ①安装Doc…

【uniapp】小程序自定义一个通用的返回按钮组件

左边箭头,右边文字可以自定义,但是不要太长,太长可以自己改 .back的width值,改宽一点。 用这个组件的时候首先要在pages.json里把导航栏变成自定义的: ,{"path" : "pages/test/test","style&…

力扣138.随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

刘志雄:新产品市场+新智造模式,构建“声音+”产业创新生态 | 演讲嘉宾公布

随着科技的飞速发展,新技术、新的应用场景不断涌现,也影响着“声音”产业未来的发展方向。如何应对市场变化,满足市场的多样化需求?如何应用新产品市场、智造新模式去构造“声音”产业创新生态呢?请到GAS2024一探究竟。…

阿里云突发:史上最大力度云服务器降价,优惠价格表来了

2024年阿里云百款产品直降,平均降幅20%,不只是云服务器,也包括云数据库,云数据库涉及产品RDS(MySQL、PostgreSQL、MariaDB)、Redis社区版、MongoDB、ClickHouse社区兼容版。阿里云百科aliyunbaike.com分享阿…

Python爬虫——Urllib库-1

这几天都在为了蓝桥杯做准备,一直在刷算法题,确实刷算法题的过程是及其的枯燥且枯燥的。于是我还是决定给自己找点成就感出来,那么Python的爬虫就这样开始学习了。 注:文章源于观看尚硅谷爬虫视频后笔记 目录 Urllib库 基本使…

【电路笔记】-RC网络-RC积分器

RC积分器 文章目录 RC积分器1、概述2、RC积分器3、电容电压4、单脉冲 RC 积分器5、RC积分器示例6、RC 积分器作为正弦波发生器7、总结RC 积分器是一个串联的 RC 网络,可产生与积分的数学过程相对应的输出信号。 1、概述 对于无源 RC 积分器电路,输入连接到电阻,而输出电压取…

项目风险管理的前提是对风险的认知

大家好,我是不会魔法的兔子, 一枚北京执业律师,创建[项目管理者的法小院儿],持续从法律的角度分享项目管理中的风险问题及预防,让项目管理者能够提早发现与解决项目执行过程中的风险,同时欢迎大家一起交流…

渗流监测站技术原理

【TH-SL1】渗流监测站的技术原理主要基于传感器技术和数据处理技术,用于实时监测和分析地下水或土壤中的渗流情况。渗流监测站通常包括多种传感器,如水位传感器、温度传感器、电导率传感器等,用于测量地下水或土壤中的水位、温度、电导率等参…

ICLR 2024|ReLU激活函数的反击,稀疏性仍然是提升LLM效率的利器

论文题目: ReLU Strikes Back: Exploiting Activation Sparsity in Large Language Models 论文链接: https://arxiv.org/abs/2310.04564 参数规模超过十亿(1B)的大型语言模型(LLM)已经彻底改变了现阶段人工…

精酿啤酒:创新原料的研发与市场前景

随着消费者口味和需求的不断变化,创新已成为啤酒行业持续发展的重要驱动力。Fendi Club啤酒在创新原料的研发方面走在行业前列,积极探索新型原料和风味组合,以满足市场对多样化、个性化产品的需求。 Fendi Club啤酒注重研发新型原料和添加剂。…

线程安全的队列

学习一下别人写的,线程安全的队列代码。https://github.com/markparticle/WebServer/blob/master/code/log/blockqueue.hhttps://github.com/markparticle/WebServer/blob/master/code/log/blockqueue.h /** Author : mark* Date : 2020-06-16* copy…

【嵌入式——QT】QListWidget

QListWidget类提供了一个基于项的列表小部件,QListWidgetItem是列表中的项,该篇文章中涉及到的功能有添加列表项,插入列表项,删除列表项,清空列表,向上移动列表项,向下移动列表项。 常用API a…

MySQL-CDC 新增同步表确无法捕获增量问题处理

Flink-CDC版本&#xff1a;2.3.0 问题描述 之前通过Flink-CDC捕获Mysql数据库的数据变更情况&#xff0c;代码大致如下&#xff1a; StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment(flinkEnvConf);MySqlSource<String> mysql …

智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)

智能咖啡厅助手&#xff1a;人形机器人 融合大模型&#xff0c;行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛) “机器人大模型与具身智能挑战赛”的参赛作品。的目标是结合前沿的大模型技术和具身智能技术&#xff0c;开发能在模拟的咖啡厅场景中承担服务员角色并…

adb下载安装及使用教程

adb下载安装及使用教程 一、ADB的介绍1.ADB是什么&#xff1f;2.内容简介3.ADB常用命令1. ADB查看设备2. ADB安装软件3. ADB卸载软件4. ADB登录设备shell5. ADB从电脑上发送文件到设备6. ADB从设备上下载文件到电脑7. ADB显示帮助信息 4.为什么要用ADB 二、ADB的下载1.Windows版…

「MySQL」增删查改

在操作数据库中的表时&#xff0c;需要先使用该数据库&#xff1a; use database;新增 创建表 先用 use 指定一个数据库,然后使用 create 新增一个表 比如建立一个学生表 mysql> use goods; mysql> create table student(-> name varchar(4),-> age int,-> …

Linux系统---nginx(4)负载均衡

目录 1、服务器配置指令 ​编辑 1.1 服务器指令表 1.2 服务器指令参数 2、负载均衡策略指令 2.1 轮询 &#xff08;1) 加权轮询 &#xff08;2) 平滑轮询 2.2 URL 哈希&#xff08;一致性哈希&#xff09; 2.3 IP哈希策略 2.4 最少连接 Nginx 负载均衡是由代理模块和上…

爱心商城|爱心商城系统|基于Springboot的爱心商城系统设计与实现(源码+数据库+文档)

爱心商城系统目录 目录 基于Springboot的爱心商城系统设计与实现 一、前言 二、系统功能设计 三、系统功能设计 1、商品管理 2、捐赠管理 3、公告管理 4、公告类型管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#x…