大模型词向量:解析语义,助你成为沟通达人

文章目录

    • 一、向量
    • 二、如何把词转换为向量
      • 三、如何把词转换为向量进阶
    • 三、如何让向量具有语义信息

大家好,我是脚丫先生 (o^^o)

在研究大模型的时候,有一篇文章写得非常通俗易懂。

之前在其他地方不是怎么看懂,但是在这里懂了😄

一、向量

在NLP领域,无论语言模型的大小,都必须将词先表达为向量,词向量就是语言模型的输入。

在CV领域,无论视觉模型的大小,也必须将图像先表达为向量。

将文字、图像、视频、音频等数据向量化,本质是将"人类可理解的数据问题"转换为"机器可理解的机器学习问题"。

我们来看一个向量化的例子:

  • 人类小孩儿第一次看到苹果,人类小孩儿是怎么记住这种东西就是苹果呢?

  • 人类小孩儿会从不同维度描述苹果的特征(如:纹理、颜色、形状、大小等)

  • 假设人类小孩大脑的工作机制,是将不同维度的特征用数字表达并存储,这些维度的特征值就是
    向量了。

  • 当人类小孩看到新的苹果,大脑也会将新苹果的特征提取为向量。

  • 大苹果、小苹果,从颜色、大小、形状、纹理等等维度是很相似的,显然,把这些苹果抽象成多个向量,这些向量在向量空间中的距离肯定是很近的。
  • 这就是信息向量化,词的向量化就是信息向量化的一种。

二、如何把词转换为向量

在自然语言处理任务中,词向量(Word Embedding)是表示自然语言里单词的一种方法,即把每个词都表示为一个N维空间内的点,即一个高维空间内的向量。通过这种方法,实现把自然语言计算转换为向量计算。

如图 所示的词向量计算任务中,先把每个词(如queen,king等)转换成一个高维空间的向量,这些向量在一定意义上可以代表这个词的语义信息。再通过计算这些向量之间的距离,就可以计算出词语之间的关联关系,从而达到让计算机像计算数值一样去计算自然语言的目的。

因此,大部分词向量模型都需要回答两个问题:

  • 1.如何把词转换为向量?
    自然语言单词是离散信号,比如“香蕉”,“橘子”,“水果”在我们看来就是3个离散的词。
    如何把每个离散的单词转换为一个向量?
  • 2. 如何让向量具有语义信息 ?
    比如,我们知道在很多情况下,“香蕉”和“橘子”更加相似,而“香蕉”和“句子”就没有那么相似,同时“香蕉”和“食物”、“水果”的相似程度可能介于“橘子”和“句子”之间。
    那么,我们该如何让词向量具备这样的语义信息?

三、如何把词转换为向量进阶

自然语言单词是离散信号,比如“我”、“ 爱”、“人工智能”。如何把每个离散的单词转换为一个向量?通常情况下,我们可以维护一个如 图2 所示的查询表。表中每一行都存储了一个特定词语的向量值,每一列的第一个元素都代表着这个词本身,以便于我们进行词和向量的映射(如“我”对应的向量值为 [0.3,0.5,0.7,0.9,-0.2,0.03] )。给定任何一个或者一组单词,我们都可以通过查询这个excel,实现把单词转换为向量的目的,这个查询和替换过程称之为Embedding Lookup。

上述过程也可以使用一个字典数据结构实现。事实上如果不考虑计算效率,使用字典实现上述功能是个不错的选择。然而在进行神经网络计算的过程中,需要大量的算力,常常要借助特定硬件(如GPU)满足训练速度的需求。GPU上所支持的计算都是以张量(Tensor)为单位展开的,因此在实际场景中,我们需要把Embedding Lookup的过程转换为张量计算,如 图所示。

假设对于句子"我,爱,人工,智能",把Embedding Lookup的过程转换为张量计算的流程如下:

  • 1.通过查询字典,先把句子中的单词转换成一个ID(通常是一个大于等于0的整数),这个单词到ID的映射关系可以根据需求自定义(如图3中,我=>1, 人工=>2,爱=>3,…)。

  • 2.得到ID后,再把每个ID转换成一个固定长度的向量。假设字典的词表中有5000个词,那么,对于单词“我”,就可以用一个5000维的向量来表示。由于“我”的ID是1,因此这个向量的第一个元素是1,其他元素都是0([1,0,0,…,0]);同样对于单词“人工”,第二个元素是1,其他元素都是0。用这种方式就实现了用一个向量表示一个单词。由于每个单词的向量表示都只有一个元素为1,而其他元素为0,因此我们称上述过程为One-Hot Encoding。

  • 3.经过One-Hot Encoding后,句子“我,爱,人工,智能”就被转换成为了一个形状为 4×5000的张量,记为V。在这个张量里共有4行、5000列,从上到下,每一行分别代表了“我”、“爱”、“人工”、“智能”四个单词的One-Hot Encoding。最后,我们把这个张量V和另外一个稠密张量W相乘,其中W张量的形状为5000 × 128(5000表示词表大小,128表示每个词的向量大小)。经过张量乘法,我们就得到了一个4×128的张量,从而完成了把单词表示成向量的目的。

