Siamese Network 是一种神经网络的框架,而不是具体的某种网络,Siamese Network用于评估两个输入样本的相似度。网络的框架如下图所示

siamese

Siamese Network有两个结构相同,且共享权值的子网络。分别接收两个输入X1与X2,将其转换为向量Gw(X1)与Gw(X2),再通过某种距离度量的方式计算两个输出向量的距离Ew。

训练Siamese Network采用的训练样本是一个tuple (X1,X2,y),标签y=0表示X1与X2属于不同类型(不相似、不重复、根据应用场景而定)。y=1则表示X1与X2属于相同类型(相似)。

LOSS函数的设计应该是

  1. 当两个输入样本不相似(y=0)时,距离Ew越大,损失越小,即关于Ew的单调递减函数。
  2. 当两个输入样本相似(y=1)时,距离Ew越大,损失越大,即关于Ew的单调递增函数。

用L+(X1,X2)表示y=1时的LOSS, L−(X1,X2)表示y=0时的LOSS,则LOSS函数可以写成如下形式

Lw(X1,X2)=(1−y)L−(X1,X2)+yL+(X1,X2)

Siamese Network的基本架构、输入、输出以及LOSS函数的设计原则如上文.

LSTM Siamese Network总结起来就是

  1. 将Siamese Network中的Encoder换成BILSTM
  2. 将距离的计算改成余弦距离
  3. 修改相应的LOSS函数

这个设计上还是有一些可以改进的,比如在BILSTM输出后,加一个attention,而不是直接average每个时刻的输出,这样可以更好的表征输入的文本。

BiLSTM介绍

BiLSTM

损失函数:
loss