如何使用ChatGPT的API(一)大语言模型如何工作

这篇文章介绍大语言模型的一些概念,包括它是如何工作的,什么是Token等等。

大语言模型如何工作

我们从一个示例开始说起。

当我们写一个提示“我喜欢吃”,然后要求一个大型语言模型根据这个提示填写后面可能的内容。它可能会说,“带奶油奶酪的百吉饼,或者我妈妈做的菜”。

但是这个模型是如何学会做到这一点的呢?

训练大型语言模型的主要工具实际上是监督学习。在监督学习中,计算机使用带标签的训练数据来学习输入-输出或X-Y的映射关系。例如,如果你正在使用监督学习来学习对餐厅评论进行情感分类,你可能会收集一个像这样的训练集,其中一条评论如“熏牛肉三明治很棒!”被标记为积极情感的评论,依此类推。而“服务很慢,食物一般般。”则被标记为消极情感,“伯爵红茶太棒了。”则被标记为积极情感。监督学习的过程通常是获取带标签的数据,然后在数据上训练AI模型。训练完成后,你可以部署和调用模型,并给它一个新的餐厅评论,比如“最好吃的披萨!”。然后它正确判定了这是积极情感。

事实证明,监督学习是训练大型语言模型的核心构建模块。具体来说,可以通过使用监督学习来重复预测下一个单词来构建大型语言模型。假设在训练集中有大量的文本数据,有一句话是“My favorite food is a bagel with cream cheese and lox.”。然后,这句话被转化为一系列的训练示例。这时给定一个句子片段,“My favorite food is a”,则下一个预测出来的单词就是“bagel”。然后当给定句子片段或句子前缀,“My favorite food is a bagel”,下一个预测的单词将是“with”,依此类推。 在拥有数百亿甚至更多单词的大型训练集的情况下,你可以创建一个庞大的训练集,从一个句子或一段文本的一部分开始,反复要求语言模型学习预测下一个单词。

所以今天有两种主要类型的大型语言模型。第一种是“基础LLM”,第二种是越来越多使用的“指令调整LLM”。

基础LLM根据文本训练数据反复预测下一个单词。所以如果我给它一个提示,“从前有一只独角兽”,然后通过反复一次预测一个单词,它可能会给出一个关于一只独角兽在一个神奇森林中与她的独角兽朋友们一起生活的故事。

然而,这种方法的一个缺点是,如果你用“What is the capital of France?”这样的提示,很可能在互联网上有一个关于法国的问答题目列表。所以它可能会用“What is France’s largest city? what is France’s population?”等来完成这个提示。 但是你真正想要的是它告诉你法国的首都,而不是列出所有这些问题。

但指令调整LLM尝试遵循指令,它会说,“法国的首都是巴黎。”

如何从基础LLM转变为指令调整LLM?

这就是训练指令调整LLM(如ChatGPT)的过程。 首先,你需要在大量数据上训练一个基础LLM,可能是数百亿个单词,甚至更多。这个过程可能需要数月时间在一个大型超级计算系统上进行。 在训练完基础LLM之后,你可以通过在一个较小的示例集上对模型进行微调来进一步训练模型,使其按照输入的指令输出结果。例如,你可以编写很多关于指令的示例和对应的良好回答。这样就创建了一个训练集来进行额外的微调,使其学会在遵循指令时预测下一个单词。之后,为了提高LLM输出的质量,一个常见的过程是获取人类对许多不同LLM输出质量的评价,比如输出是否有帮助、诚实和无害等标准。然后,你可以进一步调整LLM,增加其生成更高评级输出的概率。而最常用的技术是RLHF(Reinforcement Learning from Human Feedback,从人类反馈中进行强化学习)。从基础LLM到指令调整LLM的过程可能只需要几天时间,并且使用更小规模的数据集和计算资源。

什么是Token

ChatGPT处理不了反转单词的任务。

response = get_completion("Take the letters in lollipop and reverse them")  #这里希望chatgpt反转输出单词lollipop
print(response)

回答:

The reversed letters of "lollipop" are "pillipol".

很明显pillipol并不是正确答案。正确答案应该是popillol

为什么ChatGPT这么牛逼却处理不了这样一个简单的问题呢?

