-
赛题名称:Kaggle – LLM Science Exam -
赛题类型:自然语言处理、大模型 -
赛题任务:使用LLM回答困难的问题 -
赛题链接?:
https://www.kaggle.com/competitions/kaggle-llm-science-exam
比赛背景
随着大型语言模型能力范围的扩大,越来越多的研究领域正在使用LLM来表征自己。由于许多现有的 NLP 基准已被证明对于最先进的模型来说是微不足道的,因此也有一些有趣的工作表明LLM 可用于创建更具挑战性的任务来测试更强大的模型。
与此同时,量化和知识蒸馏等方法被用来有效地缩小语言模型并在更普通的硬件上运行它们。Kaggle 环境提供了一个独特的视角来研究这一问题,因为提交内容受到 GPU 和时间限制。
此挑战的数据集是通过提供从维基百科提取的一系列科学主题的 gpt3.5 文本片段,并要求其编写多项选择题(带有已知答案),然后过滤掉简单的问题来生成的。
比赛任务
目前估计 Kaggle 上运行的最大模型约有 100 亿个参数,而 gpt3.5 的参数为 1750 亿个。如果一个问答模型能够在由比其规模大 10 倍的问题编写模型编写的测试中表现出色,这将是一个真正有趣的结果; 另一方面,如果一个较大的模型能够有效地击败较小的模型,这对LLM自我基准测试和测试的能力具有引人注目的影响。
受OpenBookQA 数据集的启发,本次竞赛要求参与者回答由大型语言模型编写的基于科学的困难问题。您的工作将帮助研究人员更好地了解大型语言模型自我测试的能力,以及大型语言模型可以在资源有限的环境中运行的潜力。
解题思路
由于给定的训练集有限,使用外部数据集来增强训练数据是一种常见的方法,可以帮助提高模型的泛化能力。
步骤1:收集外部数据集
可以寻找与科学主题相关的其他数据源,如学术论文、科学书籍、维基百科等,以构建一个更大的训练数据集。确保数据的质量和相关性,然后进行预处理,使其适合用于训练模型。
在论坛中已经有选手使用了GPT-3.5-turbo来创建了额外的高质量训练样本,并通过这些样本来提高了您的模型性能。
https://www.kaggle.com/datasets/radek1/additional-train-data-for-llm-science-exam
https://www.kaggle.com/datasets/radek1/15k-high-quality-examples
-
确定数据来源: 您可以选择从多个可靠来源收集相关领域的文本数据,如学术论文、科学书籍、科学杂志文章等。确保数据来源的可信度和相关性。 -
数据抓取: 使用网络爬虫工具或API来收集数据。请注意,您需要确保遵守数据使用政策和法律,不侵犯版权和隐私权。 -
数据预处理: 对收集到的文本数据进行预处理,包括文本清洗、分词、去除停用词等步骤。确保文本数据适合用于模型的训练。 -
生成多项选择问题: 将预处理后的文本数据转换成多项选择问题的格式。您可以使用GPT-3.5-turbo或类似的模型,让模型为每个文本生成相关问题和答案选项。确保每个问题都有明确的正确答案。 -
数据标注: 对生成的问题和答案进行标注,确保每个问题的正确答案是正确的。这样您就可以将这些样本用于模型的监督训练。
步骤2:构建多项选择训练集
将收集的数据转换为多项选择问题的格式,包括问题提示、选项和正确答案。确保每个问题都有明确的正确答案,以便用于模型的监督训练。
https://www.kaggle.com/code/radek1/new-dataset-deberta-v3-large-training/
下面代码展示了一个基本的模型训练过程,用于训练一个多项选择问题的模型,以回答科学考试类似的问题。
training_args = TrainingArguments(
warmup_ratio=0.8,
learning_rate=5e-6,
per_device_train_batch_size=2,
per_device_eval_batch_size=4,
num_train_epochs=3,
report_to='none',
output_dir='.',
)
model = AutoModelForMultipleChoice.from_pretrained(deberta_v3_large)
trainer = Trainer(
model=model,
args=training_args,
tokenizer=tokenizer,
data_collator=DataCollatorForMultipleChoice(tokenizer=tokenizer),
train_dataset=tokenized_dataset,
)
trainer.train()
步骤3:模型集成和预测
在比赛中集成多个模型的预测结果可能会有所帮助。可以尝试不同的集成方法,如投票、加权平均等,以获得更稳定和准确的预测结果。
https://www.kaggle.com/code/radek1/inference-using-3-trained-deberta-v3-models/
all_preds = []
all_labels = []
for i in range(3):
model = AutoModelForMultipleChoice.from_pretrained(f'/kaggle/input/science-exam-trained-model-weights/run_{i}').cuda()
model.eval()
preds = []
labels = []
for batch in test_dataloader:
for k in batch.keys():
batch[k] = batch[k].cuda()
with torch.no_grad():
outputs = model(**batch)
labels.append(batch['labels'].cpu().detach())
preds.append(outputs.logits.cpu().detach())
preds = torch.cat(preds)
labels = torch.cat(labels)
all_preds.append(preds)
all_labels.append(labels)
all_preds = torch.stack(all_preds)
# 竞赛交流群 邀请函 #
每天大模型、算法竞赛、干货资讯