«Привет, Майкрофт, что Википедия говорит об Аврааме Линкольне»
Майкрофт отвечает: «Об Аврааме Линкольне».
Я бы посчитал это проблемой с адаптацией. Вместо этого он, вероятно, должен возвращать достоверность каждого совпадения на основе длины регулярного выражения, чтобы what does wikepedia say
всегда переопределяло say
.
Я согласен; В прошлом году я попытался создать систему анализа намерений, подобную mycroft (также на Python) для относительно небольшого набора операций, и добавил это взвешивание к достоверности совпадений по той же причине.
Это сработало хорошо, хотя я также взвешивал совпадения по тому, насколько они были близки к началу фразы (или на самом деле, в зависимости от того, где следующий набор неанализируемых слов начинается с полученных слов). Каждый навык будет обрабатывать свою фразу и возвращать любые оставшиеся слова в конце для повторного анализа при необходимости, особенно если это было частью подпункта, разделенного, например. «и» или «тогда».
Примечание. Я действительно пробовал добавлять списки слов «звуки как» к каждому набору слов «навык», которые TTS иногда возвращал в качестве альтернативы для улучшения показателей соответствия, затем делал наилучшее совпадение и соответствующим образом пропорционально оценивал достоверность, но это становилось слишком сложно даже с ограниченным набором функций для обслуживания всех признанных версий, возвращенных в качестве проекта в свободное время.
Adapt дает результаты синтаксического анализа в порядке «наибольшего охвата высказывания», что не обязательно в порядке наибольшей достоверности. При вычислении достоверности регулярные выражения имеют меньший вес в зависимости от их неточности, а все совпадения (регулярное выражение или литерал сущности) имеют достоверность, основанную на процентном соотношении представленных высказываний. В последнем выпуске Adapt (v0.3.0) можно дополнительно раскрыть достоверность отдельных тегов в результате синтаксического анализа.
{u'ArticleTitle': u'say about foobar', 'intent_type': u'WikipediaIntent', 'confidence': 0.375, 'target': None, u'WikipediaKeyword': u'wikipedia'}
Пройдя через это в отладчике, я вижу, что 4-й или 5-й результат синтаксического анализа, полученный в результате адаптации, действительно имеет более высокую достоверность, чем намерение речи, и запускает намерение википедии. Результатом синтаксического анализа является мусор (запрос: скажем об Аврааме Линкольне), но Adapt не очень хорошо разбирает поисковые запросы с произвольным текстом из текста на естественном языке. Хотя здесь регулярные выражения являются неизбежным злом, ими довольно часто злоупотребляют, и чем больше навыков их использует, тем выше вероятность подобных столкновений.
По крайней мере, для меня эта ошибка была исправлена https://github.com/MycroftAI/mycroft-core/commit/4d6defd126c0a0b091718f8e15f8b033a84f9aa1
Кажется, эта ошибка исправлена.