Все статьи

· Casimiro Ferreira· 2 мин чтения

Многоязычный датасет типов предложений: вопросы, команды, утверждения

  • Datasets
  • Multilingual
  • NLP
  • Intent
  • Classification
  • FOSS

Логика маршрутизации голосового ассистента зависит от знания того, какого типа предложение он получил, прежде чем он попытается на что-либо ответить. Вопрос требует ответа. Команда требует выполнения. Утверждение может требовать подтверждения или сохранения. Правильно определить эту классификацию на любом языке, на котором говорит пользователь, — это предпосылка для всего остального.

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