聊聊Embedding(嵌入向量)

聊聊,embedding,嵌入,向量 · 浏览次数 : 116

小编点评

**深度学习中的嵌入** **什么是嵌入?** 嵌入是机器学习中将数据转换为向量的方式,向量是向量数据类型的数据表示。嵌入可以用于机器学习中的各种任务,例如自然语言处理、图像处理、推荐系统等。 **如何进行嵌入?** 嵌入的具体方法取决于数据的类型。常见的方法包括: * **词嵌入:**用于处理词语或短语。 * **物品嵌入:**用于处理商品或物品。 * **人物嵌入:**用于处理人物信息。 * **动作嵌入:**用于处理动作或活动。 * **书籍嵌入:**用于处理书籍或文章。 * **电影嵌入:**用于处理电影或电视节目。 **嵌入的更新** 嵌入在不断更新中,由最初的表现单一的静态向表现更丰富的动态延伸和拓展。例如,词嵌入在预训练过程中可以从独热编码转换为数值向量,数值向量可以用于各种机器学习任务。 **ELMo (端到端语言模型) 是嵌入的一种重要方法,它可以从静态到动态地生成词嵌入,克服了词义的多义问题。** **总结** 嵌入是机器学习中的一个重要方法,可以将数据转换为向量,并用于机器学习中的各种任务。嵌入的更新方法取决于数据的类型,常见的方法包括词嵌入、物品嵌入、人物嵌入、动作嵌入、书籍嵌入、电影嵌入。

正文

摘要自《深入浅出Embedding》一问。具体详细内容请移步该书。

概述

简单来说,嵌入是用向量表示一个物体,这个物体可以是一个单词、一条语句、一个序列、一件商品、一个动作、一本书、一部电影等,可以说嵌入(Embedding)涉及机器学习、深度学习的绝大部分对象。这些对象是机器学习和深度学习中最基本、最常用、最重要的对象,正因如此,如何有效表示、学习这些对象就显得非常重要。
Embedding本身也在不断更新,由最初表现单一的静态向表现更丰富的动态延伸和拓展。具体表现为由静态的Word Embedding、Item Embedding、Graph Embedding、Categorical variables Embedding向ELMo、Transformer、GPT、BERT、XLNet、ALBERT等动态的预训练模型延伸。

Word Embedding

因机器无法直接接收单词、词语、字符等标识符(token),所以可以采用整型数字标识或编码来处理,目前常用独热编码(One-Hot Encoding)来表示。这种编码方法虽然方便,但非常稀疏,属于硬编码,且无法重载更多信息。此后,人们想到用数值向量或标识符嵌入(Token Embedding)来表示,即通常说的词嵌入(Word Embedding),又称为分布式表示。
不过Word Embedding方法真正流行起来,还要归功于Google的word2vec,word2vec,是一群用来产生词向量的相关模型。

word2vec

从文本、标识符、独热编码到向量表示的整个过程,如下:
image.png
word2vec有两种模型:

  • CBOW模型
  • Skip-gram模型

两种模型的区别如下:
image.png
CBOW 模型是从上下文的多个单词预测中间的单词(目标词);而 skip-gram 模型则从中间的单词(目标词)预测上下文的多个单词。
具体可参考:深入浅出理解word2vec模型 (理论与源码分析)

预训练流程

预训练模型(如ELMo、BERT等)的一般流程如图所示,其中微调是一个重要环节:
image.png

ELMo

word2vec实现了从独热编码到Word Embedding的一大进步,通过word2vec转换后,一个单词对应一个向量,单词的表现更丰富了,甚至一些相近的词在空间上也有明显的表现。
但word2vec还没有解决一词多义的问题,更不用说解决单词随环境变化而变化的问题。
多义词是自然语言中经常出现的现象,也是语言灵活性和高效性的一种体现。比如“Don't trouble trouble”,可翻译为“别烦恼了”,其中trouble这个词就属于一词多义。如果用word2vec模型训练后,trouble只对应一个向量,显然无法区别这个trouble的两个含义。而一词多义,不论是在英语、中文还是在其他语言中,都是普遍存在的问题。ELMo的提出意味着我们从词嵌入(Word Embedding)时代进入了语境词嵌入(Contextualized Word-Embedding)时代!
ELMo的核心思想主要体现在深度上下文(Deep Contextualized)上。与静态的词嵌入不同,ELMo除提供临时词嵌入之外,还提供生成这些词嵌入的预训练模型,所以在实际使用时,EMLo可以基于预训练模型,根据实际上下文场景动态调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题。所以ELMo实现了一个由静态到动态的飞跃。
EMLo的实现主要涉及语言模型(Language Model),当然,它使用的语言模型有点特别,因为它首先把输入转换为字符级别的Embedding,根据字符级别的Embedding来生成上下文无关的Word Embedding,然后使用双向语言模型(如Bi-LSTM)生成上下文相关的Word Embedding。
ELMo整体模型结构如下:
image.png
ELMo的优点:

  • 实现从单纯的词嵌入(Word Embedding)到情景词嵌入(Contextualized Word Embedding)的转变;
  • 实现预训练模型从静态到动态的转变。