这就要引入Token的概念了。简单来说,ChatGPT处理信息(也就是我们输入的prompt)不是按照一个单词一个单词处理的。这点和人处理文字信息非常不同。人是一个单词一个单词,一个汉字一个汉字来理解文字信息和处理文字信息的。而ChatGPT是按Token来处理信息的。一个稍长的英文单词可能被分成多个Token。

上图的例子中,prompting被分成了三个Token。

lollipop则被分成了上图所示的三部分。看到这里,就知道ChatGPT的处理文字的方式决定了它无法完成反转单词的任务。

response = get_completion("""Take the letters in \
l-o-l-l-i-p-o-p and reverse them""") 

回答:

p-o-p-i-l-l-o-l

上面的测试代码用-将字母隔开,以便划分Token时让每个字母作为一个Token。

这时ChatGPT回答的就是正确的了。

通常情况下,一个Token包含大概4个字母或者一个单词的4分之3。

这里其实有一个技术细节,就是ChatGPT预测后面的内容时是通过预测下一个Token来的。这也是为什么OpenAI的API调用是按照Token来计费的。也就是处理一个Token收一个Token的钱。注意,算钱是是把输入和输出的Token都算钱的。

OpenAI的网站上提到“Only pay for what you use.”。看来也挺切合的。

这是最常用的gpt-3.5-turbo模型的价格。

同时,不同的模型单次处理的Token数(输入的Token+输出的Token之和)是有上限的。比如gpt-3.5-turbo模型单次处理Token的上限是4000个Token。

另外python中有个tokenizer 包是可以计算一句话的Token数的。下面的代码演示了这个包的用法。

def get_completion_and_token_count(messages, model="gpt-3.5-turbo", temperature=0, max_tokens=500):response = openai.ChatCompletion.create(model=model,messages=messages,temperature=temperature, max_tokens=max_tokens,)content = response.choices[0].message["content"]token_dict = {
'prompt_tokens':response['usage']['prompt_tokens'],
'completion_tokens':response['usage']['completion_tokens'],
'total_tokens':response['usage']['total_tokens'],}return content, token_dict
messages = [
{'role':'system', 'content':"""You are an assistant who responds\in the style of Dr Seuss."""},    
{'role':'user','content':"""write me a very short poem \ about a happy carrot"""},  
] 
response, token_dict = get_completion_and_token_count(messages)
print(response)
print(token_dict)
Oh, the happy carrot, so bright and orange,
Grown in the garden, a joyful forage.
With a smile so wide, from top to bottom,
It brings happiness, oh how it blossoms!In the soil it grew, with love and care,
Nurtured by sunshine, fresh air to share.
Its leaves so green, reaching up so high,
A happy carrot, oh my, oh my!With a crunch and a munch, it's oh so tasty,
Filled with vitamins, oh so hasty.
A healthy snack, a delight to eat,
The happy carrot, oh so sweet!So let's celebrate this veggie delight,
With every bite, a happy sight.
For the happy carrot, we give a cheer,
A joyful veggie, oh so dear!{'prompt_tokens': 37, 'completion_tokens': 160, 'total_tokens': 197}

角色定义

下面是一个消息列表的例子,首先是一个系统消息,它提供了整体指示。在这条消息之后,我们有用户助手之间的多轮对话,这个对话会一直进行下去。如果你曾经使用过ChatGPT的网页界面,那么你的消息就是用户消息,ChatGPT的消息就是助手消息系统消息有助于设定助手的行为和个性,并且它在对话中充当高级指令。你可以将其视为在助手耳边私下交流并引导其回复,而用户并不知道系统消息的存在。作为用户,如果你曾经使用过ChatGPT,你可能不知道ChatGPT的系统消息内容。系统消息的好处在于,它为开发者提供了一种在对话中框定对话范围的方式,而不用让这些框定的话语成为对话的一部分。这样,你可以引导助手,私下指导其回复,而不让用户察觉。

messages =  [  
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},    
{'role':'user', 'content':'tell me a joke'},   
{'role':'assistant', 'content':'Why did the chicken cross the road'},   
{'role':'user', 'content':'I don\'t know'}  ]response = get_completion_from_messages(messages, temperature=1)
print(response)

回答:

#response.choices[0].message 中的完整内容
{"content": "To get to the other side, my good sir!","role": "assistant"
}To get to the other side, my good sir!

如何更安全地加载OpenAI的key

