点击上方关注 “终端研发部”
设为“星标”,和你一起掌握更多数据库知识
本文首发于我的知乎,终端研发部!
链接:https://www.zhihu.com/question/585248111/answer/2903130554
说起chatGPT,我们都知道非常的火爆,作为程序员,我们更要知其然,知其所以然!
而在这个领域,最为重要的核心技术之一就是大语言模型。而在大语言模型中,ChatGPT就是备受关注的代表之一,几天我就给大家说说chatGPT背后的那些事情。
其实它是由开放人工智能研究院(OpenAI)开发的一种大型自然语言生成模型。其前身为GPT,经过不断的迭代和升级,已经发展成为了目前最为先进的自然语言处理技术之一。

ChatGPT主要是针对智能客服、聊天机器人等领域的人机交互应用而设计的。该模型不仅可以实现对话交互,还可以根据输入的信息进行推理,生成符合语义逻辑的文本,从而大大提高了对话的质量和效率。
so,我来补充一下什么是 语言模型
语言模型(language model):把语言输出看作一个符号序列,通过定义在词序列上的概率模型,计算一个词序列的概率。
2020年5月,OpenAI推出GPT-3模型(generative pre-trained transformer-3),其参数大小175亿参数,是上图第二大参数的 10 倍。
2022年11 月 30 日,OpenAI 发布了针对对话进行优化的语言模型 ChatGPT,该模型采用对话模式进行交互,不仅能回答问题,还能承认错误、质疑不正确的前提和拒绝不恰当的请求。
作为一款先进的大语言模型,ChatGPT拥有着很强的文本生成能力,可以模拟人类的思维过程,理解和处理自然语言。该模型使用了Transformer网络结构,并且训练了数百亿个单词级别的语言模型参数,从而可以对多种任务进行预测和生成。同时,该模型还集成了对话管理、情感识别、知识图谱等多种先进技术,使其更加智能化、人性化。
然而我不得不说一下大语言模型(LLM)的技术的重要性!
简单说,它的思路就是把尽可能大量大量大量大量的数据通过 Transformer 架构做机器学习,就能从数据中学到很多很多很多很多能力,多到超出原始设计者的想象。
比方说,它在翻译方面的能力,不输于,甚至超过了专业的机器翻译系统。
本文开头机翻的比尔盖茨的话,我觉得 ChatGPT 就比 Google 翻译得要好上一个层次。唯一瑕疵是用了比较生僻「元界」,而不是更常用的「元宇宙」。但当我告诉它「元宇宙」更常用后,它立刻就能修正翻译:
这个LLM模型规模必然非常巨大,ChatGPT是目前最接近理想LLM的技术方案,而理想中的LLM应该是以一个几乎无所不能的基础通用大模型作为依托,来支持各种各样的上层任务类型。目前看,支持越来越多的任务类型,主要是通过增加LLM预训练数据的多样性来达成的,数据多样性越好,LLM能够支持的任务类型就越丰富。所以,应该重视通过增加数据多样性来增加LLM新能力的思路。
这要以大模型成功的四个核心要素来分析。这四个要素是:
算法
数据
工程技巧
大量的钱买来的算力和人工反馈
像国内的阿里,百度,和腾讯也加入了这方面技术的研究。百度在人工智能领域从事了十多年,在深度学习算法与框架、人工智能赋能芯片、语言训练模型等技术方面积累了优势。
与此同时,微软表示,它计划在前几天发布自己的人工智能。
现在亚马逊、谷歌,思科、IBM、英特尔、英伟达等公司,都已经在开始布局CPO相关技术了。
同事也说一下,ChatGPT向GPT 3.5模型注入了新知识,方便LLM理解人的命令, 对于什么是好的回答,什么是不好的回答,人类有自己的标准,例如比较详细的回答是好的,带有歧视内容的回答是不好的,诸如此类。这是人类自身对回答质量好坏的偏好。人通过Reward Model反馈给LLM的数据里,包含这类信息。总体而言,ChatGPT把人类偏好知识注入GPT 3.5,以此来获得一个听得懂人话、也比较礼貌的LLM。
随着人工智能技术的不断发展和创新,ChatGPT未来还将发挥更大的作用,带给我们更多惊喜和便捷的体验!

回复 【idea激活】即可获得idea的激活方式
回复 【Java】获取java相关的视频教程和资料
回复 【SpringCloud】获取SpringCloud相关多的学习资料
回复 【python】获取全套0基础Python知识手册
回复 【2020】获取2020java相关面试题教程
回复 【加群】即可加入终端研发部相关的技术交流群
阅读更多
用 Spring 的 BeanUtils 前,建议你先了解这几个坑!
在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!
一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)
在这里获得的不仅仅是技术!


喜欢就给个“在看”
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