ODQA: отвечает неправильно и не так как DrQA?

Поиграл с моделью из туториала http://docs.deeppavlov.ai/en/master/skills/odqa.html
и довольно-таки удивился, тк она не дала ни одного правильного ответа!

В том числе это наблюдается на вопросе из туториала про Дарта вейдера, на казалось бы простых вопросах про географию, авторство книги.
Окончательно я понял, что проблема с датасетом и внутренним устройством модели, перенесеной от Фейсбука GitHub - facebookresearch/DrQA: Reading Wikipedia to Answer Open-Domain Questions когда задал вопрос из их туториала:
Who was the winning pitcher in the 1956 World Series?

Ну и на вопрос про смысл всего в датасете уж точно должен быть ответ, это же цитата, но его нет.
Что делать?

INFO:tensorflow:Restoring parameters from /home/joo/.deeppavlov/models/multi_squad_model_noans/model

result = odqa([‘What is the name of Darth Vader's son?’])
/home/joo/myvenv/lib/python3.6/site-packages/deeppavlov/models/doc_retrieval/logit_ranker.py:65: FutureWarning: LogitRanker.call() API will be changed in the future release. Instead of returning Tuple(List[str], List[float] will return Tuple(List[List[str]], List[List[float]]).
’ Tuple(List[List[str]], List[List[float]]).‘, FutureWarning)
print(result)
[‘Fox Mulder’]
result = odqa([‘What is the longest river in Russia?’])
print(result)
[‘Mackenzie River’]
result = odqa([‘Who was a prime-minister in Russia in 2011?’])
print(result)
[‘Prince Albert II’]
result = odqa([‘Who is the author of Tom Sawyer?’])
print(result)
[‘Rob Belton’]
result = odqa([‘Who was the winning pitcher in the 1956 World Series?’])
print(result)
[‘Aaron Boone’]
result = odqa([‘What is the answer to life, the universe, and everything?’])
print(result)
[’']

1 Like

Здравствуйте, @BitcoinKing

В модели ODQA только ранжирующая часть реализована похожим на DrQA образом, хотя и не является точной копией. Что касается ридера, он реализован совршенно отличным от DrQA способом. С момента реализации DrQA многое поменялось в NLP, получили успех языковые модели, и, взяв на вооружение этот успех, наша команда реализовала ридер на основе модели BERT, который может и работает медленее, но зато сильно выигрывает по качеству по сравнению со старым подходом (модели на основе R-Net).

Качество модели ODQA в DeepPavlov существенно выше, чем качество модели DrQA, оно измерялось на “золотом” датасете SQuAD. Сравнительные метрики обоих моделей приведены в нашей документации.

Но тут вот какая штука. Несмотря на то, что мы постоянно улучшаем качество модели ODQA, используя новые достижения в NLP, оно всё еще далеко от 100 %. Поэтому вероятность натолкнуться на неправильный ответ модели очень высока. Обычно в демонстрациях таких моделей специально подбираются “проверенные” вопросы, на которые модель точно даст хороший ответ. Но стоит изменить немного саму модель - и вопросы надо подбирать заново.

Да, спасибо, в целом это понятно, что технология не дает получить более 30% верных ответов, да еще и при том, что они в топ 5…
Мне бы тут было интересно вот что: чтобы статьи не читать, а наверняка же модель изменила тип вопросов, на которые даются хорошие ответы? То есть с общих на более специальные, или если я дам 3 параметра в вопросе вместо двух, то она лучше станет отвечать (ну вроде кто -автор- -книги- -жанра- такого-то) - это известно?
На самом деле печаль, тк Вольфарм дал ответ на все вопросы, а правильно на 4 из 5 https://www.wolframalpha.com/input/?i=What+is+the+longest+river+in+Russia%3F
Конечно наверное там используют движение по графу знаний, но все же.

Сложно сказать, различия между более общими и специальными вопросами не тестировали. Но известно, что модель, в среднем, лучше отвечает на вопросы в духе “кто такой” и “что такое” и хуже на вопросы “сколько” и “самый”.

В DeepPavlov недавно появилась модель KBQA, которая так же, как и ODQA, отвечает на вопросы открытого домена, но использует при этом граф знаний. В ближайшем будущем мы планируем объединить модели ODQA и KBQA в единую модель, чтобы при ответах на вопросы были использованы все возможные техники.

О, KBQA конечно лучше сработает с моими вопросами. А вот более философские или научные вопросы уже ODQA должна брать. Ну в целом вопрос закрыт

@my-master, по моим тестам KBQA работает эффективнее, чем ODQA. Когда планируется объедение KBQA и ODQA? И будет ли это параллельный запуск обоих моделей и выдача одного из результатов исходя из того, какая из моделей вернула больший score для ответа или что-то более сложное?
Изначально (пока не появился KBQA) я хотел сделать relation-extraction сохранить его в rdf формате и затем с помощью seq-to-seq бота (который будет ходить за информацией в это rdf хранилище) сделать что-то похожее на KBQA.
Отличается ли принципиально KBQA от того, что я планировал сделать? Должно ли использование KBQA быть более эффективным?

В доках я не нашёл, как использовать KBQA, чтобы отвечать на вопросы не по Wikipedia, а по собственным данным. Как составить свой дата файл, типа wikidata_rus? Возможно ли это? Можно ли дополнять базу знаний итеративно, только расширяя граф, а не переучивая всю модель (и если можно, то как).
Есть ли возможность разделить по параметру запроса граф знаний (т.е. партиционировать)?

1 Like

подпишусь, тоже это интересует

Здравствуйте @predictron-cloud
У нас уже есть простая версия KBQA+ODQA (пока не в библиотеке), ориентированная на выбор ответа по уверенности модели, которую мы тестировали на своих проприетарных датасетах. Объединенная модель показывает лучший результат на проприетарных данных, чем каждая из них по отдельности. Сейчас мы работаем над более сложным алогритмом выбора ответа.
@mu-arkhipov

@my-master, @mu-arkhipov Спасибо за ответ, но это был только первый из вопросов в моём сообщении =). Больше всего меня интересует:

Как использовать KBQA, чтобы отвечать на вопросы не по Wikipedia, а по собственным данным. Как составить свой дата файл, типа wikidata_rus? Возможно ли это? Можно ли дополнять базу знаний итеративно, только расширяя граф, а не переучивая всю модель (и если можно, то как).
Есть ли возможность разделить по параметру запроса граф знаний (т.е. партиционировать)?

И снова здравствуйте.
Присоединяюсь к вопросу. И подскажите когда можно будет попробовать новые модели ? А то совсем невпопад отвечает.

result = odqa([‘What is the name of Darth Vader's son?’])
2020-09-02 16:58:47.812 WARNING in ‘deeppavlov.models.doc_retrieval.logit_ranker’[‘logit_ranker’] at line 72: you didn’t pass tfidf_doc_ids as input in logit_ranker config so batch_best_answers_doc_ids can’t be compute
print(result)
[‘Fox Mulder’]

И подскажите что за предупреждение модель выдает ?

Тоже присоединюсь к вопросам выше. Больше года прошло, какая судьба у кастомизируемой KBQA?

Добавление в KBQA возможности использования других баз знаний (кроме Wikidata) планируется, но пока не реализовано.