| 
					
				 | 
			
			
				@@ -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) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # 左视频塔 
			 |