Representación de oraciones preentrenadas - [EMNLP 2021] SimCSE

Este artículo ha participado en el evento "Ceremonia de creación de recién llegados" para comenzar juntos el camino de la creación de oro.

1. Introducción

SimCSE (aprendizaje contrastivo simple de incrustaciones de oraciones) es un método de aprendizaje contrastivo que simplemente entrena vectores de oraciones sin datos de entrenamiento supervisados.

Este método consiste en codificar la misma oración dos veces. Debido al uso de abandono en el modelo de Transformador, las posiciones de las dos representaciones de oración serán ligeramente diferentes. Se minimizará la distancia entre estas dos representaciones y se maximizarán las distancias de otras representaciones de otras oraciones en el mismo lote (actúan como contraejemplos):inserte la descripción de la imagen aquí

  • Función objetivo Pérdida de clasificación de negativos múltiples:

inserte la descripción de la imagen aquídonde z y z' son dos máscaras aleatorias de abandono diferentes. h i con i , h i con i h_i^{z_i},h_i^{z'_i} es la misma frase X i x_i Un vector de entradas al mismo codificador pero usando dos máscaras aleatorias de abandono diferentes.

2. Efecto experimental

inserte la descripción de la imagen aquíSe encuentra que el efecto será mejor que el CT que introduje anteriormente .

3. Implementación

Sentence_transformers ha encapsulado SimCSE en un paquete pip. Para ver un ejemplo completo del proceso de capacitación, consulte "Sentence-BERT" . Sobre esta base, podemos entrenar SimCSE fácilmente modificando solo la pérdida:

from sentence_transformers import SentenceTransformer, InputExample
from sentence_transformers import models, losses
from torch.utils.data import DataLoader

# ……

train_loss = losses.MultipleNegativesRankingLoss(model)

# 训练模型
model.fit(
    train_objectives=[(train_dataloader, train_loss)],
    epochs=1,
    show_progress_bar=True
)
复制代码

4. Entrenamiento supervisado

SimCSE también se puede utilizar para entrenar con datos supervisados. Construimos datos supervisados ​​en forma de ( X i , X i + , X i ) (x_i,x_i^+,x_i^-) 。简单来说,就是在训练时不只是把 X i x_i^- 视为负例,且把同batch其他句子的正负例都视为句子i的负例: inserte la descripción de la imagen aquí 目标函数为: inserte la descripción de la imagen aquí 实验效果: inserte la descripción de la imagen aquí

Why does it work?

知乎上有同学提问《为什么SimCSE的效果这么好呢?》

如题,为何通过两次dropout、"自己预测自己"的这种方法效果会这么好呢?通过dropout添加噪声不会改变原来句子的语义吗?

作者在论文中也尝试做了解答: inserte la descripción de la imagen aquí

Table3 中尝试不同的dropout rate,并观察所有变体的表现都低于默认值Transformers 的 dropout rate p = 0.1。可以发现,当 p增加时,的确可能会添加过多的“噪声不会改变原来句子的语义”,导致表现变差。

此外,我们发现两个极端情况特别有趣: “no dropout”(p = 0)和“fixed 0.1”(使用默认值 dropout p = 0.1,但该对的 dropout 掩码相同)

在这两种情况下,结果对的embedding完全相同,它导致性能急剧下降。我们在训练期间每 10 步检查一次这些模型的checkpoints,并可视化对齐和均匀性(alignment and uniformity) inserte la descripción de la imagen aquí

Alignment:positive pairs Feature 之间的对齐性(紧密性)。相似的样本具有相似的特征

Uniformity:特征在归一化后在超平面上的均匀性。保留最大信息

Estas dos métricas son muy consistentes con los objetivos del aprendizaje contrastivo: las instancias positivas deben permanecer cercanas y las incrustaciones de instancias aleatorias deben estar dispersas por la hiperesfera. inserte la descripción de la imagen aquíComo se muestra en la figura anterior, se muestra claramente que a partir del punto de control preentrenado, todos los modelos mejoran en gran medida la uniformidad.

Sin embargo, la alineación de las dos variantes especiales también cae bruscamente, mientras que SimCSE sin supervisión mantiene una alineación estable gracias al uso del ruido de caída.

También muestra que comenzar con un punto de control previamente entrenado es crucial ya que proporciona una buena alineación inicial. Finalmente, "eliminar una palabra" mejora la alineación pero logra una pequeña ganancia en la métrica de uniformidad, que termina teniendo un peor desempeño que SimCSE no supervisado.

Supongo que te gusta

Origin juejin.im/post/7085185477275287582
Recomendado
Clasificación