3

我正在使用 huggingface 转换器库开发法语问答模型。我正在使用与 RoBERTa 非常相似但适用于法语的预训练 CamemBERT 模型。

目前,我可以使用变形金刚库中的 QuestionAnsweringPipeline 为我自己的文本中的问题找到最佳答案候选者。

这是我的代码的摘录。

QA_model = "illuin/camembert-large-fquad"
CamTokQA = CamembertTokenizer.from_pretrained(QA_model)
CamQA = CamembertForQuestionAnswering.from_pretrained(QA_model)

device_pipeline = 0 if torch.cuda.is_available() else -1
q_a_pipeline = QuestionAnsweringPipeline(model=CamQA,
                                         tokenizer=CamTokQA,
                                         device=device_pipeline)

ctx = open("text/Sample.txt", "r").read()
question = 'Quel est la taille de la personne ?'
res = q_a_pipeline({'question': question, 'context': ctx})
print(res)

我目前得到这个 : {'score': 0.9630325870663725, 'start': 2421, 'end': 2424, 'answer': '{21'} ,这是错误的。

因此,我想获得 5 个最佳候选人作为答案。有谁知道如何做到这一点?

4

1 回答 1

2

调用管道时,您可以通过topk参数指定结果数。例如,对于五个最可能的答案,请执行以下操作:

res = q_a_pipeline({'question': question, 'context': ctx}, topk=5)

这将产生一个字典列表:[{'score': 0.0013586128421753108, 'start': 885, 'end': 896, 'answer': "L'ingénieur"}, {'score': 0.0011120906285982946, 'start': 200, 'end': 209, 'answer': 'français.'}, {'score': 0.00010808186718235663, 'start': 164, 'end': 209, 'answer': 'ingénieur hydraulicien et essayiste français.'}, {'score': 5.0453970530228015e-05, 'start': 153, 'end': 209, 'answer': 'urbaniste, ingénieur hydraulicien et essayiste français.'}, {'score': 4.455333667193265e-05, 'start': 190, 'end': 209, 'answer': 'essayiste français.'}]

查看代码时,您可以看到 QuestionAnsweringPipeline 接受一个名为 topk 的参数。

于 2020-06-26T11:53:27.377 回答