|
@@ -142,8 +142,9 @@ class DSSMLayer(nn.Layer):
|
|
|
self._right_tower.append(act)
|
|
|
|
|
|
def _process_features(self, features, embeddings):
|
|
|
- # 将每个特征转换为embedding
|
|
|
embedded_features = []
|
|
|
+
|
|
|
+ # 1. 处理视频静态特征 (使用Embedding)
|
|
|
for i in range(self.feature_num):
|
|
|
feature = paddle.slice(
|
|
|
features,
|
|
@@ -153,11 +154,35 @@ class DSSMLayer(nn.Layer):
|
|
|
)
|
|
|
feature = paddle.cast(feature, dtype='int64')
|
|
|
embedded = embeddings[i](feature)
|
|
|
-
|
|
|
embedded_features.append(embedded)
|
|
|
|
|
|
- # 将所有embedding连接起来
|
|
|
-
|
|
|
+ # 2. 处理长短期和品类表现的分桶特征 (使用Embedding)
|
|
|
+ start_idx = self.feature_num
|
|
|
+ for i in range(self.stat_features_num):
|
|
|
+ feature = paddle.slice(
|
|
|
+ features,
|
|
|
+ axes=[1],
|
|
|
+ starts=[start_idx + i],
|
|
|
+ ends=[start_idx + i + 1]
|
|
|
+ )
|
|
|
+ feature = paddle.cast(feature, dtype='int64')
|
|
|
+ embedded = embeddings[self.feature_num + i](feature)
|
|
|
+ embedded_features.append(embedded)
|
|
|
+
|
|
|
+ # 3. 处理原始值特征 (使用Linear)
|
|
|
+ start_idx = self.feature_num + self.stat_features_num
|
|
|
+ for i in range(self.stat_features_num * 2):
|
|
|
+ feature = paddle.slice(
|
|
|
+ features,
|
|
|
+ axes=[1],
|
|
|
+ starts=[start_idx + i],
|
|
|
+ ends=[start_idx + i + 1]
|
|
|
+ )
|
|
|
+ feature = paddle.cast(feature, dtype='float32')
|
|
|
+ embedded = embeddings[self.feature_num + self.stat_features_num + i](feature)
|
|
|
+ embedded_features.append(embedded)
|
|
|
+
|
|
|
+ # 将所有embedded特征连接起来
|
|
|
return paddle.concat(embedded_features, axis=1)
|
|
|
|
|
|
def forward(self, left_features, right_features, is_infer=False):
|