Embedding字面意思:嵌入
官方定义:Embedding是离散实例连续化的映射(了解)
简单来说,把现实事物转为计算机可以处理的向量

介绍现在主流的 Embedding 技术,主要分三大块:(了解一下即可)
经典的矩阵分解方法: SVD 方法等
基于内容的 embedding 方法:涉及到 NLP 相关的文本 embedidng 方法,包括静态向量 embedding(如 word2vec、GloVe 和 FastText)和动态向量 embedding(如 ELMo、GPT 和 BERT) 简单说吧,静态向量就是他是死的,固定的,而动态向量是活的,他可以解决一词多义问题,是结合上下文的,一个词有多种向量表示
基于 Graph 的 embedding 方法:包括浅层图模型(如 DeepWalk、Node2vec 和 Metapath2vec)和深度图模型(如基于谱的 GCN 和基于空间的 GraphSAGE)

Onehot
有多少个字,就得有多少维向量,假如有1万字,那么每个字向量就是1万维(常用的字可能不多,几千个左右,但是按照词的概念来看,常用的词可能就有十几万了)。于是就出来了连续向量表示,比如用100维的实数向量来表示一个字,这样就大大降低了维度,降低了过拟合的风险,等等。初学者是这样说的,不少专家也是这样说的。但这是错误的

万字详解 mongodb 万字详解 embedding_语言模型

这是一个以2x6的one hot矩阵的为输入、中间层节点数为3的全连接神经网络层,但你看右边,不就相当于在wijwij这个矩阵中,取出第1、2行,相当于字向量的查表(从表中找出对应字的向量)
这就是所谓的Embedding层,Embedding层就是以one hot为输入、中间层节点为字向量维数的全连接层!而这个全连接层的参数,就是一个“字向量表”!从这个层面来看,字向量没有做任何事情,字向量就是one hot的全连接层的参数

那字向量作用是什么呢,如果没有句向量,字向量就是onehot,如果矩阵相乘,运算量是非常大的,但有了这个全连接层,运算就可以简化为查表操作了

刚才说了字向量是全连接层的参数,那他是怎么得到的呢?就是语言模型训练出来的。前面所说的word2vec,bert,gcn等都是这样的
所谓语言模型,就是通过前n个字预测下一个字的概率,就是一个多分类器而已,我们输入one hot,然后连接一个全连接层,然后再连接若干个层,最后接一个softmax分类器,就可以得到语言模型了,然后将大批量文本输入训练就行了,最后得到第一个全连接层的参数,就是字、词向量表

语言模型先通过最简单的onehot方式把文本向量化(如bert里的convert_tokens_to_id),然后再通过多次的正向反向传播来不断的优化词向量的表示,在word2vec中就是skip和cbow,在bert里就是层层的transformer结构,在gcn里就是谱图卷积的方法

Embedding不是有维度吗,比如在bert里是768,当我们把它加上线性层,就会转为标签种类的维度,再加上softmax,就成了这样的[0.98,0.02],这里我们假设这个是情感分析任务,有两种标签,选取其中最大的概率,我们就认为预测值就属于这一种,比如这里就属于第1种