领域适应
领域适应的目标是使文本嵌入模型适应您的特定文本领域,而无需标记的训练数据。
领域适应仍然是一个活跃的研究领域,目前还没有完美的解决方案。然而,在我们最近的两篇论文TSDAE和GPL中,我们评估了几种将文本嵌入模型适应到特定领域的方法。您可以在我关于无监督领域适应的演讲中找到这些方法的概述。
领域适应 vs. 无监督学习
存在无监督文本嵌入学习的方法,然而,它们通常表现相当糟糕:它们无法真正学习领域特定的概念。
一种更好的方法是领域适应:在这里,您拥有来自特定领域的未标记语料库以及现有的标记语料库。您可以在此处找到许多合适的标记训练数据集:嵌入模型数据集集合
自适应预训练
使用自适应预训练时,您首先使用例如掩码语言建模 (Masked Language Modeling)或TSDAE在您的目标语料库上进行预训练,然后对现有训练数据集进行微调(参见嵌入模型数据集集合)。
在我们的论文TSDAE中,我们评估了几种领域适应方法,用于4个领域特定的句子嵌入任务
| 方法 | AskUbuntu | CQADupStack | SciDocs | 平均 | |
|---|---|---|---|---|---|
| 零样本模型 | 54.5 | 12.9 | 72.2 | 69.4 | 52.3 |
| TSDAE | 59.4 | 14.4 | 74.5 | 77.6 | 56.5 |
| MLM | 60.6 | 14.3 | 71.8 | 76.9 | 55.9 |
| CT | 56.4 | 13.4 | 72.4 | 69.7 | 53.0 |
| SimCSE | 56.2 | 13.1 | 71.4 | 68.9 | 52.4 |
正如我们所看到的,当您首先在特定语料库上进行预训练,然后对提供的标记训练数据进行微调时,性能可以提高多达8个点。
在GPL中,我们评估了这些方法在语义搜索中的应用:给定一个简短的查询,找到相关的段落。在这里,性能可以提高多达10个点
| 方法 | FiQA | SciFact | BioASQ | TREC-COVID | CQADupStack | Robust04 | 平均 |
|---|---|---|---|---|---|---|---|
| 零样本模型 | 26.7 | 57.1 | 52.9 | 66.1 | 29.6 | 39.0 | 45.2 |
| TSDAE | 29.3 | 62.8 | 55.5 | 76.1 | 31.8 | 39.4 | 49.2 |
| MLM | 30.2 | 60.0 | 51.3 | 69.5 | 30.4 | 38.8 | 46.7 |
| ICT | 27.0 | 58.3 | 55.3 | 69.7 | 31.3 | 37.4 | 46.5 |
| SimCSE | 26.7 | 55.0 | 53.2 | 68.3 | 29.0 | 37.9 | 45.0 |
| CD | 27.0 | 62.7 | 47.7 | 65.4 | 30.6 | 34.5 | 44.7 |
| CT | 28.3 | 55.6 | 49.9 | 63.8 | 30.5 | 35.9 | 44.0 |
自适应预训练的一个巨大缺点是计算开销大,因为您必须首先在语料库上运行预训练,然后在一个标记训练数据集上运行有监督学习。标记的训练数据集可能非常大(例如,all-*-v1模型已经在超过10亿个训练对上进行了训练)。
GPL:生成式伪标记
GPL解决了上述问题:它可以在微调模型的基础上应用。因此,您可以使用预训练模型之一并将其适应您的特定领域。
训练时间越长,模型性能越好。在我们的实验中,我们在V100 GPU上训练模型大约1天。GPL可以与自适应预训练结合使用,这可以进一步提高性能。

GPL 步骤
GPL分三个阶段工作
查询生成:对于我们领域中的给定文本,我们首先使用T5模型为给定文本生成一个可能的查询。例如,当您的文本是“Python 是一种高级通用编程语言”时,模型可能会生成一个查询,如“什么是Python”。您可以在我们的doc2query-hub上找到各种查询生成器。
负样本挖掘:接下来,对于生成的查询“什么是Python”,我们从语料库中挖掘负样本段落,即与查询相似但用户不会认为是相关的段落。这样的负样本段落可能是“Java 是一种高级的、基于类的、面向对象的编程语言。”。我们使用密集检索进行此挖掘,即我们使用现有文本嵌入模型之一并检索给定查询的相关段落。
伪标记:在负样本挖掘步骤中,我们可能会检索到实际与查询相关的段落(例如“什么是Python”的另一个定义)。为了克服这个问题,我们使用交叉编码器 (Cross-Encoder)来评估所有(查询,段落)对。
训练:一旦我们有了三元组(生成的查询,正样本段落,挖掘的负样本段落)以及交叉编码器对(查询,正样本)和(查询,负样本)的评分,我们就可以使用MarginMSELoss开始训练文本嵌入模型。
伪标记步骤非常重要,与之前的QGen方法(该方法将段落简单地视为正样本(1)或负样本(0))相比,它带来了性能提升。正如我们在下图中看到的,对于一个生成的查询(“什么是期货合约”),负样本挖掘步骤检索到的段落部分或高度相关于生成的查询。通过使用MarginMSELoss和交叉编码器,我们可以识别这些段落并告知文本嵌入模型这些段落也与给定查询相关。

下表概述了GPL与自适应预训练(MLM和TSDAE)的比较。如前所述,GPL可以与自适应预训练结合使用。
| 方法 | FiQA | SciFact | BioASQ | TREC-COVID | CQADupStack | Robust04 | 平均 |
|---|---|---|---|---|---|---|---|
| 零样本模型 | 26.7 | 57.1 | 52.9 | 66.1 | 29.6 | 39.0 | 45.2 |
| TSDAE + GPL | 33.3 | 67.3 | 62.8 | 74.0 | 35.1 | 42.1 | 52.4 |
| GPL | 33.1 | 65.2 | 61.6 | 71.7 | 34.4 | 42.1 | 51.4 |
| TSDAE | 29.3 | 62.8 | 55.5 | 76.1 | 31.8 | 39.4 | 49.2 |
| MLM | 30.2 | 60.0 | 51.3 | 69.5 | 30.4 | 38.8 | 46.7 |
GPL 代码
您可以在此处找到GPL的代码:https://github.com/UKPLab/gpl
我们让代码易于使用,因此您只需传递您的语料库,其余所有都由训练代码处理。
引用
如果您觉得这些资源有帮助,请随时引用我们的论文。
TSDAE:使用基于Transformer的序列去噪自编码器进行无监督句子嵌入学习
@inproceedings{wang-2021-TSDAE,
title = "TSDAE: Using Transformer-based Sequential Denoising Auto-Encoderfor Unsupervised Sentence Embedding Learning",
author = "Wang, Kexin and Reimers, Nils and Gurevych, Iryna",
booktitle = "Findings of the Association for Computational Linguistics: EMNLP 2021",
month = nov,
year = "2021",
address = "Punta Cana, Dominican Republic",
publisher = "Association for Computational Linguistics",
pages = "671--688",
url = "https://arxiv.org/abs/2104.06979",
}
@inproceedings{wang-2021-GPL,
title = "GPL: Generative Pseudo Labeling for Unsupervised Domain Adaptation of Dense Retrieval",
author = "Wang, Kexin and Thakur, Nandan and Reimers, Nils and Gurevych, Iryna",
journal= "arXiv preprint arXiv:2112.07577",
month = "12",
year = "2021",
url = "https://arxiv.org/abs/2112.07577",
}