| 
					
				 | 
			
			
				@@ -51,11 +51,9 @@ class StaticModel(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             hidden_acts=self.hidden_acts 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if is_infer: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             left_features = input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            left_vec = dssm_model(left_features) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            left_vec = dssm_model(left_features,None,is_infer=True) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             self.inference_target_var = left_vec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             fetch_dict = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 'left_vector': left_vec 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -63,42 +61,40 @@ class StaticModel(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return fetch_dict 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             label,left_features, right_features = input 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # 获取相似度和特征向量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sim_score, left_vec, right_vec = dssm_model(left_features, right_features) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.inference_target_var = sim_score 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.left_vector = left_vec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self.right_vector = right_vec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # 获取相似度和特征向量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        sim_score, left_vec, right_vec = dssm_model(left_features, right_features) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self.inference_target_var = sim_score 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self.left_vector = left_vec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self.right_vector = right_vec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # 计算损失 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # 使用带margin的二元交叉熵损失 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pos_mask = paddle.cast(label > 0.5, 'float32') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            neg_mask = 1.0 - pos_mask 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            positive_loss = -pos_mask * paddle.log(paddle.clip(sim_score, 1e-8, 1.0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            negative_loss = -neg_mask * paddle.log(paddle.clip(1 - sim_score + self.margin, 1e-8, 1.0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            loss = positive_loss + negative_loss 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            avg_cost = paddle.mean(loss) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self._cost = avg_cost 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # 计算损失 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # 使用带margin的二元交叉熵损失 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        pos_mask = paddle.cast(label > 0.5, 'float32') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        neg_mask = 1.0 - pos_mask 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        positive_loss = -pos_mask * paddle.log(paddle.clip(sim_score, 1e-8, 1.0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        negative_loss = -neg_mask * paddle.log(paddle.clip(1 - sim_score + self.margin, 1e-8, 1.0)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        loss = positive_loss + negative_loss 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        avg_cost = paddle.mean(loss) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        self._cost = avg_cost 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # 计算accuracy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            predictions = paddle.cast(sim_score > 0.5, 'float32') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            accuracy = paddle.mean(paddle.cast(paddle.equal(predictions, label), 'float32')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        # 计算accuracy 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        predictions = paddle.cast(sim_score > 0.5, 'float32') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        accuracy = paddle.mean(paddle.cast(paddle.equal(predictions, label), 'float32')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fetch_dict = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            'loss': avg_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            'accuracy': accuracy, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #'similarity': sim_score, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #'left_vector': left_vec, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            #'right_vector': right_vec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return fetch_dict 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fetch_dict = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'loss': avg_cost, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                'accuracy': accuracy, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #'similarity': sim_score, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #'left_vector': left_vec, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                #'right_vector': right_vec 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return fetch_dict 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def create_optimizer(self, strategy=None): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         optimizer = paddle.optimizer.Adam( 
			 |