使用 HuggingFace 微调 ALBERT 问答
Posted
技术标签:
【中文标题】使用 HuggingFace 微调 ALBERT 问答【英文标题】:Fine-Tuned ALBERT Question and Answering with HuggingFace 【发布时间】:2021-05-12 14:33:23 【问题描述】:我正在尝试创建一个问答 AI,我希望它尽可能准确,而无需自己训练模型。
我可以通过他们的文档使用现有的基础模型创建一个简单的 AI:
from transformers import AlbertTokenizer, AlbertForQuestionAnswering
import torch
tokenizer = AlbertTokenizer.from_pretrained('albert-base-v2')
model = AlbertForQuestionAnswering.from_pretrained('albert-base-v2')
question, text = "What does He like?", "He likes bears"
inputs = tokenizer(question, text, return_tensors='pt')
start_positions = torch.tensor([1])
end_positions = torch.tensor([3])
outputs = model(**inputs, start_positions=start_positions, end_positions=end_positions)
loss = outputs.loss
start_scores = outputs.start_logits
end_scores = outputs.end_logits
answer_start = torch.argmax(start_scores) # get the most likely beginning of answer with the argmax of the score
answer_end = torch.argmax(end_scores) + 1
tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs["input_ids"][0][answer_start:answer_end]))
但是,此模型无法像其他模型那样准确回答问题。在 HuggingFace 网站上,我找到了一个我想使用 fine-tuned model
的示例但是,说明显示了如何训练这样的模型。该示例在页面上运行,因此很明显是存在的预训练模型。
有谁知道我可以如何重用现有模型,这样我就不必从头开始训练一个?
【问题讨论】:
训练现有模型包含在任何 DL 框架的文档和附带示例中。你已经有了“微调”这个词;用它来寻找例子。我在 2016 年第一次学习 Torch 时就知道它们存在。 @Prune 我不想训练,我只是不知道如何使用我找到的现有模型,结果他们将页面上的说明隐藏在一个奇怪的地方。我要测试一下,然后发布答案 很好,只要您发布的解决方案是新的。你似乎是一本写得不好的手册的受害者。鉴于现有的所有 Torch 文档,我怀疑 Stack Overflow 是否是发布您的解决方案的好地方。请先检查其他来源。了解如何加载现有模型。 @Prune,你绝对是正确的。我已经看到很多问题以更少的成本结束。但是,我将此类问题视为使用工具的帮助。例如关于 GIt 的问题,技术上与编程无关。 无论如何我都会发布答案,因为当我在 SO 上找不到答案时我会感到沮丧,并且有人可能会觉得它很有用(即使这个问题已关闭) 【参考方案1】:原来我只需要在尝试请求模型时获取一个额外的标识符:
from transformers import AlbertTokenizer, AlbertForQuestionAnswering
import torch
MODEL_PATH = 'ktrapeznikov/albert-xlarge-v2-squad-v2';
tokenizer = AlbertTokenizer.from_pretrained(MODEL_PATH)
model = AlbertForQuestionAnswering.from_pretrained(MODEL_PATH)
可以从变形金刚使用按钮中获取此信息以供将来参考。如下图所示。
【讨论】:
以上是关于使用 HuggingFace 微调 ALBERT 问答的主要内容,如果未能解决你的问题,请参考以下文章
使用 Huggingface TFTrainer 类微调模型时如何指定损失函数?
《自然语言处理实战入门》深度学习 ---- 预训练模型的使用(ALBERT 进行多标签文本分类与微调 fine tune)
《自然语言处理实战入门》深度学习 ---- 预训练模型的使用(ALBERT)
《自然语言处理实战入门》深度学习 ---- 预训练模型的使用(ALBERT 进行多标签文本分类与CPU 下的微调 fine tune)