Это 21-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.
В EMNLP2021 Findings есть статья под названиемTSDAE: Using Transformer-based Sequential Denoising Auto-Encoder for Unsupervised Sentence Embedding LearningВ статье с использованием структуры Transformer для неконтролируемого кодирования обучающих предложений сетевая архитектура выглядит следующим образом.
В частности, вводимый текст добавляет определенные шумы, такие как удаление, замена, добавление, маскирование некоторых слов и другие методы. Кодеру необходимо закодировать зашумленное предложение в вектор фиксированного размера, а затем использовать декодер для восстановления исходного предложения без шума. Тем не менее, но есть много деталей, первая - это тренировочная цель.
в,обучающая выборка;длинавходное предложение;даПредложение после добавления шума;это слововстраивание слов;объем словарного запаса;декодер первыйскрытое состояние пошагового вывода
В отличие от исходного преобразователя, метод, предложенный автором, декодер использует только вектор фиксированного размера, выдаваемый кодировщиком для декодирования.В частности, перекрестное внимание между кодировщиком-декодером формально выражается следующим образом:
в,декодер первыйЭтажскрытое состояние на каждом шаге декодирования;размерность вектора предложения (размерность выходного вектора энкодера);- это вектор предложения (строки), выводимый кодировщиком. Из приведенной выше формулы мы видим, что независимо от того, какой уровень перекрестного внимания,иВсегда будет, цель авторского замысла — искусственно добавить узкое место в модель, если вектор предложений, закодированный КодировщикомЕсли он недостаточно точен, декодеру трудно успешно декодировать.Другими словами, этот дизайн должен сделать кодирование кодера более точным. После обучения, если вам нужно извлечь вектор предложения, вам нужно использовать только Encoder.
Настроив параметры набора данных STS, автор обнаружил, что наилучший метод комбинирования выглядит следующим образом:
- Используется метод добавления шума путем удаления слов, а соотношение установлено на 60%
- Используйте вывод позиции [CLS] в качестве вектора предложений
Results
Судя по результатам TSDAE, это в основном пробивает SimCSE и пинает BERT-поток.
Персональное резюме
Если бы я был рецензентом, то один из вопросов, который я особенно хотел бы задать, звучит так: «В чем разница между вашим методом и BART?»
Исходный код статьи находится вUKPLab/sentence-transformers/, фактически, преобразователи предложений инкапсулировали TSDAE в пакет pip, Полный процесс обучения см.Использование Sentence-Transformer и учебник по тонкой настройке, исходя из этого, нужно только изменить набор данных и потери, чтобы легко обучать TSDAE
# 创建可即时添加噪声的特殊去噪数据集
train_dataset = datasets.DenoisingAutoEncoderDataset(train_sentences)
# DataLoader 批量处理数据
train_dataloader = DataLoader(train_dataset, batch_size=8, shuffle=True)
# 使用去噪自动编码器损失
train_loss = losses.DenoisingAutoEncoderLoss(model, decoder_name_or_path=model_name, tie_encoder_decoder=True)
# 模型训练
model.fit(
train_objectives=[(train_dataloader, train_loss)],
epochs=1,
weight_decay=0,
scheduler='constantlr',
optimizer_params={'lr': 3e-5},
show_progress_bar=True
)