OpenAI的key是调用OpenAI接口的唯一凭证。泄漏了可能会造成不小的金钱损失,所以要妥善保管。

下图演示了两种加载OpenAI的key的方式。

下面这种方式明显是更安全的。OpenAI的key不会暴露在代码中,而是由一个单独的.env文件来维护。

注意,安装dotenv包需要用下面的命令来安装。

pip install python-dotenv

加载key的代码

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env fileopenai.api_key  = os.environ['OPENAI_API_KEY']

.env文件中的内容

OPENAI_API_KEY="sk-xxx"

如今开发AI应用程序的现状

过去开发AI应用,首先要收集数据,标注数据,训练模型,最后再部署模型来使用。耗时长,需要掌握的知识和技能比较多,门槛高。

现在开发AI应用只需要会写Prompt和基础的编程能力就可以了。

时代在进步,咱得跟上。

参考:

https://learn.deeplearning.ai/chatgpt-building-system/lesson/2/language-models,-the-chat-format-and-tokens

文章中不好放全部的示例代码,我的公众号《首飞》内回复 “api” 关键字可获取本篇文章完整的示例代码(格式为ipynb)。


觉得有用就点个赞吧!

我是首飞,一个帮大家填坑的工程师。

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

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

相关文章

IP-Guard能否限制PC端微信登录?

能否限制PC端微信登录? 不能限制微信登录,但可以通过应用程序控制策略,禁止微信程序启动。 在控制台-【策略】-【应用程序】,添加以下策略: 动作:禁止 应用程序:wechat.exe 可以实现禁止微信启…

七年老程序员的三四月总结:三十岁、准备婚礼、三次分享

你好,我是 shixin,一名工作七年的安卓开发。 每两个月我会做一次总结,记下这段时间里有意义的事和值得反复看的内容,为的是留一些回忆、评估自己的行为、沉淀有价值的信息。 一转眼 2023 年过去了三分之一,这两个月经历…

一张图就是一个故事,用 SceneXplain 讲个好故事

精准的图像描述不仅可以让人们更容易理解图像背后的故事和信息,还可以让图像更易于被检索和识别。然而,对于那些复杂的图像来说,写出既准确又详细的描述实在是件非常困难的事情。 图像描述算法的演变 所谓 Image Caption(图像描述)任务&#…

NLP 中语言表示 (向量化) 的基本原理和历史演变综述

目录 1 前言2 语言表示2.1 离散表示2.1.1 独热编码2.1.2 词袋模型2.1.3 TF-IDF 模型2.1.4 N-gram 模型2.1.5 基于聚类的表示 2.2 连续表示2.2.1 分布式表示2.2.2 Word Embedding2.2.2.1 Word2Vec2.2.2.2 GloVe2.2.2.3 FastText 2.2.3 基础神经网络模型2.2.3.1 神经词袋模型2.2.…

七年程序员的三四月总结:三十岁、准备婚礼、三次分享

你好,我是 shixin,一名工作七年的安卓开发。 每两个月我会做一次总结,记下这段时间里有意义的事和值得反复看的内容,为的是留一些回忆、评估自己的行为、沉淀有价值的信息。 一转眼 2023 年过去了三分之一,这两个月经…

SceneXplain:让 ChatGPT 开启视觉视角

来自:Jina AI 精准的图像描述不仅可以让人们更容易理解图像背后的故事和信息,还可以让图像更易于被检索和识别。然而,对于那些复杂的图像来说,写出既准确又详细的描述实在是件非常困难的事情。 图像描述算法的演变 所谓 Image Cap…

如何选择国际通知短信服务商?

企业在开拓海外市场的过程中,往往需要用到国际短信接口,帮助企业实现用户注册、订单通知、快递通知、营销推广等功能。 那么如何选择国际短信服务商?接下来互亿无线小编整理了相关信息,为大家做个详细介绍: 一、国际…

国际短信发送接口

接口地址 http://intlapi.1cloudsp.com/intl/api/v2/send 用户通过HTTP(或HTTPS)的POST或GET方式提交短信发送请求。编码采用 UTF-8 编码。

ChatGPT还有什么不会?招行信用卡用它写出金融业首篇AIGC

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 内容来自机器之心 比尔盖茨:它(ChatGPT)让我们窥见了未来。 2023 开年至今,AI 赛道最火的莫过于 OpenAI 的 ChatGPT。 推出不到两个月的时间,月活用户…

