# torchrec 相关实现介绍
https://docs.pytorch.org/tutorials/intermediate/torchrec_intro_tutorial.html
https://blog.csdn.net/lovechris00/article/details/147542184
# TorchRec 简介
torchrec:为构建可扩展和高效的使用 embeddings 的推荐系统的 pytorch 库
TorchRec is a PyTorch library tailored for building scalable and efficient recommendation systems using embeddings.
## Embeddings
推荐系统中的分类特征(如帖子、用户、广告等)通常具有极大的基数(cardinality)。
为了表示这些实体并建模它们之间的关系,embeddings(嵌入)在机器学习中会被频繁使用。embeddings 实质是高维空间中的实数向量,用于表示复杂数据(如词语、图像或用户)的语义信息。
### 推荐系统中的 embeddings
您可能会问:这些嵌入最初是如何生成的?embeddings 以 嵌入表(Embedding Table) 中的行形式存在,也称为嵌入权重。之所以如此,是因为 embeddings(或嵌入表权重)会像模型的其他权重一样,通过梯度下降进行训练!
Embedding Table 本质上是一个用于存储 embeddings 的大型矩阵,具有两个维度 (B, N):
* B:表中存储的嵌入数量
* N:每个嵌入的维度数(N 维嵌入)
Embedding Table 的输入表示嵌入查找操作,用于检索特定索引或行对应的 embeddings。在大型推荐系统中,唯一 ID 不仅用于标识特定用户,还用于跨实体(如帖子和广告)作为各自嵌入表的查找索引。
推荐系统中 embeddings 的训练流程如下:
1. 将 input / lookup(作为唯一 ID)送入模型。ID 会通过哈希映射到嵌入表的总大小,以避免 ID 超出表行数的问题。
2. 检索嵌入并进行 池化(pooling),例如取 embeddings 的和或均值。这是因为每个样本可能包含可变数量的嵌入,而模型需要固定形状的输入。
3. 将 embeddings 与模型其他部分结合以生成预测,例如广告的点击率(CTR)。
4. 根据预测结果和样本标签计算损失,并通过梯度下降和反向传播更新模型的所有权重,包括与该样本相关的 embeddings 权重。
这些 embeddings 对于表示用户、帖子、广告等分类特征至关重要,能够捕捉实体间的关系并生成优质推荐。深度学习推荐模型(DLRM) 论文详细讨论了在推荐系统中使用 Embedding Table 的技术细节。
### PyTorch 中的 embeddings
PyTorch 提供以下嵌入类型:
* torch.nn.Embedding:嵌入表,前向传播直接返回嵌入向量本身。
* torch.nn.EmbeddingBag:嵌入表,前向传播返回经过池化(如求和或均值)的嵌入,也称为 池化嵌入(Pooled Embeddings)。
下面简要演示如何通过向嵌入表传入索引执行嵌入查找:
num_embeddings, embedding_dim = 10, 4
# 初始化嵌入表
weights = torch.rand(num_embeddings, embedding_dim)
print("权重:", weights)
# 传入预生成的权重(仅作示例,通常权重会随机初始化)
embedding_collection = torch.nn.Embedding(
num_embeddings, embedding_dim, _weight=weights
)
embedding_bag_co