Логика маршрутизации голосового ассистента зависит от знания того, какого типа предложение он получил, прежде чем он попытается на что-либо ответить. Вопрос требует ответа. Команда требует выполнения. Утверждение может требовать подтверждения или сохранения. Правильно определить эту классификацию на любом языке, на котором говорит пользователь, — это предпосылка для всего остального.
sentence-types-multilingual — это обучающий корпус, стоящий за этим слоем: 69 300 размеченных предложений, 9 900 для каждого из семи языков: английского, испанского, французского, немецкого, итальянского, португальского и нидерландского.
Что метки означают на практике
Датасет использует плоский набор из шести меток — один столбец label на
строку, без разделения на тип/подтип — которые напрямую отображаются на то, как
little_questions (библиотека вывода, потребляющая эти данные) маршрутизирует
высказывания:
- wh_question — вопросы, построенные вокруг вопросительного слова (что, где, кто и так далее).
- polar_question — вопросы да/нет. Таксономия EAT внутри
little_questionsдобавляет 53 детальные метки типа ответа (человек, местоположение, количество, определение и так далее) поверх меток вопросов, но классификация типа предложения — это первый рубеж. - command — повелительные формы. Команды не ждут ответа; они ждут действия.
- request — вежливые или косвенные просьбы о действии, отличные от голого повелительного наклонения.
- statement — повествовательное. Утверждения в контексте диалога часто несут полярность, которая важна далее по цепочке: классификатор да/нет/может-быть запускается на утверждениях для интерпретации ответов на предыдущие вопросы.
- exclamation — эмоционально маркированные высказывания, которые требуют иной обработки, чем нейтральные повествовательные.
{
"language": "en",
"label": "wh_question",
"text": "What time is it?"
}
Почему межъязыковое покрытие нетривиально
Одно и то же коммуникативное намерение проявляется по-разному в разных грамматиках:
- Английский маркирует вопросы инверсией порядка слов; португальский и испанский часто маркируют их только пунктуацией и интонацией, оставляя порядок слов нетронутым.
- Немецкий выносит глаголы в конечную позицию предложения способами, которые смещают место, где находится классифицирующий сигнал.
- Романские языки используют выделенную повелительную морфологию для команд, которые английский выражает голым глаголом.
Модель, обученная только на английском, ошибается в этих случаях повсюду. Параллельные размеченные данные на семи языках предоставляют межъязыковой сигнал, необходимый классификаторам по каждому языку, — и тот же конвейер генерации распространяется на дальнейшие языки по мере их добавления.
Стек далее по цепочке
Модели, обученные на этих данных, поставляются внутри
little_questions —
офлайн-библиотеки без зависимостей (numpy + onnxruntime) с ONNX-классификаторами
типа предложения для каждого языка и моделью полярности да/нет для 43 языков.
Модели включены прямо в wheel для английского и лениво загружаются для других
языков. Классификаторы типа предложения опубликованы на HuggingFace как
TigreGotico/sentence-types; классификаторы типа ответа EAT обучаются
внутренне и публично не выпускаются.
from little_questions import Sentence
s = Sentence("What time is it?")
print(s.sentence_type) # "question"
print(s.classification) # e.g. "NUM:date"
little_questions — это слой маршрутизации естественного языка для OVOS и
LILACS: классификация того, является ли высказывание вопросом, командой или
утверждением, — это первое решение о диспетчеризации, которое принимает голосовой
конвейер.
sentence-types-multilingual на HuggingFace · little_questions на GitHub