三、如何让向量具有语义信息

得到每个单词的向量表示后,我们需要思考下一个问题:

比如在多数情况下,“香蕉"和"橘子"更加相似,而"香蕉"和"句子"就没有那么相似;同时,“香蕉"和"食物”、“水果”的相似程度可能介于"橘子"和"句子"之间。

那么如何让存储的词向量具备这样的语义信息呢?

我们先学习自然语言处理领域的一个小技巧。在自然语言处理研究中,科研人员通常有一个共识:使用一个单词的上下文来了解这个单词的语义,

比如:

  • “苹果手机质量不错,就是价格有点贵。”
  • “这个苹果很好吃,非常脆。”
  • “菠萝质量也还行,但是不如苹果支持的APP多。”

在上面的句子中,我们通过上下文可以推断出第一个“苹果"指的是苹果手机,第二个“苹果"指的是水果苹果,而第三个“菠萝"指的应该也是一个手机。

事实上,在自然语言处理领域,使用上下文描述一个词语或者元素的语义是一个常见且有效的做法。我们可以使用同样的方式训练词向量,让这些词向量具备表示语义信息的能力。

2013年,Mikolov提出的经典word2vec算法就是通过上下文来学习语义信息。word2vec包含两个经典模型:CBow (Continuous Bag-of-Words)和Skip-gram

  • CBoW:通过上下文的词向量推理中心词。
  • Skip-gram:根据中心词推理上下文。

  • 在CBOW中,先在句子中选定一个中心词,并把其它词作为这个中心词的上下文。如图CBOW所示,把"spiked"作为中心词,把"Pineapples、are、and、yellow"作为中心词的上下文。在学习过程中,使用上下文的词向量推理中心词,这样中心词的语义就被传递到上下文的词向量中,如"spiked→pineapple”,从而达到学习语义信息的目的。

  • 在Skip-gram中,同样先选定一个中心词,并把其他词作为这个中心词的上下文。如图Skip-gram所示,把"spiked"作为中心词,把"Pineapples、are、and、yellow"作为中心词的上下文。不同的是,在学习过程中,使用中心词的词向量去推理上下文,这样上下文定义的语义被传入中心词的表示中,如"pineapple - spiked",从而达到学习语义信息的目的。

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

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

相关文章

flowable工作流看这一篇就够了(高级篇 下)

目录 三、候选人和候选人组 3.1、候选人 3.1.1、定义流程图 3.1.2、部署和启动流程实例 3.1.3、任务的查询 3.1.4、任务的拾取 3.1.5、任务的归还 3.1.6、任务的交接 3.1.7、任务的完成 3.2、候选人组 3.2.1、管理用户和组 用户管理 Group管理 为用户分配组 3.2…

深入理解网络 I/O:单 Group 混杂模式|多 Group 主从模式

🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏&…

Linux 常用的操作命令

我们习惯的使用Windows,安装软件进行使用,比如 WPS,浏览器,一些工具,但是在Linux上就需要用命令去操作,也可以使用像Ubuntu 和 CentOS这类的可视化面板 Linux系统是开源的,所以开发人员可以反复的发现Bug以…

1231. 航班时间(整行字符串输入:getline(cin,line))

题目: 1231. 航班时间 - AcWing题库 输入样例: 3 17:48:19 21:57:24 11:05:18 15:14:23 17:21:07 00:31:46 (1) 23:02:41 16:13:20 (1) 10:19:19 20:41:24 22:19:04 16:41:09 (1)输出样例: 04:09:05 12:10:39 14:22:05 思路: …

selenium 做 Web 自动化,鼠标当然也要自动化!

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

docker安装Prometheus

docker安装Prometheus Docker搭建Prometheus监控系统 环境准备(这里的环境和版本是经过测试没有问题,并不是必须这个版本) 主机名IP配置系统说明localhost随意2核4gCentOS7或者Ubuntu20.0.4docker版本23.0.1或者24.0.5,docker-compose版本1.29 安装Docker Ubuntu20.0.4版本…

STM32——串口

串口发送/接收函数: HAL_UART_Transmit(); 串口发送数据,使用超时管理机制 HAL_UART_Receive(); 串口接收数据,使用超时管理机制 HAL_UART_Transmit_IT(); 串口中断模式发送 HAL_UART_Receive_IT(); 串口中断模式接收 HAL_UART_Tran…

