コード例 #1
0
ファイル: simbert.py プロジェクト: yyht/simbert
 def compute_loss_of_similarity(self, inputs, mask=None):
     _, _, y_pred, _ = inputs
     y_true = self.get_labels_of_similarity(y_pred)  # 构建标签
     y_pred = K.l2_normalize(y_pred, axis=1)  # 句向量归一化
     similarities = K.dot(y_pred, K.transpose(y_pred))  # 相似度矩阵
     similarities = similarities - K.eye(K.shape(y_pred)[0]) * 1e12  # 排除对角线
     similarities = similarities * 30  # scale
     loss = K.categorical_crossentropy(y_true,
                                       similarities,
                                       from_logits=True)
     return loss
コード例 #2
0
 def compute_loss_of_similarity(self, inputs, mask=None):
     _, _, y_pred, _ = inputs
     y_true = self.get_labels_of_similarity(
         y_pred)  # 构建标签  (btz,btz) 左右两个btz互为true
     y_pred = K.l2_normalize(y_pred, axis=1)  # 句向量归一化 (?, 768)
     similarities = K.dot(y_pred, K.transpose(y_pred))  # 相似度矩阵 (btz,btz)
     similarities = similarities - K.eye(K.shape(
         y_pred)[0]) * 1e12  # 排除对角线,因为对角线的是自己跟自己比 (btz,btz) 对角线上的值会变得无穷小
     similarities = similarities * 30  # scale (btz,btz)
     loss = K.categorical_crossentropy(
         y_true, similarities, from_logits=True)  # (?,)  由此可以计算一个btz内的句子相似度
     return loss