NLP:从 QuestionAnsweringPipeline 中获得 5 个最佳候选人

NLP : Get 5 best candidates from QuestionAnsweringPipeline

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

目前,我能够使用 transformers 库中的 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 个最佳候选答案。有谁知道该怎么做吗?

调用管道时,您可以通过 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.'}]

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