Netty常见的设计模式

简介 设计模式在软件开发中起着至关重要的作用,它们是解决常见问题的经过验证的解决方案。而Netty作为一个优秀的网络应用程序框架,同样也采用了许多设计模式来提供高性能和可扩展性。在本文中,我们将探讨Netty中使用的一些关键设计模式&…

云开发微信小程序实战

随着移动互联网的快速发展,微信小程序作为一种轻量级的应用程序,逐渐成为了企业开展业务和提升用户体验的重要工具。而云开发则为企业提供了高效、安全、可靠的后台服务,使得小程序的开发和维护更加便捷。本文将详细介绍如何使用微信小程序与…

返回零长度的数组或集合,而不是null

返回零长度的数组或集合而不是 null 是一种良好的编程实践,可以提高代码的可靠性和可读性。以下是一个例子,展示了返回零长度的数组或集合的情况: import java.util.ArrayList; import java.util.List;public class StudentManager {private…

牛客第一期

1.创建动态数组 #include <iostream> using namespace std;int main() {int n; cin>>n; int *pnew int [n]; int i0; for(i0;i<n;i) {*(pi)ni; } int j0; for(j0;j<n;j) {printf("%d ",*(pj)); } } #include<bits/stdc.h> using namespace s…

网站提示“不安全”

当你在浏览网站时&#xff0c;有时可能会遇到浏览器提示网站不安全的情况。这通常是由于网站缺乏SSL证书所致。那么&#xff0c;从SSL证书的角度出发&#xff0c;我们应该如何解决这个问题呢&#xff1f; 首先&#xff0c;让我们简单了解一下SSL证书。SSL证书是一种用于保护网站…

python实战教学之python版“张万森,好久不见”

前言 WINTER IS COMING 最近《一闪一闪亮星星》的电影在火热预售中&#xff0c;家人们抢到票了嘛&#xff0c;前两天小编写了一篇“张万森&#xff0c;下雪了”的文章后&#xff0c;收到了不少小伙伴的反馈&#xff1a;“代码的运行结果只有文字&#xff0c;没有雪花啊”&#…

OceanBase数据库部署

文章目录 OceanBase基础概念集群、Zone和OB ServerRootService总控服务&#xff08;RS&#xff09;多租户机制&#xff1a;资源隔离&#xff0c;数据隔离每个租户拥有若干资源池&#xff08;Resource Pool&#xff09; 部署形式部署流程OceanBase客户端工具 学习体验部署实现 O…

VSCode配置代码片段,提升效率必备!

1.点击文件—> 首选项------>配置用户代码片段 2、新建用户代码片段 3、以js的控制台输出为例 {//片段名称"console.log": {"prefix": "cls",//呼出命令"body": ["console.log($1)"//具体片段],"descriptio…

netty-daxin-3(rpc远程调用)

文章目录 nettyRpcObjectEncoder 与 ObjectDecoderjdk动态代理回顾Rpc调用过程简析服务端客户端 nettyRpc ObjectEncoder 与 ObjectDecoder ObjectEncoder继承自MessageToByteEncoder<Serializable>&#xff0c;它内部使用ByteBufOutputStream包装ByteBuf对象&#xff…

vue3项目中使用vue-cropper实现截图效果

前言&#xff1a; 自用&#xff01;&#xff01;&#xff01; 插件文档链接&#xff1a; https://www.npmjs.com/package/vue-cropper 使用步骤&#xff1a; 1、安装 npm install vue-cropper 2、项目中引入&#xff08;全局引入&#xff09;&#xff1b;文档中有介绍如何局…

怎么解决bash: composer: command not found问题

是不是遇到过bash: composer: command not found问题&#xff0c;怎么解决呢&#xff1f;下面由composer教程栏目给大家来详细介绍该问题的解决方法。 1、先看报错 2、由于错误的原因&#xff0c;安装很多东西都失败了。网上有的说是环境变量的问题&#xff0c;又一个个找也没…

DS考研真题总结——客观题(1)

开始整理真题中的客观小题&#xff0c;至于和算法有关的大题统一最后整理~ 定义背诵&#xff1a;数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效…

spring面试:二、bean的生命周期和循环引入问题(三级缓存、@Lazy)

bean的生命周期 Spring容器在进行实例化时&#xff0c;会将xml配置的的信息封装成一个BeanDefinition对象&#xff0c;Spring根据BeanDefinition来创建Bean对象&#xff0c;里面有很多的属性用来描述Bean。 其中比较重要的是&#xff1a; beanClassName&#xff1a;bean 的类…