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

在本章中,我们将和您分享大型语言模型(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-4temperature: 这决定模型输出的随机程度,默认为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.mzph.cn/news/711021.shtml

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

相关文章

STM32合并烧录IAP+APP

STM32合并烧录IAPAPP 通过查找相关资料 有以下几种合并方法 第一种直接将二进制文件用记事本合并 而要合并的就是就将IAP最后的一行删除,然后将APP程序追加在后面。 (修改前) 把APP的.hex 全部内容拷贝复制到 刚才删掉结束语句的 IAP的.…

Win32汇编ListView控件学习

此控件比较复杂;和基础win32控件不同;需要先初始化Windows公共控件库, invoke InitCommonControls 之后才可使用; lvdemo.asm, .386.model flat, stdcalloption casemap :none ; case sensitiveinclude window…

【OCR识别】使用OCR技术还原加密字体文字

文章目录 1. 写在前面2. 页面分析3. 字符知识4. 加密分析 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋…

减少页面加载时间:提升用户体验的关键

✨✨ 祝屏幕前的您天天开心,每天都有好运相伴。我们一起加油!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一、为什么页面加载时间重要? 二、如何减少页面加载时间? …

华润置地品牌虚拟代言人IP“吉吉”,开启地产数字化营销新场景

在数字化营销时代,房地产品牌通过虚拟人技术,可以有效链接购房者,占领客户心智,优化购房体验,塑造年轻化、数字化的品牌形象。 华润置地积极拥抱数字变革,通过广州虚拟动力「现场虚拟主持技术服务」与「虚…

【Unity】使用Unity实现双屏显示

引言 在使用Unity的时候,有时候会需要使用双屏显示 简单来说就是需要在两个显示器中显示游戏画面 双屏显示注意点: ①双屏显示需要电脑有两个显示 ②双屏显示只能用于PC端 ③不仅仅可以双屏,Unity最大支持8屏显示 1.相机设置 ①我们打开Un…

Untiy webgl iis服务器加载ab包报404.3,需要为AB包添加MIMI映射

首选确定一下文件在不在 这里是缺少对于AB包文件类型的映射,因为AB包没有后缀名,我们为服务器添加通用的映射 1 开始菜单搜索iis管理器,先选中我们的服务器,然后双击进入MIME类型 2 右侧点击添加按钮 3 添加如下内容 文件扩展名为. 类型为…

性能测试-并发测试心得

一些关键名词 吞吐量 指的是在一定时间内系统处理请求或传输数据的能力,具体到性能测试中的话,就是指单位时间内系统处理并完成的请求数量或者是系统传输的数据量。 例如,吞吐量可以表示为系统每秒处理HTTP请求次数,或者是系统…

服务器git安装python包失败,如何手动下载github项目包并安装到虚拟环境中(简单易懂)

背景: 想要复现一个项目,建立好虚拟环境后,准备安装项目需要的包,故输入命令pip install -r requirements.txt requirements.txt如下图 其他包我都安装成功了,只有最后一个包失败了,是需要服务器git链接…

【学习心得】解决无限debugger的常用方法

一、什么是无限debugger 有些网站为了防止爬虫或其他恶意行为,会故意设置无限debugger作为一种简单的反爬机制,它会在开发者工具打开的情况下不断暂停执行。这对于想要分析其他代码逻辑、排查问题或进行正常开发调试工作的开发者来说极为不便。 二、解决…

Sora学习笔记

Sora - 探索AI视频模型的无限可能 随着人工智能技术的飞速发展,AI视频模型已成为科技领域的新热点。而在这个浪潮中,OpenAI推出的首个AI视频模型Sora,以其卓越的性能和前瞻性的技术,引领着AI视频领域的创新发展。让我们将一起探讨…

ios 使用window.location.href 不能跳转微信短链处理过程以及解决方法

需求背景: 由h5提供页面,通过后台请求微信api生成对应的schemal短链,该h5页面嵌入到原生的ios以及安卓app上,当用户点击后通过短连接跳转到其他小程序中 以下为生成微信scheme代码示例,生成后短链为:weixi…

Azure[Sky] Dynamic Skybox

Azure[Sky] Dynamic Skybox是一个完整而稳健的天空系统,它可将你的项目提升大到其他层次。 Azure[Sky] 不仅适合使用现实图片的项目,事实上,该系统用在风格化图片的项目也很不粗,甚至效果更好。使用 Azure,每种风格都能实现最佳效果。 性能: 在开发此资源的过程中,性能是…

【Android】属性动画

在属性动画出现之前,Android 系统提供的动画只有帧动画和 View 动画。View 动画我们都了解,它提供了 AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation 这4种动画方式,并提供了 AnimationSet 动画集合来混合使用多种动画…

35. 【Linux教程】Linux 修改用户组

前面小节介绍了如何添加用户组,本小节介绍如何给已经添加的新用户组修改信息,从 /etc/group 文件信息可以看到,用户组的信息比用户信息项少,和 usermod 命令类似,用户组的信息可以使用 groupmod 命令修改。 1. groupmo…

为了董宇辉,老婆跟我打起来了!写下一份深刻检讨

两个月前,因为讨论董宇辉小作文事件,跟老婆吵起来了。起因就为了两句话,写了这份检讨!给大家分享一下。 老婆在网上刷了两晚关于董宇辉小作文的视频,一直为董宇辉喊冤、打抱不平。起初,我跟老婆的想法&…

怎样消除视频上的字幕和文字?3个方法值得推荐

怎样消除视频上的字幕和文字?消除视频上的字幕和文字不仅是一个常见的需求,更是一个对视频内容质量提升的关键步骤。特别是在处理从网络下载的带有水印或标识的视频时,这些额外的文字和信息往往会干扰观众的观看体验,甚至可能影响…

【数据结构】顺序表和链表的对比,在各种情况下如何选择

顺序表详细内容: 【数据结构】线性表 顺序表(动态、静态分配,插入删除查找基本操作)解析完整代码 单链表详细内容: 【数据结构】单链表解析完整代码(插入、删除、尾插法、头插法、按值和按位查找、前插和后…

IDEA开发环境的安装与编写第一个程序

1.下载 IDEA(全称IntelliJ IDEA)是用于Java程序开发的集成环境(也可用于其他语言),它在业界被公认是最好的Java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代…

Mamba与MoE架构强强联合,Mamba-MoE高效提升LLM计算效率和可扩展性

论文题目: MoE-Mamba: Efficient Selective State Space Models with Mixture of Experts 论文链接: https://arxiv.org/abs/2401.04081 代码仓库: GitHub - llm-random/llm-random 作为大型语言模型(LLM)基础架构的后…