|
@@ -4,42 +4,37 @@ import paddle.nn.functional as F
|
|
|
import numpy as np
|
|
|
|
|
|
class DSSMLayer(nn.Layer):
|
|
|
- def __init__(self, feature_num=5, embedding_dim=8, output_dim=16,
|
|
|
+ def __init__(self, feature_nums=[5,5,5,5,5], embedding_dim=8, output_dim=16,
|
|
|
hidden_layers=[64, 32], hidden_acts=["relu", "relu"]):
|
|
|
super(DSSMLayer, self).__init__()
|
|
|
|
|
|
- self.feature_num = feature_num
|
|
|
+ self.feature_num = len(feature_nums)
|
|
|
self.embedding_dim = embedding_dim
|
|
|
self.output_dim = output_dim
|
|
|
# 第一层的输入维度是所有特征的embedding拼接
|
|
|
self.hidden_layers = [feature_num * embedding_dim] + hidden_layers + [output_dim]
|
|
|
self.hidden_acts = hidden_acts
|
|
|
-
|
|
|
- # 为每个特征创建embedding层
|
|
|
+
|
|
|
+
|
|
|
+ # 为每个特征创建对应维度的Embedding层
|
|
|
self.left_embeddings = nn.LayerList([
|
|
|
- nn.Linear(
|
|
|
- 1,
|
|
|
- embedding_dim,
|
|
|
+ nn.Embedding(
|
|
|
+ num_embeddings=feature_nums[i],
|
|
|
+ embedding_dim=embedding_dim,
|
|
|
weight_attr=paddle.ParamAttr(
|
|
|
initializer=paddle.nn.initializer.XavierNormal()
|
|
|
- ),
|
|
|
- bias_attr=paddle.ParamAttr(
|
|
|
- initializer=paddle.nn.initializer.Constant(value=0.0)
|
|
|
)
|
|
|
- ) for _ in range(feature_num)
|
|
|
+ ) for i in range(self.feature_num)
|
|
|
])
|
|
|
|
|
|
self.right_embeddings = nn.LayerList([
|
|
|
- nn.Linear(
|
|
|
- 1,
|
|
|
- embedding_dim,
|
|
|
+ nn.Embedding(
|
|
|
+ num_embeddings=feature_nums[i],
|
|
|
+ embedding_dim=embedding_dim,
|
|
|
weight_attr=paddle.ParamAttr(
|
|
|
initializer=paddle.nn.initializer.XavierNormal()
|
|
|
- ),
|
|
|
- bias_attr=paddle.ParamAttr(
|
|
|
- initializer=paddle.nn.initializer.Constant(value=0.0)
|
|
|
)
|
|
|
- ) for _ in range(feature_num)
|
|
|
+ ) for i in range(self.feature_num)
|
|
|
])
|
|
|
|
|
|
# 左视频塔
|