领域适应

领域适应的目标是在不需要标记训练数据的情况下,将文本嵌入模型适应到特定的文本领域。

领域适应仍然是一个活跃的研究领域,目前还没有完美的解决方案。然而,在我们最近的两篇论文 TSDAEGPL 中,我们评估了几种将文本嵌入模型适应到特定领域的方法。你可以在我的 无监督领域适应讲座 中找到这些方法的概述。

领域适应 vs. 无监督学习

虽然存在 无监督文本嵌入学习 的方法,但它们通常表现不佳:它们无法真正学习领域特定的概念。

一个更好的方法是领域适应:这里你有一个来自特定领域的未标记语料库和现有的标记语料库。你可以在这里找到许多合适的标记训练数据集:嵌入模型数据集集合

自适应预训练

使用自适应预训练时,你首先在目标语料库上进行预训练,例如使用 掩码语言建模TSDAE,然后在现有的训练数据集上进行微调(参见 嵌入模型数据集集合)。

自适应预训练

在我们的论文 TSDAE 中,我们在4个领域特定的句子嵌入任务上评估了几种领域适应方法:

方法 AskUbuntu CQADupStack Twitter SciDocs 平均
Zero-Shot 模型 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 平均
Zero-Shot 模型 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 克服了上述问题:它可以应用于微调模型之上。因此,你可以使用其中一个 预训练模型 并将其适应到你的特定领域:

GPL 概述

训练时间越长,模型表现越好。在我们的实验中,我们在 V100-GPU 上训练模型大约1天。GPL 可以与自适应预训练结合使用,这可以进一步提高性能。

GPL 步骤

GPL 步骤

GPL 分三个阶段工作:

GPL 架构

  • 查询生成:对于给定的领域文本,我们首先使用一个 T5 模型为给定的文本生成一个可能的查询。例如,当你的文本是 “Python 是一种高级的通用编程语言”,模型可能会生成一个查询如 “什么是 Python”。你可以在我们的 doc2query-hub 中找到各种查询生成器。

  • 负采样: 接下来,对于生成的查询 "什么是Python",我们从语料库中挖掘负样本,即那些与查询相似但用户不会认为相关的段落。这样的负样本段落可以是 "Java是一种高级的、基于类的、面向对象的编程语言。"。我们使用密集检索进行这种挖掘,即使用现有的文本嵌入模型检索与给定查询相关的段落。

  • 伪标签: 在负采样步骤中,我们可能检索到实际上对查询相关的段落(比如 "什么是Python" 的另一个定义)。为了解决这个问题,我们使用 Cross-Encoder 对所有 (查询, 段落) 对进行评分。

  • 训练: 一旦我们有了三元组 (生成的查询, 正样本段落, 挖掘的负样本段落) 以及 (查询, 正样本) 和 (查询, 负样本) 的 Cross-Encoder 分数,我们就可以开始使用 MarginMSELoss 训练文本嵌入模型。

伪标签 步骤非常重要,并且相比于之前的方法 QGen,伪标签方法显著提高了性能,QGen 只是简单地将段落标记为正样本 (1) 或负样本 (0)。如以下图片所示,对于一个生成的查询("什么是期货合约"),负采样步骤检索到的段落部分或高度相关于生成的查询。使用 MarginMSELoss 和 Cross-Encoder,我们可以识别这些段落,并教导文本嵌入模型这些段落对于给定的查询也是相关的。

GPL架构

下表概述了 GPL 与自适应预训练(MLM 和 TSDAE)的比较。如前所述,GPL 可以与自适应预训练结合使用。

方法 FiQA SciFact BioASQ TREC-COVID CQADupStack Robust04 平均
Zero-Shot 模型 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",
}

GPL: 生成伪标签用于密集检索的无监督领域适应:

@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",
}