前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搜索与问答——【EMNLP 2021】TSDAE:基于Transformer的顺序去噪自动编码器

搜索与问答——【EMNLP 2021】TSDAE:基于Transformer的顺序去噪自动编码器

作者头像
小爷毛毛_卓寿杰
发布2022-09-30 14:33:50
7460
发布2022-09-30 14:33:50
举报
文章被收录于专栏:Soul Joy HubSoul Joy Hub

1. 介绍

TSDAE(Transformer-based Sequential Denoising Auto-Encoder)模型使用纯句子作为训练数据来无监督训练句子向量。在训练期间,TSDAE 将加了噪声的句子编码为固定大小的向量,并要求decoder从这个句子表征中重建原始句子。为了获得良好的重建质量,必须在encoder的句子向量中很好地捕获语义。在后续推理时,我们只使用encoder来创建句子向量。架构如下图所示:

encoder部分就是将带噪音的文本进行编码。控制变量实验发现,以“删除词语”的方式加入噪音、噪音比率在0.6效果的最好的:

然后将encoder的输出进行pooling,控制变量实验发现,以mean的方式pooling效果最好:

接下来我们主要关注下decoder部分。decoder使用的是 cross-attention:

其中s是encoder输出pooling后的句子表征,

H^k

的decoder第k层的隐层。

目标函数:

其中 l 是原文本x的token数,N的词表大小

2. 实验效果

对比来看,大部分任务,TSDAE效果会优于我们之前介绍的CTSimCSE的:

3. 实现

sentence_transformers已经把TSDAE已经封装成pip包,完整的训练流程例子可以参考《Sentence-BERT》。我们在此基础上只用修改dataset和loss就能轻松的训练TSDAE:

代码语言:javascript
复制
# 创建可即时添加噪声的特殊去噪数据集
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
)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 介绍
  • 2. 实验效果
  • 3. 实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档