快捷方式

torchrec.models

torchrec.models.deepfm

class torchrec.models.deepfm.DenseArch(in_features: int, hidden_layer_size: int, embedding_dim: int)

基类: Module

处理 DeepFMNN 模型的稠密特征。输出层大小与 EmbeddingBagCollection 嵌入的 embedding_dimension 相同。

参数:
  • in_features (int) – 稠密输入特征的维度。

  • hidden_layer_size (int) – DenseArch 中隐藏层的尺寸。

  • embedding_dim (int) – 与 sparseArch 的 embedding_dimension 相同。

  • device (torch.device) – 默认计算设备。

示例

B = 20
D = 3
in_features = 10
dense_arch = DenseArch(
    in_features=in_features, hidden_layer_size=10, embedding_dim=D
)

dense_arch_input = torch.rand((B, in_features))
dense_embedded = dense_arch(dense_arch_input)
forward(features: Tensor) Tensor
参数:

features (torch.Tensor) – 大小为 B X num_features

返回:

大小为 B X D 的输出张量。

返回类型:

torch.Tensor

training: bool
class torchrec.models.deepfm.FMInteractionArch(fm_in_features: int, sparse_feature_names: List[str], deep_fm_dimension: int)

基类: Module

处理 SparseArch(sparse_features)和 DenseArch(dense_features)的输出,并根据 DeepFM 论文的外部来源应用通用 DeepFM 交互:https://arxiv.org/pdf/1703.04247.pdf

输出维度预计是 dense_features,D 的串联。

参数:
  • fm_in_features (int) – DeepFM 中 dense_module 的输入维度。例如,如果输入嵌入是 [randn(3, 2, 3), randn(3, 4, 5)],则 fm_in_features 应该为:2 * 3 + 4 * 5。

  • sparse_feature_names (List[str]) – F 的长度。

  • deep_fm_dimension (int) – DeepFM 架构中深度交互 (DI) 的输出。

示例

D = 3
B = 10
keys = ["f1", "f2"]
F = len(keys)
fm_inter_arch = FMInteractionArch(sparse_feature_names=keys)
dense_features = torch.rand((B, D))
sparse_features = KeyedTensor(
    keys=keys,
    length_per_key=[D, D],
    values=torch.rand((B, D * F)),
)
cat_fm_output = fm_inter_arch(dense_features, sparse_features)
forward(dense_features: Tensor, sparse_features: KeyedTensor) Tensor
参数:
  • dense_features (torch.Tensor) – 大小为 B X D 的张量。

  • sparse_features (KeyedJaggedTensor) – 大小为 F * D X B 的 KJT。

返回:

大小为 B X (D + DI + 1) 的输出张量。

返回类型:

torch.Tensor

training: bool
class torchrec.models.deepfm.OverArch(in_features: int)

基类: Module

最终架构 - 简单 MLP。输出只是一个目标。

参数:

in_features (int) – 交互架构的输出维度。

示例

B = 20
over_arch = OverArch()
logits = over_arch(torch.rand((B, 10)))
forward(features: Tensor) Tensor
参数:

features (torch.Tensor) –

返回:

大小为 B X 1 的输出张量。

返回类型:

torch.Tensor

training: bool
class torchrec.models.deepfm.SimpleDeepFMNN(num_dense_features: int, embedding_bag_collection: EmbeddingBagCollection, hidden_layer_size: int, deep_fm_dimension: int)

基类: Module

使用 DeepFM 架构的基本推荐系统模块。通过学习每个特征的池化嵌入来处理稀疏特征。通过将稠密特征投影到相同的嵌入空间中来学习稠密特征和稀疏特征之间的关系。通过这篇论文中提出的 deep_fm 来学习这些稠密特征和稀疏特征之间的交互:https://arxiv.org/pdf/1703.04247.pdf

该模块假设所有稀疏特征具有相同的嵌入维度(即,每个 EmbeddingBagConfig 使用相同的 embedding_dim)

以下符号在整个文档中用于模型

  • F:稀疏特征的数量

  • D:稀疏特征的 embedding_dimension

  • B:批次大小

  • num_features:稠密特征的数量

参数:
  • num_dense_features (int) – 输入稠密特征的数量。

  • embedding_bag_collection (EmbeddingBagCollection) – 用于定义 SparseArch 的嵌入包集合。

  • hidden_layer_size (int) – 稠密模块中使用的隐藏层大小。

  • deep_fm_dimension (int) – deep_fm 的深度交互模块中使用的输出层大小。

示例

B = 2
D = 8

eb1_config = EmbeddingBagConfig(
    name="t1", embedding_dim=D, num_embeddings=100, feature_names=["f1", "f3"]
)
eb2_config = EmbeddingBagConfig(
    name="t2",
    embedding_dim=D,
    num_embeddings=100,
    feature_names=["f2"],
)

ebc = EmbeddingBagCollection(tables=[eb1_config, eb2_config])
sparse_nn = SimpleDeepFMNN(
    embedding_bag_collection=ebc, hidden_layer_size=20, over_embedding_dim=5
)

features = torch.rand((B, 100))

#     0       1
# 0   [1,2] [4,5]
# 1   [4,3] [2,9]
# ^
# feature
sparse_features = KeyedJaggedTensor.from_offsets_sync(
    keys=["f1", "f3"],
    values=torch.tensor([1, 2, 4, 5, 4, 3, 2, 9]),
    offsets=torch.tensor([0, 2, 4, 6, 8]),
)

logits = sparse_nn(
    dense_features=features,
    sparse_features=sparse_features,
)
forward(dense_features: Tensor, sparse_features: KeyedJaggedTensor) Tensor
参数:
  • dense_features (torch.Tensor) – 稠密特征。

  • sparse_features (KeyedJaggedTensor) – 稀疏特征。

返回:

大小为 B X 1 的 logits。

返回类型:

torch.Tensor

training: bool
class torchrec.models.deepfm.SparseArch(embedding_bag_collection: EmbeddingBagCollection)

基类: Module

处理 DeepFMNN 模型的稀疏特征。对每个集合的所有 EmbeddingBag 和嵌入特征进行嵌入查找。

参数:

embedding_bag_collection (EmbeddingBagCollection) – 表示池化嵌入的集合。

示例

eb1_config = EmbeddingBagConfig(
    name="t1", embedding_dim=3, num_embeddings=10, feature_names=["f1"]
)
eb2_config = EmbeddingBagConfig(
    name="t2", embedding_dim=4, num_embeddings=10, feature_names=["f2"]
)

ebc = EmbeddingBagCollection(tables=[eb1_config, eb2_config])

#     0       1        2  <-- batch
# 0   [0,1] None    [2]
# 1   [3]    [4]    [5,6,7]
# ^
# feature
features = KeyedJaggedTensor.from_offsets_sync(
    keys=["f1", "f2"],
    values=torch.tensor([0, 1, 2, 3, 4, 5, 6, 7]),
    offsets=torch.tensor([0, 2, 2, 3, 4, 5, 8]),
)

sparse_arch(features)
forward(features: KeyedJaggedTensor) KeyedTensor
参数:

features (KeyedJaggedTensor) –

返回:

大小为 F * D X B 的输出 KJT。

返回类型:

KeyedJaggedTensor

training: bool

torchrec.models.dlrm

模块内容

文档

获取 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源