大模型相关知识

一. embedding

        简单来说,embedding就是用一个低维的向量表示一个物体,可以是一个词,或是一个商品,或是一个电影等等。这个embedding向量的性质是能使距离相近的向量对应的物体有相近的含义,比如 Embedding(复仇者联盟)和Embedding(钢铁侠)之间的距离就会很接近,但 Embedding(复仇者联盟)和Embedding(乱世佳人)的距离就会远一些。  
        除此之外Embedding甚至还具有数学运算的关系,比如Embedding(马德里)-Embedding(西班牙)+Embedding(法国)≈Embedding(巴黎)
  从另外一个空间表达物体,甚至揭示了物体间的潜在关系,上次体会这样神奇的操作还是在学习傅里叶变换的时候,从某种意义上来说,Embedding方法甚至具备了一些本体论的哲学意义。

Embedding在大模型中的价值

前面说的其实都是Embedding在之前的价值。但是,大语言模型时代,例如ChatGPT这样的模型流行之后,大家发现embedding有了新的价值,即解决大模型的输入限制。

此前,OpenAI官方也发布了一个案例,即如何使用embedding来解决长文本输入问题,我们DataLearner官方博客也介绍了这个教程:OpenAI官方教程:如何使用基于embeddings检索来解决GPT无法处理长文本和最新数据的问题 | 数据学习者官方网站(Datalearner)

像 GPT-3 这样的语言模型有一个限制,即它们可以处理的输入文本量有限。这个限制通常在几千到数万个tokens之间,具体取决于模型架构和可用的硬件资源。

这意味着对于更长的文本,例如整本书或长文章,可能无法一次将所有文本输入到语言模型中。在这种情况下,文本必须被分成较小的块或“片段”,可以由语言模型单独处理。但是,这种分段可能会导致输出的上下文连贯性和整体连贯性问题,从而降低生成文本的质量。

这就是Embedding的重要性所在。通过将单词和短语表示为高维向量,Embedding允许语言模型以紧凑高效的方式编码输入文本的上下文信息。然后,模型可以使用这些上下文信息来生成更连贯和上下文适当的输出文本,即使输入文本被分成多个片段。

此外,可以在大量文本数据上预训练Embedding,然后在小型数据集上进行微调,这有助于提高语言模型在各种自然语言处理应用程序中的准确性和效率。

如何基于Embedding让大模型解决长文本(如PDF)的输入问题?

这里我们给一个案例来说明如何用Embedding来让ChatGPT回答超长文本中的问题。

如前所述,大多数大语言模型都无法处理过长的文本。除非是GPT-4-32K,否则大多数模型如ChatGPT的输入都很有限。假设此时你有一个很长的PDF,那么,你该如何让大模型“读懂”这个PDF呢?

首先,你可以基于这个PDF来创建向量embedding,并在数据库中存储(当前已经有一些很不错的向量数据库了,如Pinecone)。

接下来,假设你想问个问题“这个文档中关于xxx是如何讨论的?”。那么,此时你有2个向量embedding了,一个是你的问题embedding,一个是之前PDF的embedding。此时,你应该基于你的问题embedding,去向量数据库中搜索PDF中与问题embedding最相似的embedding。然后,把你的问题embedding和检索的得到的最相似的embedding一起给ChatGPT,然后让ChatGPT来回答。

当然,你也可以针对问题和检索得到的embedding做一些提示工程,来优化ChatGPT的回答。

二、大模型

机器学习基础
学习所用的数据 分类
监督学习 :无需标注的数据即可学习,通常用于聚类(一堆点,如何分为 N 类)
监督学习 :利用标注过的数据,如:已知 N 套房子的大小和价格(大部分都是如此)
半监督学习 :少量标注过的数据,大部分是未标注数据
自监督学习:从未标注数据中,自行挖掘出可用于监督的数据( ChatGPT 的做法)
强化学习 :通过正向或负向反馈来学习调整
要达成的效果 分类
聚类:预先不知道要分成几类,距离相近的自动成为一类
分类:从若干类别中识别出所属的特定类别
回归:通过已知值,给出预测值(如例子中的房价预测)
翻译:从一种形式,转换为另一种形式
生成:根据概率分布,生成与原始数据类似的新数据
具体 算法
线性回归
贝叶斯
SVM
决策树
随机森林
神经网络 :深度神经网络就是深度学习,也是当前一切 AI 的基础
何为深度:至少应有两个隐藏层
深度学习

通过构建和训练深层神经网络来学习和提取数据中的特征,从而实现高度自动化和准确性能的模型训练和预测。

深度学习和大模型: 大模型技术通常与深度学习相结合,因为深度学习网络通常具有大量的参数和复杂的结构。大模型技术通过增加模型的规模和容量,例如增加网络层数、神经元的数量或卷积核的大小,以增强模型的表达能力和学习性能。大模型技术还包括优化算法和训练策略,以有效地训练和优化这些庞大的深度学习模型。

