Augmented SBERT

动机

Bi-encoders(又名句子嵌入模型)需要大量的训练数据和针对目标任务的微调,才能达到有竞争力的性能。然而,在许多场景中,只有少量的训练数据可用。

为了解决这个实际问题,我们发布了一种有效的数据增强策略,称为 Augmented SBERT,其中我们利用高性能且速度较慢的交叉编码器 (BERT) 来标记更大的输入对集合,从而增强双编码器 (SBERT) 的训练数据。

有关更多详细信息,请参阅我们的出版物 - Augmented SBERT: Data Augmentation Method for Improving Bi-Encoders for Pairwise Sentence Scoring Tasks,这是 Nandan Thakur、Nils Reimers 和 Johannes Daxenberger(来自达姆施塔特工业大学 UKP 实验室)的共同努力成果。

Chien Vu 也撰写了一篇关于这项技术的精彩博客文章:Advance BERT model via transferring knowledge from Cross-Encoders to Bi-Encoders

扩展到您自己的数据集

场景 1:有限或小型标注数据集(少量标注的句子对 (1k-3k))
如果您在公司或研究中有专门的数据集,这些数据集规模较小或包含少量标注的句子对。您可以扩展 Augmented SBERT(领域内)策略的思想,通过在您的小型黄金数据集上训练交叉编码器,并使用 BM25 采样来生成先前未见过的组合。使用交叉编码器标记这些未标注的对,以创建白银数据集。最后,在您的扩展数据集(黄金+白银)数据集上训练双编码器(即 SBERT),如 train_sts_indomain_bm25.py 中所示。

场景 2:无标注数据集(仅有未标注的句子对)
如果您在公司或研究中有专门的数据集,这些数据集仅包含未标注的句子对。您可以扩展 Augmented SBERT(领域迁移)策略的思想,通过在源数据集(已标注,例如 QQP)上训练交叉编码器。使用此交叉编码器标记您的专门的未标注数据集,即目标数据集。最后,在您的已标注目标数据集上训练双编码器(即 SBERT),如 train_sts_qqp_crossdomain.py 中所示。

方法论

对于成对句子回归或分类任务,Augmented SBERT 方法有两种主要场景。

场景 1:有限或小型标注数据集(少量标注的句子对)

我们应用 Augmented SBERT(领域内)策略,它包括三个步骤 -

  • 步骤 1:在小型(黄金或标注)数据集上训练交叉编码器 (BERT)

  • 步骤 2.1:通过重组创建对,并通过 BM25 或语义搜索减少对的数量

  • 步骤 2.2:使用交叉编码器 (BERT) 弱标记新的对。这些是对白银对或(白银)数据集

  • 步骤 3:最后,在扩展的(黄金 + 白银)训练数据集上训练双编码器 (SBERT)

场景 2:无标注数据集(仅有未标注的句子对)

我们应用 Augmented SBERT(领域迁移)策略,它包括三个步骤 -

  • 步骤 1:从头开始在源数据集上训练交叉编码器 (BERT),我们拥有该数据集的标注

  • 步骤 2:使用此交叉编码器 (BERT) 标记您的目标数据集,即未标注的句子对

  • 步骤 3:最后,在已标注的目标数据集上训练双编码器 (SBERT)

训练

examples/training/data_augmentation 文件夹包含针对下面解释的每种场景的简单训练示例

  • train_sts_seed_optimization.py

    • 此脚本从头开始训练用于 STS 基准数据集的种子优化的双编码器 (SBERT) 模型。

    • 种子优化技术灵感来自 (Dodge et al., 2020)

    • 对于种子优化,我们使用各种种子训练双编码器,并使用提前停止算法进行评估。

    • 最后,测量跨种子的开发性能,以获得性能最高的种子。

  • train_sts_indomain_nlpaug.py

    • 此脚本从头开始训练用于 STS 基准数据集的,使用简单数据增强的双编码器 (SBERT) 模型。

    • 数据增强策略来自流行的 nlpaug 包。

    • 使用(word2vec、BERT 或 WordNet)用同义词增强单个句子。形成我们的白银数据集。

    • 在原始小型训练数据集和基于同义词的白银数据集上训练双编码器模型。

  • train_sts_indomain_bm25.py

    • 脚本最初从头开始训练用于小型 STS 基准数据集的交叉编码器 (BERT) 模型。

    • 从我们的小型训练数据集中重组句子,并形成大量的句子对。

    • 使用 Elasticsearch 通过 BM25 采样限制组合的数量。

    • 检索给定句子的前 k 个句子,并使用交叉编码器标记这些对(白银数据集)。

    • 在黄金 + 白银 STSb 数据集上训练双编码器 (SBERT) 模型。(Augmented SBERT(领域内)策略)。

  • train_sts_indomain_semantic.py

    • 此脚本最初从头开始训练用于小型 STS 基准数据集的交叉编码器 (BERT) 模型。

    • 我们从我们的小型训练数据集中重组句子,并形成大量的句子对。

    • 使用预训练的 SBERT 模型通过语义搜索采样限制组合的数量。

    • 检索给定句子的前 k 个句子,并使用交叉编码器标记这些对(白银数据集)。

    • 在黄金 + 白银 STSb 数据集上训练双编码器 (SBERT) 模型。(Augmented SBERT(领域内)策略)。

  • train_sts_qqp_crossdomain.py

    • 此脚本最初从头开始训练用于 STS 基准数据集的交叉编码器 (BERT) 模型。

    • 使用交叉编码器标记 Quora Questions Pair (QQP) 训练数据集(假设没有标签)。

    • 在 QQP 数据集上训练双编码器 (SBERT) 模型。(Augmented SBERT(领域迁移)策略)。

引用

如果您使用 augmented sbert 的代码,请随意引用我们的出版物 Augmented SBERT: Data Augmentation Method for Improving Bi-Encoders for Pairwise Sentence Scoring Tasks

@article{thakur-2020-AugSBERT,
    title = "Augmented SBERT: Data Augmentation Method for Improving Bi-Encoders for Pairwise Sentence Scoring Tasks",
    author = "Thakur, Nandan and Reimers, Nils and Daxenberger, Johannes and  Gurevych, Iryna", 
    journal= "arXiv preprint arXiv:2010.08240",
    month = "10",
    year = "2020",
    url = "https://arxiv.org/abs/2010.08240",
}