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

Posted

技术标签:

【中文标题】NLP:从 QuestionAnsweringPipeline 中获得 5 个最佳候选人【英文标题】:NLP : Get 5 best candidates from QuestionAnsweringPipeline 【发布时间】: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 个最佳候选人作为答案。有谁知道如何做到这一点?

【问题讨论】:

【参考方案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 的参数。

【讨论】:

以上是关于NLP:从 QuestionAnsweringPipeline 中获得 5 个最佳候选人的主要内容,如果未能解决你的问题,请参考以下文章

从 NodeJS、NLP 中的文本中提取人名

NLP 从各种字符串中识别问题

重磅 | NLP 从入门到实战,阿里 iDST 9大名师即将开讲

NLP刻意练习丨从优秀到卓越

NLP系列_从NLP反作弊技术看马蜂窝注水事件

NLP系列_从NLP反作弊技术看马蜂窝注水事件