无标签训练

无标签训练

本教程系列将涵盖txtai的主要用例,这是一个 AI 驱动的语义搜索平台。该系列的每章都有相关代码,可也可以在colab 中使用。
colab 地址

几乎所有可用的数据都没有标记。标记数据需要人工审核和/或需要时间来收集。零样本分类采用现有的大型语言模型,并在候选文本和标签列表之间进行相似性比较。这已被证明表现得非常好。

零样本分类器的问题在于它们需要有大量参数 (400M +) 才能在一般任务上表现良好,这需要大量的硬件。

本文探讨使用零样本分类器为较小模型构建训练数据。一种简单的知识蒸馏形式。

安装依赖

安装txtai和所有依赖项。

pip install txtai

将零样本分类器应用于未标记的文本

以下部分采用 sst2 数据集的 1000 条记录随机样本,并将零样本分类器应用于文本。标签被忽略。选择这个数据集只是为了能够评估当时的准确性。

import random

from datasets import load_dataset

from txtai.pipeline import Labels

def batch(texts, size):
    return [texts[x : x + size] for x in range(0, len(texts), size)]

# Set random seed for repeatable sampling
random.seed(42)

ds = load_dataset("glue", "sst2")

sentences = random.sample(ds["train"]["sentence"], 1000)

# Load a zero shot classifier - txtai provides this through the Labels pipeline
labels = Labels("microsoft/deberta-large-mnli")

train = []

# Zero-shot prediction using ["negative", "positive"] labels
for chunk in batch(sentences, 32):
    train.extend([{"text": chunk[x], "label": label[0][0]} for x, label in enumerate(labels(chunk, ["negative", "positive"]))])

接下来,我们将使用刚刚构建的训练集来训练较小的 Electra 模型。

from txtai.pipeline import HFTrainer

trainer = HFTrainer()
model, tokenizer = trainer("google/electra-base-discriminator", train, num_train_epochs=5)

评估准确性

回想一下训练集只有 1000 条记录。需要明确的是,针对完整的 sst2 数据集训练 Electra 模型会比下面的表现更好。但是对于这个练习,我们没有使用训练标签和模拟不可用的标记数据。

首先,让我们看看相对于 sst2 评估集,零样本模型的基线准确度是多少。提醒一下,这还没有看到任何 sst2 训练数据。

labels = Labels("microsoft/deberta-large-mnli")
results = [row["label"] == labels(row["sentence"], ["negative", "positive"])[0][0] for row in ds["validation"]]
sum(results) / len(ds["validation"])
0.8818807339449541

88.18% 的准确率,对于一个完全没有在数据集上训练过的模型来说还不错!显示了零样本分类的威力。

接下来,让我们测试我们在 1000 个零样本标记记录上训练的模型。

labels = Labels((model, tokenizer), dynamic=False)

results = [row["label"] == labels(row["sentence"])[0][0] for row in ds["validation"]]
sum(results) / len(ds["validation"])
0.8864678899082569

88.65% 准确率!不会对百分比太过分了,但这至少可以满足零样本分类器的准确性,如果不超过它的话。

现在,该模型将针对特定任务进行高度调整,但它有机会从 1000 条记录的组合中学习,而零样本分类器独立查看每条记录。它也更有效率。

结论

本笔记本探索了一种在没有可用训练数据的情况下构建训练有素的文本分类器的方法。考虑到运行大规模零样本分类器所需的资源量,此方法是构建针对特定任务调整的较小模型的简单方法。在这个例子中,零样本分类器有 400M 个参数,训练的文本分类器有 110M。

参考

https://dev.to/neuml/tutorial-series-on-txtai-ibg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的比目鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值