领域自适应
领域自适应的目标是调整文本嵌入模型以适应您特定的文本领域,而无需拥有标注的训练数据。
领域自适应仍然是一个活跃的研究领域,目前还没有完美的解决方案。然而,在我们最近的两篇论文 TSDAE 和 GPL 中,我们评估了几种将文本嵌入模型适应您特定领域的方法。您可以在我的关于无监督领域自适应的演讲中找到这些方法的概述。
领域自适应 vs. 无监督学习
存在 无监督文本嵌入学习 的方法,但是,它们的表现通常很差:它们实际上无法学习领域特定的概念。
一个更好的方法是领域自适应:在这里,您拥有来自您特定领域的未标注语料库以及现有的标注语料库。您可以在这里找到许多合适的标注训练数据集:嵌入模型数据集集合
自适应预训练
当使用自适应预训练时,您首先使用例如 掩码语言建模 或 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”的另一个定义)。为了克服这个问题,我们使用 交叉编码器 来为所有(查询,段落)对评分。
训练:一旦我们有了三元组 (生成的查询、正样本段落、挖掘的负样本段落) 以及 (查询,正样本) 和 (查询,负样本) 的交叉编码器分数,我们就可以开始使用 MarginMSELoss 训练文本嵌入模型。
伪标签步骤非常重要,这导致了与之前的 QGen 方法相比性能的提高,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",
}