数字人是AI的UI,ChatGPT助推数字人升级为数智人

以ChatGPT为代表的AIGC智能工具与数字人结合后,将彻底改变人类与计算机的交互方式,使虚拟世界中的数字人对话更真实、更贴近人类,具有记忆和实现连续对话的能力;通过大量人工智能模型训练后数字人将提供更准确、更有价值的信息&am…

ChatGPT-4回答电子电路相关问题,感觉它有思想,有灵魂,一起看看聊天记录

前几天发了一篇文章,讲了我们平常摸电脑或者其它电器设备的时候,会有酥酥麻麻的感觉,这个并不是静电,而是Y电容通过金属壳泄放高频扰动,我们手摸金属壳的时候,就给Y电容提供了一个泄放回路,所以…

虚拟数字人遇上ChatGPT,好看的皮囊和有趣的灵魂?

都说好看的皮囊千篇一律,有趣的灵魂万里挑一,博雅仔不禁好奇,到底有没有皮囊又好看,灵魂又有趣的人呢?二者能否得兼?答案是当然可以啊。 虽然在现实生活中,遇到这样的人需要静待缘分的安排&…

GPT-4的20个起飞的姿势

全文目录: 1.聊天 GPT SaaS 业务 2. API 即服务 3.AI自动优酷频道 4. 社交媒体营销机构 5. 使用聊天GPT创建课程 6.开始按需打印商店 7.AI 个人助理 8.AI 自媒体助手 9. 客户服务聊天机器人 10. 财务规划应用程序 11. 健康与保健应用程序 12. 娱乐应用 …

大模型、AIGC 资源记录

文章目录 awesome*awesome-ChatGPT-repositoriesAwesome-ComposableAIawesome-open-gpt - GPT相关开源项目合集awesome-gpt4 ChatGPTChatGPT综述FindTheChatGPTer collieTurboPilotLLM-IMDBAriaphasellmai-legion GUI 工具web-llmWeb Stable Diffusiontext-generation-webuista…

最佳 AI 生产力工具:更聪明地工作,而不是更努力地工作

在20世纪50年代,AI 在内存耗尽之前几乎无法完成跳棋游戏。 快进七个激动人心的十年,可以理解自然语言的人工智能系统——大型语言模型 (LLM)——正在成为我们数字工具箱中的重要工具。 在今天的文章中,我们梳理了一些提高生产力的最佳人工智…

集成RocketChat至现有的.Net项目中,为ChatGPT铺路

文章目录 前言项目搭建后端前端 代理账号鉴权方式介绍登录校验模块前端鉴权方式 后端鉴权方式登录委托使用登录委托处理聊天消息前端鉴权方式后端校验方式 项目地址 前言 今天我们来聊一聊一个Paas的方案,如何集成到一个既有的项目中。 以其中一个需求为例子&#…

我发布了自己第一个由ChatGPT辅助开发的开源项目goattribute

需求产生 前两天在工作过程中又遇到了一直以来困惑我的一个问题,就是Go配置项的管理问题。 在开发一个新项目的时候,往往涉及到配置项的管理。个人小项目可能会通过配置文件来传入、环境变量来传入,也可能通过命令行参数来传入,公…

阿里自爆性能优化100+小技巧,Github已获赞68.7K

随着互联网飞速的发展,从4G到5G的全面过渡,深度学习性能优化,已经变成一个越来越重要的话题,从面试时的面试题都可以看出来了,所以今天就来分享一份Java性能优化100小技巧! 本性能优化手册包含内容&#x…

在虚拟机上测试rm -rf 命令,自爆了

切记不要在任何正常机器上使用rm -rf / 或 rm -rf / * 命令!!! 系统:CentOS-7-x86_64-DVD-2003.iso 开始测试: 现在很多操作系统,已经默认拒绝在 / 目录下执行递归删除操作了,这减小了一些风险。…

【UE】三步创建自动追踪自爆可造成伤害的敌人

效果 可以看到造成伤害时在右上角打印玩家当前的生命值 步骤 1. 首先拖入导航网格体边界体积 2. 首先复制一份“ThirdPersonCharacter”,命名为“ExplodingAI” 打开“ExplodingAI”,删除事件图表中所有节点 添加一个panw感应组件 在事件图表中添加如…