ELMo的缺点:
ELMo模型可以根据上下文更新词的特征表示,实现了词向量由静态向动态的转变。不过因ELMo依赖LSTM的架构,导致其训练只能按部就班,严格遵守从左到右或从右到左的次序进行训练,所以在面对特大语料库时将非常耗时。此外,LSTM虽然也有记忆功能,但其长期记忆的效果并不理想。
具体可参考《深入浅出Embedding》一书第6章。

BERT

BERT预训练模型很好的解决了并发以及大规模训练语料库下的性能问题。BERT的整体架构如图所示,它采用了Transformer中的Encoder部分。
image.png
Trm指Transformer的Encoder模块,如下所示:
image.png
BERT更擅长处理自然语言理解任务(NLU),使用上下文预测单词。

GPT

GPT预训练的方式和传统的语言模型一样,通过上文,预测下一个单词。它使用了Transformer的Decoder部分。GPT的整体架构如下:
image.png
其中Trm表示Decoder模块,在同一水平线上的Trm表示在同一个单元,E i表示词嵌入,那些复杂的连线表示词与词之间的依赖关系,显然,GPT要预测的词只依赖上文。GPT的Decoder模块如下:
image.png
GPT模型采用了传统的语言模型进行训练,即使用单词的上文预测单词。因此,GPT更擅长处理自然语言生成任务(NLG)。

小结

基于Transformer的Encoder模块得到BERT预训练模型,基于Transformer的Decoder得到GPT系列预训练模型。BERT采用MLM,而GPT系列采用LM,它们各有优势,都在很多领域取得很好的效果。

与聊聊Embedding(嵌入向量)相似的内容:

聊聊Embedding(嵌入向量)

摘要自《深入浅出Embedding》一问。具体详细内容请移步该书。 ## 概述 简单来说,嵌入是用向量表示一个物体,这个物体可以是一个单词、一条语句、一个序列、一件商品、一个动作、一本书、一部电影等,可以说嵌入(Embedding)涉及机器学习、深度学习的绝大部分对象。这些对象是机器学习和深度学习中

聊聊GLM-4-9B开源模型的微调loss计算

概述 Github官方地址:GLM-4 网上已经有很多关于微调的文章,介绍各种方式下的使用,这里不会赘述。我个人比较关心的是微调时的loss计算逻辑,这点在很多的文章都不会有相关的描述,因为大多数人都是关心如何使用之类的应用层,而不是其具体的底层逻辑,当然咱也说不清太底层的计算。 可了解其它loss

聊聊一个差点被放弃的项目以及近期的开源计划

前言 自从 StarBlog 和 SiteDirectory 之后,我还没写新的关于开源项目的系列,最近又积累了很多想法,正好写一篇博客来总结一下。 关于差点被放弃的项目,就是最近一直在做的单点认证(IdentityServerLite) IdentityServerLite 开发这个项目的起因,是

聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用

哈喽大家好,我是咸鱼。 最近写的一个 Python 项目用到了 jwcrypto 这个库,这个库是专门用来处理 JWT 的,JWT 全称是 JSON Web Token ,JSON 格式的 Token。 今天就来简单入门一下 JWT。 官方介绍:https://jwt.io/introduction

聊聊MySQL是如何处理排序的

在MySQL的查询中常常会用到 order by 和 group by 这两个关键字,它们的相同点是都会对字段进行排序,那查询语句中的排序是如何实现的呢?

聊聊 Linux iowait

哈喽大家好,我是咸鱼。 我们在使用 top 命令来查看 Linux 系统整体 CPU 使用情况的时候,往往看的是下面这一列: %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 68.0 wa, 0.0 hi, 0.0 si, 0.0 st 其中,man 手册解释 w

聊聊Mybatis框架原理

好久没有写博客了。最近工作中封装了一个类似ORM框架的东西。大概的原理就是将Excel数据初始化到本地sqlite数据库后,通过json配置文件,对数据库的数据做增删改查等操作。 其实大概的思考了下,就是半ORM框架mybatis的逻辑,只是我们自己封装的简陋蛮多。想想有现成的轮子没用,反而是自己写

聊聊Spring的工厂方法与FactoryBean

概述 工厂方法是比较常见,常用的一种设计模式。FactoryBean是Spring提供的一种Bean注入IOC容器的方式。 工厂方法 在做日常开发时,一般都会避免直接new对象,而且将new的操作丢给IOC容器,但对于第三方系统的集成,我们不太好直接丢给IOC容器,此时可以通过工厂模式, 提供一个工

聊聊Spring Cloud Alibaba解决方案组件

在java的微服务解决方案中,最先出现目前应用比较多的就是spring cloud netfix系列,但是随着阿里的强劲支持,spring cloud alibaba解决方案逐渐可以替代前者,当然dubbo也是不容小觑的。之前面试几家公司应用的都是spring cloud alibaba,随着我自己

聊聊Spring Cloud Alibaba Sentinel的限流

Spring Cloud Alibaba Sentinel限流功能概览,目前先整理一版,东西有点多,想慢慢打开;后续继续更新......