哪种 huggingface 模型最适合将句子作为输入并将该句子中的单词作为输出?
Which huggingface model is the best for sentence as input and a word from that sentence as the output?
针对此类任务进行微调的最佳抱脸模型是什么:
示例输入 1:
If there's one person you don't want to interrupt in the middle of a sentence it's a judge.
示例输出 1:
sentence
示例输入 2:
A good baker will rise to the occasion, it's the yeast he can do.
示例输出 2:
yeast
建筑
这看起来像是 问答 类型的任务,其中输入是一个句子,输出是输入句子的一个跨度。
在 transformers
中,这对应于 AutoModelForQuestionAnswering class
。
请参阅 original BERT paper 中的以下插图:
唯一的区别是输入将仅由“问题”组成。
换句话说,您不会有问题、[SEP]
标记和段落,如图所示。
在不太了解您的任务的情况下,您可能希望将其建模为令牌分类类型的任务。
在这里,您的输出将被标记为一些积极的标签,而其余的单词将被标记为其他一些消极的标签。
如果这对您来说更有意义,请查看 AutoModelForTokenClassification class
。
我将在 question-answering 的基础上进行其余的讨论,但这些概念可以很容易地进行调整。
型号
因为你似乎在处理英文句子,你可能可以使用 pre-trained 模型,例如 bert-base-uncased
。
根据数据分布,您对语言模型的选择可能会发生变化。
不确定您正在执行的任务是什么,但除非有一些可用的 fine-tuned 模型正在执行您的任务(您可以尝试搜索 HuggingFace model hub),否则您将必须 fine-tune 自己的模型。
为此,您需要有一个由句子组成的数据集,这些句子标有与答案范围相对应的开始和结束索引。
见 documentation for more information on how to train.
评价
一旦你有了一个 fine-tuned 模型,你只需要 运行 你的测试句子通过模型来提取答案。
以下代码改编自 HuggingFace documentation,可执行此操作:
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
import torch
model = AutoModelForQuestionAnswering.from_pretrained(name)
tokenizer = AutoTokenizer.from_pretrained(name)
input = "A good baker will rise to the occasion, it's the yeast he can do."
inputs = tokenizer(input, add_special_tokens=True, return_tensors="pt")
input_ids = inputs["input_ids"].tolist()[0]
outputs = model(**inputs)
start_scores = outputs.start_logits
end_scores = outputs.end_logits
start_index = torch.argmax(start_scores)
end_index = torch.argmax(end_scores) + 1
answer = tokenizer.convert_tokens_to_string(
tokenizer.convert_ids_to_tokens(input_ids[start_index:end_index])
) # "yeast", hopefully!
针对此类任务进行微调的最佳抱脸模型是什么:
示例输入 1:
If there's one person you don't want to interrupt in the middle of a sentence it's a judge.
示例输出 1:
sentence
示例输入 2:
A good baker will rise to the occasion, it's the yeast he can do.
示例输出 2:
yeast
建筑
这看起来像是 问答 类型的任务,其中输入是一个句子,输出是输入句子的一个跨度。
在 transformers
中,这对应于 AutoModelForQuestionAnswering class
。
请参阅 original BERT paper 中的以下插图:
唯一的区别是输入将仅由“问题”组成。
换句话说,您不会有问题、[SEP]
标记和段落,如图所示。
在不太了解您的任务的情况下,您可能希望将其建模为令牌分类类型的任务。
在这里,您的输出将被标记为一些积极的标签,而其余的单词将被标记为其他一些消极的标签。
如果这对您来说更有意义,请查看 AutoModelForTokenClassification class
。
我将在 question-answering 的基础上进行其余的讨论,但这些概念可以很容易地进行调整。
型号
因为你似乎在处理英文句子,你可能可以使用 pre-trained 模型,例如 bert-base-uncased
。
根据数据分布,您对语言模型的选择可能会发生变化。
不确定您正在执行的任务是什么,但除非有一些可用的 fine-tuned 模型正在执行您的任务(您可以尝试搜索 HuggingFace model hub),否则您将必须 fine-tune 自己的模型。 为此,您需要有一个由句子组成的数据集,这些句子标有与答案范围相对应的开始和结束索引。 见 documentation for more information on how to train.
评价
一旦你有了一个 fine-tuned 模型,你只需要 运行 你的测试句子通过模型来提取答案。 以下代码改编自 HuggingFace documentation,可执行此操作:
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
import torch
model = AutoModelForQuestionAnswering.from_pretrained(name)
tokenizer = AutoTokenizer.from_pretrained(name)
input = "A good baker will rise to the occasion, it's the yeast he can do."
inputs = tokenizer(input, add_special_tokens=True, return_tensors="pt")
input_ids = inputs["input_ids"].tolist()[0]
outputs = model(**inputs)
start_scores = outputs.start_logits
end_scores = outputs.end_logits
start_index = torch.argmax(start_scores)
end_index = torch.argmax(end_scores) + 1
answer = tokenizer.convert_tokens_to_string(
tokenizer.convert_ids_to_tokens(input_ids[start_index:end_index])
) # "yeast", hopefully!