大模型概念
  1. 预训练是指在大规模的未标记数据上进行的初始化模型训练阶段。模型通过对大量的文本数据进行自监督学习,学习到语言的各种结构和表达方式。预训练的目标是让模型能够在下游任务中具有更好的理解和表达能力。预训练通常是通过自编码器或掩码语言建模的方式进行,其中模型要根据上下文预测缺失的词或片段。

  2. 微调:
    微调是在预训练完成后,将预训练模型应用于特定任务并进行有监督的训练的过程。在微调阶段,模型使用标记的训练数据进行进一步的训练,以适应特定任务的要求。微调以较低的学习率进行,以避免过度调整预训练模型的参数,从而保留预训练模型所学到的知识。通常,微调的数据集规模相对较小,因此可以使用更少的计算资源和时间来完成。

  3. 语料:
    语料是指用于模型训练的文本数据集。对于预训练大模型来说,用于预训练的语料库通常是非常庞大的,例如大规模的网页文本、维基百科、书籍、新闻等。预训练模型需要处理大量的语料来学习普遍的语言知识。对于微调阶段,语料可以是特定任务的标记训练集。

预训练、微调和语料是在大型NLP模型中实现强大性能的重要因素。通过预训练技术,模型可以从大量无监督的数据中学习语言特征,从而提高模型的泛化能力。通过微调过程,模型可以将预训练知识转移到特定任务中,并根据特定任务的训练数据进行细化调整。同时,使用多样化且广泛的语料库可以提高模型对不同领域和上下文的理解能力。

需要注意的是,预训练和微调的过程是基于大量的计算资源和大规模的数据集进行的。这也导致了建立和训练大型模型的门槛相对较高,并且模型可能带来较大的计算和存储要求。

大模型框架

除了ChatGPT,近期影响较大的有:Meta AI的LLaMA、斯坦福基于LLaMA的Alpaca、清华大学的GLM和ChatGLM

三、LangChain

参考:什么是LangChain - 知乎

LangChain是一个开源框架,允许从事人工智能的开发者将例如GPT-4的大语言模型与外部计算和数据来源结合起来。该框架目前以Python或JavaScript包的形式提供。

假设,你想从你自己的数据、文件中具体了解一些情况(可以是一本书、一个pdf文件、一个包含专有信息的数据库)。LangChain可以将GPT-4和这些外部数据连接起来,甚至可以让LangChain帮助你采取你想采取的行动,例如发一封邮件。

三个重要概念:

  • Components

-LLM Wrapper:包装器,允许我们连接到大语言模型,例如GPT-4或HuggingFace的模型。

-Prompt Templates:提示模板,使我们不必对文本进行硬编码,而文本是LLM的输入。

-Indexes for relevant information retrieval:相关内容的索引,允许我们为LLM提取相关信息。

  • Chains

允许我们将多个组件组合在一起,以解决一个特定的任务,并建立一个完整的LLM应用程序。

  • Agents

允许LLM与外部API互动。

二、 原理

将你的文件切成小块,把这些小块存储在一个矢量数据库中,这些块被存储为embedding,意味着它们是文本的矢量表示。

pipeline执行流程:

>>一个用户提出了初始问题。

>>然后,这个问题被发送到大语言模型,并将该问题的向量表示在向量数据库中做相似性搜索。

>>获取相关的信息块,将其反馈给大语言模型。

>>大语言模型通过初始问题和来自矢量数据库的相关信息,提供一个答案或采取一个行动。

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

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

相关文章

【JavaWeb】实训的长篇笔记(下)

文章目录 八、功能实现1、注册功能2、登录功能3、问题说明4、首页数据显示5、后台管理 八、功能实现 1、注册功能 jsp:能够在页面中把数据动态化,jsp和html在元素标签上是无区别的,区别是html中写上java代码就成了jsp文件。filename.jsp。 需…

Go http.Handle和http.HandleFunc的路由问题

