交互/表示模型
交互模型: 两句话拼接成一句话,缺点就是长度弄不了太长,线上性能也压力大,优点就是两句话交互编码更加充分
表示模型:两句话分别进bert模型,所以是双塔模型,优点就是单句长度可以更长,线上也可以做到更好,因为其中一个bert边的向量可以保存,用的时候直接取。缺点就是两句话交互性其实比较弱,都是单独编码,只在最后一层取两个向量计算相似性。一个可以稍微缓解这种交互性的方案就是Poly-encoder,比如两个Bert最后输出的hidden_size是768,那么可以将其分成12个头head,然后做一个attention。
蒸馏
(1)交互模型蒸馏(主要就是减少层数):
比如12->6,但是可以用一个更大的teacher 模型,如24->6,其实是比12->6得到的6层模型更好
还可以使用助教的方式即假如我们当前的任务时想从12层蒸馏到3层,那么其实
12->6->3要比12->3要好
(2)表示模型蒸馏(主要就是减少维度):
比如768->128
主要是设计了一个pairewise loss即
loss(teacher(si-sj)-student(si-sj))
关于交互模型蒸馏:有种非对称蒸馏和以及其多阶段蒸馏