Не совсем. Как я описал — SpeechMarkup работает вне контекста. Он просто ищет сущности в тексте. Кот для него — это либо текст, либо город. Т.к. был такой город (оказывается), то он был помечен. Но суть-то в том, что затем ваше приложение потребляет результат. А значит, если город его не интересует, то он будет проигнорирован.
"Мама мыла раму"
Абсолютно любое слово может быть именованными сущностями. Без ранжирования, любой тест будет составлять поток сущностей…
Вторая задача — понять какая именно сущность тут имеется ввиду (если имеется)…
Да, безусловно есть еще над чем работать. С одной стороны нужно все это реализовать, а с другой — сделать API понятным и простым для стороннего разработчика. Таким, чтобы он не требовал изучения сложных материй для реализации конкретных задач. Пример такой задачи я и описал в демо.
Из выделения сущностей демо пример смог распознать только имена (но может я плохо старался). С ними тоже не плохо бы поработать («Позвонить Анатолию Ивановичу» работает, «Позвонить Анатолию И.И.» уже нет).
Время выделяет не плохо (хотя тоже баги есть). Для заметок работает красиво =)
API должно быть таким, чтобы простые вещи можно было сделать просто, а сложные возможно. Если API позволяет делать только элементарные вещи, а шаг в сторону — уже никак, то зачем такое API нужно не ясно…
Позвонить Анатолию И.И. — инициалы вам не распознает ни одна система распознавания речи. Но добавить распознавание инициалов — да, было бы хорошо, хотя и непонятно, кто будет стараться их вводить. Так только для тестов — да.
Насчет времени — вы бы не сочли за труд указать такие случаи? вот тут — github.com/Morfeusys/speechmarkup/issues
Спасибо
Могу конечно, правда мне сложно понять что для вас фича, а что проблема =)
Вот например «Позвонить подруге завтра в 11:00», скорее всего вы скажите, что такой формат мне «не распознает ни одна система распознавания речи»…
Да, вам вернется Позвонить подруге завтра в 11 00
Под это сейчас и заточена первая версия сервиса. Но все же — напишите о всем таком, что нашли. Спасибо.
Голосовой андроид ассистент Дуся работает офлайн и использует похожий подход play.google.com/store/apps/details?id=com.dusiassistant
В принципе SpeechMarkup — это онлайн-версия этой разработки, только с более широкими возможностями.
Было бы неплохо выпустить офлайновую библиотеку, пусть и платную. Даже не столько для своего сервера, сколько для работы приложения в офлайне. Ну и минимизировать задержки обработки.
Смотря под какую платформу. Время, даты, числа распознать можно, а вот для тех же городов, фамилий нужны стемеры и базы с интексами, которые могут работать только на серверах.
В чем подвох тогда? Функционал интересный. Можно подумать как это прикрутить к своему проекту. Но перед тем как использовать хотелось бы оценить стоимость.
Вам же как-то надо элементарно окупать нагрузку на сервер. Если бы это было open source решение, то понятно. А а так легко попасть на vendor lock.
Сейчас используется довольно интересная инфраструктура, позволяющая свести к нулю все расходы на поддержку. А оптимальные алгоритмы позволяют хранить минимум данных, что также сводит к нулю и стоимость хранения информации. Быть может, я подробней расскажу об этом в следующей статье, если кому-то будет интересно…
Сперва распознаете речь в текст посредством любого стороннего сервиса распознавания — гугла, яндекса, нюанса, или прямо в браузере (есть javascript speech api). А потом передаете текст на SpeechMarkup.
честно говоря, сколько не пробовал — ни одного правильно сработанного примера: все сущности определяются неверно. По моему сервис еще сырой и требует серьезной доработки.
ну посмотрите логи.
Классический пример: «мама мыла раму» — почему рама, написанный с незаглавной буквы становится городом (почему не именем)? Так практически любое нарицательное слово может стать собственным и наоборот.
Не буду приводить более сложных примеров, типа «глубокая путина», где «путина» становится даже не Путина (еще бы ничего), а Путин.
Любая система распознавания речи (тот же гугл) приводит все к нижнему регистру. Любой пользователь может все писать в нижнем регистре. SpeechMarkup не работает в контексте. Если вам не нужна какая-то сущность — то вы просто ее отбрасываете и все.
Сервис разработан для сторонних приложений, которым нужно вытаскивать сущность заранее известного типа. А не просто «мама мыла раму». Кстати «Рама» не становится городом.
Да, я согласен, (тем более, если это речь), то регистр не важен. Но есть масса алгоритмов, которые различают собственные и нарицательные слова. Я, правда, не понял, что значит «Если вам не нужна какая-то сущность — то вы просто ее отбрасываете и все» и «вытаскивать сущность заранее известного типа»? То есть это полуавтоматическая система? Пользователь сам разгребает сущности? Тогда беру свои слова обратно.
Но могу сказать, что полуавтоматические системы мало кого интересуют. Когда заказчик говорит: «Сделай мне кнопку, на которую бы я нажал и получил, что хочу», по попробуй догадаться чего он хочет… А раз уж вы позиционируете понимание смысла, то как раз система и должна понять и порадовать любого пользователя.
В демо-примере кажется как раз и проиллюстрирована ситуация «Пользователь сам разгребает сущности». Здесь не предлагается система, которая «поймет» любой ввод для любой функции. У вас есть сервис, который должен реагировать на вполне конкретные сущности — вот эту задачу сервис и решает. Те сущности, с которыми сервис не работает, игнорируются. Именно это я и хотел сказать, ничего более.
Магии и не будет, т.к. эти примеры тренированы на английском языке. Создайте свой аккаунт, создайте парочку intents, обучите, сделайте entity, которые нужны.
Да, много встроенного функционала (built-in entity) не работает, т.к. изначально рассчитано на английский язык, но ничего не мешает сделать своё :)
SpeechMarkup API — превращаем речь в данные