Golang的net/http包提供了原生的http服务,其中http.Handle和http.HandleFunc是两个重要的路由函数。 1. 函数介绍 http.HandleFunc和http.Handle的函数原型如下,其中DefaultServeMux是http包提供的一个默认的路由选择器。 func HandleFunc(pattern st…

关于MYSQL日期相减问题

错误写法: SELECT DATE_FORMAT(STR_TO_DATE(20230701,%Y%m%d) -60,%Y%m%d); 但是这种格式有个问题,则会输出空。 正确写法: SELECT DATE_FORMAT(DATE_SUB(20230701,INTERVAL 60 DAY),%Y%m%d);

基于Spring Boot的高校图书馆管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的高校图书馆管理系统的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java sp…

C++QT教程3——手册4.11.1自带教程(笔记)——创建一个QT快速应用

文章目录 创建一个QT快速应用创建项目创建主视图添加应用逻辑为视图添加动画素材文件 参考文章 创建一个QT快速应用 本教程使用内置的QML类型,介绍了Qt Quick的基本概念。有关可以选择的用户界面选项的更多信息,请参阅用户界面。 本教程描述了如何使用…

实现C++多线程的完全指南

目录 引言:1. 理解多线程编程的基本概念2. 引入C标准库中的线程库3. 创建线程4. 线程同步和互斥5. 线程间的通信使用多线程需要关注的要点结论: 引言: 在现代软件开发中,多线程编程已经成为一项非常重要的技能。通过利用多线程&a…

每日一题——圆圈中最后剩下的数字(约瑟夫环问题)

圆圈中最后剩下的数字(约瑟夫环问题) 题目链接 约瑟夫环 这是一道典型的约瑟夫环问题,而约瑟夫问题的一般形式是这样的: 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被…

P12-Retentive NetWork-RetNet挑战Transformer

论文地址:https://arxiv.org/abs/2307.08621 目录 Abstract 一.Introduction 二.Retentive Networks 2.1Retention 2.2Gated Multi-Scale Retention 2.3Overall Architecture of Retention Networks 2.4Relation to and Differences from Previous Methods 三.Experime…

【ARM Cache 系列文章 8 -- ARM DynamIQ 技术介绍

文章目录 DynamIQ 技术背景DynamIQ技术详解DynamIQ 与 big.LITTLEDynamIQ cluster 分类硬件支持 DynamIQ为什么适合人工智能? DynamIQ 技术背景 2017年3月21日下午,ARM在北京金隅喜来登酒店召开发布会,正式发布了全新的有针对人工智能及机器…

在线Word怎么转换成PDF?Word无法转换成PDF文档原因分析

不同的文件格式使用方法是不一样的,而且也需要使用不同的工具才可以打开编辑内容,针对不同的场合用户们难免会用到各种各样的文件格式,要想在不修改内容的前提下提高工作效率,那就需要用到文件格式转换,那么在线Word怎…

Effective Java笔记(31)利用有限制通配符来提升 API 的灵活性

参数化类型是不变的&#xff08; invariant &#xff09; 。 换句话说&#xff0c;对于任何两个截然不同的类型 Typel 和 Type2 而言&#xff0c; List<Type1 &#xff1e;既不是 List<Type 2 &#xff1e; 的子类型&#xff0c;也不是它的超类型 。虽然 L ist<String…

Rust 编程小技巧摘选(8)

目录 Rust 编程小技巧(8) 1. 取整函数 floor() 2. 取整函数ceil() 3. 取整函数 round() 4. 保留小数位数 5. 字符串转整数 unwrap() unwrap_or() Rust 编程小技巧(8) 1. 取整函数 floor() floor函数对浮点数进行向下取整 示例代码&#xff1a; fn main() {let x: …

【爬虫】爬取旅行评论和评分

以马蜂窝“普达措国家公园”为例&#xff0c;其评论高达3000多条&#xff0c;但这3000多条并非是完全向用户展示的&#xff0c;向用户展示的只有5页&#xff0c;数了一下每页15条评论&#xff0c;也就是75条评论&#xff0c;有点太少了吧&#xff01; 因此想了个办法尽可能多爬…

3.解构赋值

解构赋值是一种快速为变量赋值的简洁语法&#xff0c;本质上仍然是为变量赋值。 3.1数组解构 数组解构是 将数组的单元值快速批量赋值给一系列变量 的简洁语法 1.基本语法: &#xff08;1&#xff09;赋值运算符左侧的[ ]用于批量声明变量&#xff0c;右侧数组的单元值将被赋…

面试热题(最大子数组和)

给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#xff1a;6 解释&#xff1a;连续…

SolidUI 一句话生成任何图形,v0.2.0功能介绍

文章目录 背景聊天窗口提示词 聊天窗口生成输入数据格式柱形图曲面图散点图螺旋线饼图兔子建模地图 设计页面页面布局预览 SolidUI社区的未来规划如何成为贡献者加群 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容…

【数据结构】哈希表

总结自代码随想录 哈希表的原理&#xff1a; 对象通过HashCode()函数会返回一个int值&#xff1b;将int值与HashTable的长度取余&#xff0c;该余数就是该对象在哈希表中的下标。

GCviewer分析java垃圾回收的情况

一&#xff0c;下载并打包 1.在github上下载gcviewer,并解压。 2. 运行maven命令打包。mvn clean package -DskipTests 二&#xff0c;启动GCViewer 进入target目录&#xff0c;运行 java -jar gcviewer-1.37-SNAPSHOT.jar 运行后&#xff0c;会出来界面 三&#xff0c;加参…

docker菜谱大全

记录docker常用软件安装&#xff0c;感谢小马哥和杨师傅的投稿。&#x1f60e;&#x1f60e;&#x1f60e; 相关文档&#xff1a; DockerHub&#xff1a;https://hub.docker.com/Linux手册&#xff1a;https://linuxcool.com/Docker文档&#xff1a;https://docs.docker.com/Do…

【设计模式】原型模式

原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口&#xff0c;该接口用于创建当前对象的克隆。当直接…