LLM的基础模型4:初识Embeddings

2024-06-05 01:36

本文主要是介绍LLM的基础模型4:初识Embeddings,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

Embeddings

Embeddings会分为两个章节,前部分主要还是放在常规方法总结,后者主要放在神经网络技术。其实这个英文单词不难理解,就是将对象用数字标识描述。其实一直纠结是否要讲述这个话题,因为可深可浅。

若要用一句话概括,就是给输入分配一个数字标识,可以是一个整数数值也可以是一个向量。不过最重要的目的是在模型训练的过程中能够高效且有效的学习参数。

这里需要解释下向量,例如apple可以使用三维的向量[0.95,0.23,-0.23]来表示,也可以使用四维的向量来表示[0.95,0.23,-0.23,0.12],请注意下图中Embedding Dimensions这一列,不同模型的Embedding维度不一

one-hot encoding

这是一种最直观,也是最不需要动脑子的编码模式。假如有10000个对象,那么每个对象就是一个10000维的向量,朴素也暴力。例如apple这个词在第50个,那么apple对应的编码就是:10000维的向量,这个向量除了第50个为1之外,其余的数值均为0。

#词汇表Vocabulary:{'mat', 'the', 'bird', 'hat', 'on', 'in', 'cat', 'tree', 'dog'}#词汇表中词汇和位置的映射Word to Index Mapping:{'mat': 0, 'the': 1, 'bird': 2, 'hat': 3, 'on': 4, ……}#输入一句话的编码矩阵One-Hot Encoded Matrix:cat: [0, 0, 0, 0, 0, 0, 1, 0, 0]in:  [0, 0, 0, 0, 0, 1, 0, 0, 0]the: [0, 1, 0, 0, 0, 0, 0, 0, 0]hat: [0, 0, 0, 1, 0, 0, 0, 0, 0]dog: [0, 0, 0, 0, 0, 0, 0, 0, 1]on:  [0, 0, 0, 0, 1, 0, 0, 0, 0]the: [0, 1, 0, 0, 0, 0, 0, 0, 0]mat: [1, 0, 0, 0, 0, 0, 0, 0, 0]bird:[0, 0, 1, 0, 0, 0, 0, 0, 0]in:  [0, 0, 0, 0, 0, 1, 0, 0, 0]the: [0, 1, 0, 0, 0, 0, 0, 0, 0]tree:[0, 0, 0, 0, 0, 0, 0, 1, 0]

这种编码方式的缺点显而易见,One-hot编码会产生高维向量,使其计算成本高昂且占用大量内存,尤其是在词汇量较大的情况下;它不捕捉单词之间的语义关系;它仅限于训练期间看到的词汇,因此不适合处理词汇表之外的单词。

Feature Vector

第二种编码方式是基于特征,其实彩色图片是一种很好的例子。做过视觉学习的都知道彩色图片常见的有三种通道(三维向量),分别代表RGB(红绿蓝)。三种颜色取不同的值就可以合成任意一个位置的色块。举个例子橘色其实就可以使用orange = [1, .5, 0]来表示。说白了就是每个维度代表一种特征,然后组合起来就能代表一个输入对象。

为了加深大家的理解,上图这个例子更加直观。假如约定的编码只有4个维度,分别是“春夏秋冬”,那么上图右侧框框中的事物都可以使用下面的编码来替代。具体的意思就是这个物体是不是在四季节出现,当然学过数学组合的都知道这种编码方式只能将整个世界的对象分成16类。但是它已经开始在编码中存储对象之间的某种关系。

emoji = [spring, summer, autumn, winter]🌳    = [1, 1, 1, 0]🍂    = [1, 0, 0, 0]🍁    = [1, 0, 0, 0]🌻    = [0, 1, 0, 0]🎁    = [0, 0, 1, 1]🎅    = [0, 0, 1, 1]...etc

这种编码模式更加符合人脑,人类在记忆某种事物的时候其实也是某种编码,例如看到笔,一般会浮现它的形状,属性和相关的事物,例如纸张。

Document Vector

换个思路,假如收集了大量的文章,然后将文章里面的字词在文章中出现的次数做个标记。可以得到如下的矩阵:每一列代表着文章编号,每一行代表某个词,通过观察图片你就会发现其实traffic和network是不是有点相似,按照这个编码其实也是一种思路。

Co-occurrence Vector

顺着刚才的思路,其实还有一种编码的办法:可以将文章按照特定的长度进行窗口的滑动,然后统计在这个窗口里面单词之间的关联次数。下图给出例子,从其中可以发现其实data和mining还是挺相似的。这种编码的好处在于这种类型的embedding可以准确地捕获单词的使用含义(毕竟单词的含义会根据使用的时间、社区和上下文而变化)。

Neural Embedding

除了基于传统的统计学方法,其实可以采用神经网络来帮助自动化的抽取信息,方法很多。为了帮助大家更好的理解,这里先引入较早机器学习的一个术语,自编码器。其实它的历史很悠久,只不过到近期才被发扬光大而已。

如何理解自编码器呢,请看下图:

当输入一副图、一段语音或者一段文字的时候,通过绿色部分的神经网络,然后输出一个向量,紧接着再将这个向量输入紫色部分的神经网络,紫色部分的输出为重建之后的图、语音或者文字。最后用输出和真实值对比出差异反过来调整两个神经网络的参数。如此循环!

聪明的你一定反应过来了,要是重建之后的正确率很高的话。那么中间变量是不是经过压缩的向量,代表了原图,原语音或者原文。对了!这个就是自编码器。

那么中间的向量代表什么,其实是可以的解释。以输入“图片”为例,中间的向量有些维度描述对象特征,有些描述了材质。有人曾经做过实验,语音通过自编码器之后,中间向量有一部分代表内容,一部分代表音调。取一段中文和一段日文的语音输入编码器,然后将两个向量拆分组合,是可以重建出日语说中文。

如何用神经网络用于Embedding,下文会展开详细讲解。整体的基本思路还是在于将单词的上下文和情景信息,通过神经网络的参数训练进行编码。

这篇关于LLM的基础模型4:初识Embeddings的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031705

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列