关于Embedding的两种实现方式

目录

  • 言简意赅
  • 方式一
  • 方式二
  • 以DNN为例两种方式全部demo代码

言简意赅

假设现在有一段话:“我爱你中国”,在训练入模的时候,常用的方法分别有:onehot、embedding、hash,如果词表很大、特征很多,那么onehot之后会极其稀疏,hash也会有一定的hash冲突,所以这其中emb是最常用的方法。

我们希望,通过一个向量去表征每一个词,以“我爱你中国”为例,将其映射成为一个二维矩阵,矩阵的维度即(词表大小,emb维度)。

在这里插入图片描述

对于结构化数据而言,假设我们现在有2个特征分别为“性别”、“设备品牌”,这里规范下概念方便代码实现,如下图:

一个类别特征对应一个Field,但是对应多个Feature:在这里插入图片描述

所以按照上面的例子,field有两个,分别为“性别”、“设备品牌”,假设性别有男女2个,设备品牌有3个,它们则分别对应着feature,即特征值。按照emb的方式,我们需要对每一个feature都去学习一个向量表征。

下面方法均以此例为基础讲解

  • x1、x2分别代表“性别”、“设备品牌”,为特征域field
  • 经过编码后特征值分别为2个、3个,即0 1、0 1 2
  • batch_size = 3
  • emb_dim = 10

在这里插入图片描述

方式一

推荐使用方式二

思路:对于每一个特征field定义一个emb向量,然后进行拼接。

  • 1.定义每个特征field的词表大小,即有多少个特征值;
  • 2.为每一个特征field定义一个emb向量;
  • 3.拼接每个特征的emb向量。
'''   用于 spare field embedding   '''
def sparseFeature(feat, vocabulary_size, embed_dim):
    return {'spare': feat, 'vocabulary_size': vocabulary_size, 'embed_dim': embed_dim}

# 每个特征field的词表大小,即有多少个特征值
spare_feature_columns = [sparseFeature(x, data[x].max() + 1, emb_dim) for x in ['x1', 'x2']]
print('spare_feature_columns: ', spare_feature_columns)

# 为每一个特征field定义一个emb向量
embedding_layer = nn.ModuleDict({'embed_layer{}'.format(i): nn.Embedding(feat['vocabulary_size'], feat['embed_dim'])
                                 for i, feat in enumerate(spare_feature_columns)})
# 初始化权重
for i in range(len(spare_feature_columns)):    
    torch.nn.init.xavier_uniform_(embedding_layer['embed_layer{}'.format(i)].weight.data)

print('embedding_layer: ', embedding_layer)    

tensor = tensor.long()  # 转成long类型才能作为nn.embedding的输入
# 拼接每个特征的emb向量
sparse_emb = torch.cat([embedding_layer['embed_layer{}'.format(i)](tensor[:, i])
                          for i in range(tensor.shape[1])], dim=1)
                          
print(sparse_emb.shape)
print(sparse_emb)
'''spare_feature_columns:  [{'spare': 'x1', 'vocabulary_size': 2, 'embed_dim': 10}, {'spare': 'x2', 'vocabulary_size': 3, 'embed_dim': 10}]

embedding_layer:  ModuleDict(
  (embed_layer0): Embedding(2, 10)  
  (embed_layer1): Embedding(3, 10)
)

torch.Size([3, 20])

tensor([[ 0.4941,  0.3774, -0.5872, -0.5937,  0.6413, -0.6516,  0.6855, -0.2272, 
          0.3905, -0.5630, -0.0726,  0.6481,  0.0143,  0.0614,  0.0460, -0.2215,         
         -0.6515,  0.0103, -0.4000,  0.5353],        
        [ 0.4941,  0.3774, -0.5872, -0.5937,  0.6413, -0.6516,  0.6855, -0.2272,         
          0.3905, -0.5630,  0.5236,  0.3958, -0.1983,  0.4128, -0.0349, -0.5609,          
          0.4050, -0.4603,  0.3048, -0.6483],        
        [-0.2146, -0.4806,  0.2180,  0.3497,  0.1291,  -0.4531, -0.6532,  0.2385,          
          0.3290, -0.7043,  0.1372, -0.1554,  0.0272, -0.4285, -0.2797, -0.0988,          
          0.2602,  0.6084,  0.0169,  0.0712]])
'''

方式二

这个是比较推荐的方式,并且经过实践这个方式比第一种方式效果还要好。

在这里插入图片描述

所以offsets的作用其实就是找到每个特征值的emb向量。

所以思路为:获取每个特征的特征值,创建对应的offsets,再将两者相加,然后emb

  • 1.获取每个特征的特征值;
  • 2.定义offsets;
  • 3.创建emb。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以DNN为例两种方式全部demo代码

https://wangguisen.blog.csdn.net/article/details/125928623

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Graph Embedding是一种将图中的节点映射到低维向量空间的技术。通过Graph Embedding,我们可以将图中的节点表示为具有语义信息的向量,从而方便进行机器学习和数据挖掘任务。Graph Embedding可以用于图数据的可视化、节点分类、链接预测等任务。 在给定的引用中,提到了两种Graph Embedding的方法:DeepWalk和Struc2Vec。 1. DeepWalk是一种基于随机游走的Graph Embedding方法。它通过在图中进行随机游走来模拟节点之间的邻近关系,并将游走序列作为训练样本来学习节点的向量表示。具体步骤如下[^1]: - 从图中的每个节点开始,进行多次随机游走,得到游走序列。 - 使用Skip-gram模型训练节点的向量表示,使得节点的向量能够预测其周围节点出现的概率。 - 得到节点的向量表示,可以用于节点分类、链接预测等任务。 2. Struc2Vec是一种基于图的结构相似性的Graph Embedding方法。它通过考虑节点的邻居节点和邻居节点之间的关系来学习节点的向量表示。具体步骤如下: - 构建图的邻接矩阵,表示节点之间的连接关系。 - 使用随机游走的方式获取节点的邻居节点序列。 - 使用Skip-gram模型训练节点的向量表示,使得节点的向量能够预测其邻居节点出现的概率。 - 得到节点的向量表示,可以用于节点分类、链接预测等任务。 以上是关于Graph Embedding的简要介绍和两种常见方法的说明。如果你对具体的实现细节或其他相关问题感兴趣,请告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值