transformers: QuestionAnsweringPipeline cannot handle impossible answer
Environment info
transformersversion: latest master. I think the bug was introduced by this PR: #13873 so it’s part of transformers since the 4.11.3 release and I can confirm that I didn’t see this bug with the 4.11.2 release.- Platform: linux
- Python version: 3.8
- PyTorch version (GPU?): 1.9 (same with 1.10)
- Using GPU in script?: yes
- Using distributed or parallel set-up in script?:
Who can help
Hi @Narsil I hope you could look again at #13873 and check the changes it makes for the case when handle_impossible_answer is True. Thanks a lot!
To reproduce
Steps to reproduce the behavior:
- Find the
run_pipeline_testtest intest_pipelines_question_answering.py - Set
handle_impossible_answertoTruein thequestion_answererso that the code is the following:
def run_pipeline_test(self, question_answerer, _):
outputs = question_answerer(
question="Where was HuggingFace founded ?", context="HuggingFace was founded in Paris.", handle_impossible_answer=True
)
self.assertEqual(outputs, {"answer": ANY(str), "start": ANY(int), "end": ANY(int), "score": ANY(float)})
outputs = question_answerer(
question=["In what field is HuggingFace working ?", "In what field is HuggingFace working ?"],
context="HuggingFace was founded in Paris.",
)
- When running this modified test, it fails with a ValueError:
# Normalize logits and spans to retrieve the answer
start_ = np.exp(start_ - np.log(np.sum(np.exp(start_), axis=-1, keepdims=True)))
end_ = np.exp(end_ - np.log(np.sum(np.exp(end_), axis=-1, keepdims=True)))
if handle_impossible_answer:
> min_null_score = min(min_null_score, (start_[0] * end_[0]).item())
E ValueError: can only convert an array of size 1 to a Python scalar
../src/transformers/pipelines/question_answering.py:415: ValueError
Expected behavior
Test should run through.
Additional Info
I came across this problem when upgrading the transformers dependency of haystack and ran our tests with different versions of transformers to find the last working release/first failing release: https://github.com/deepset-ai/haystack/pull/1659
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 1
- Comments: 18 (8 by maintainers)
Perfect, just found the bug myself and saw this fix. Super cool! thanks!
Thanks for the detail issue, very easy to reproduce, and everything is correct.
I am creating a PR to fix this, however do you have an example where this argument is needed in an obvious way ? I would love to add a meaningful test for this option (already added unit test for it)
Can you provide a reproducible script ?
The one that used to not work:
seems to be working fine.