ALBERT是一个比BERT要轻量,效果更好的模型,本篇实践介绍如何用ALBERT计算两个文本的相似度。
ALBERT利用词嵌入参数因式分解和隐藏层间参数共享两种手段,显著减少了模型的参数量的同时,基本没有损失模型的性能。笔者在下面的文章中详细介绍了ALBERT的理论,感兴趣的同学可以戳进去了解:《解读ALBERT》。
github地址
使用孪生ALBERT网络生成句子的嵌入表示:

Pooling方法:
a. CLS:直接使用CLS的输出作为Embedding
b.MEAN: 平均所有token的输出作为Embedding
c. MAX:取每一维输出向量的最大值
目标函数:
a. 分类目标函数:

其中 u 和 v 为两个句子的 Embedding,Wt为变换矩阵,最终的维度为3n*k,该目标函数可用于预训练Sentence Embedding
b. 回归目标函数:
该目标函数直接计算u和v的cosine相似度,将之均方误差作为loss。另外结构也是预测时候的计算方式
c. 三胞胎目标函数:

其中Sa为句子a的Embedding,Sp则为句子p,句子p是跟a属于同一类型的正例句子,n 则是一个反例,三胞胎网络和孪生网络类似,这个目标函数是为了让正例距离尽量近而反例尽量远