【问题标题】:NLP : Get 5 best candidates from QuestionAnsweringPipelineNLP:从 QuestionAnsweringPipeline 中获得 5 个最佳候选人
【发布时间】:2020-10-16 20:07:35
【问题描述】:

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

目前,我可以使用转换器库中的 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 个最佳候选人作为答案。有谁知道如何做到这一点?

【问题讨论】:

    标签: nlp huggingface-transformers bert-language-model question-answering


    【解决方案1】:

    调用管道时,您可以通过 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 的参数。

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      • 2021-01-29
      • 2020-03-20
      • 2017-04-25
      • 1970-01-01
      相关资源
      最近更新 更多