Natural Language Understanding (NLU)
Понимание естественного языка (NLU) — направление NLP, которое извлекает из текста смысл, намерения и сущности, например в голосовых помощниках и поисковых системах.
Понимание естественного языка (NLU) — это часть обработки естественного языка (NLP), которая определяет смысл текста: чего хочет автор, что он упоминает и какой смысл имеется в виду, если слова допускают несколько толкований. Система NLU преобразует фразу «Забронируй столик на двоих завтра в 7» в структурированный запрос: намерение, например reserve_table, и слоты для количества гостей, времени и даты, с которыми может работать программа. Виртуальные ассистенты, чат-боты службы поддержки и поисковые системы запускают NLU для каждого запроса, прежде чем решить, что делать или отвечать.
Почему понимать язык сложно#
Одни и те же слова могут иметь разный смысл на каждом уровне. «Bank» может означать банк или берег реки; фраза «Я увидел человека с телескопом» не уточняет, у кого телескоп; а в предложении «Трофей не помещается в коричневый чемодан, потому что он слишком большой» местоимение «он» относится к трофею, но если заменить «большой» на «маленький», оно будет относиться к чемодану. В 2011 году Гектор Левеск предложил такие схемы Винограда в качестве теста машинного понимания, поскольку для их разрешения нужны знания об окружающем мире, а не статистика слов. Ранние системы на основе правил, такие как SHRDLU Терри Винограда (1968–1970), понимали текстовые команды только в пределах симулированного мира блоков, полностью описанного правилами системы.
Основные задачи NLU#
- Классификация намерений: Относит запрос к одной из целей приложения, например проверке баланса или блокировке карты.
- Распознавание именованных сущностей (NER): Находит людей, места, товары, даты и суммы, упомянутые в запросе; ассистенты используют эти данные, чтобы заполнять слоты намерения.
- Семантический разбор: Сопоставляет предложению формальное представление, которое может выполнить программа, например запрос к базе данных или вызов API.
- Разрешение кореференции: Связывает местоимения и другие отсылки с сущностями, к которым они относятся.
- Логический вывод на естественном языке: Определяет, следует ли одно предложение из другого, противоречит ему или нейтрально по отношению к нему.
- Анализ тональности: Определяет мнение, выраженное в тексте.
Ассистенты обычно классифицируют намерения с помощью дообученного кодировщика на основе трансформера. Кодировщик предложений также может классифицировать намерения в режиме one-shot, используя по одному примеру для каждого: он выбирает намерение, пример которого наиболее близок по смыслу к запросу:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# One labeled example per intent, as an assistant's training data would provide
intents = {
"check_balance": "What is my account balance?",
"block_card": "Please freeze my debit card",
"transfer_money": "Send money to another account",
}
utterances = ["my card was stolen", "how much cash do I have left", "pay Alex back 20 dollars"]
# Assign each utterance the intent whose example is closest in meaning
scores = model.similarity(model.encode(utterances), model.encode(list(intents.values())))
for text, row in zip(utterances, scores):
best = int(row.argmax())
print(f"{text!r} -> {list(intents)[best]} ({row[best]:.2f})")Все три запроса получают верное намерение: block_card (0.42), check_balance (0.49) и transfer_money (0.28). Фразы «сколько денег у меня осталось» и «верни Алексу 20 долларов» не содержат ни одного общего слова с примерами намерений, поэтому совпадение определяется эмбеддингами, а не ключевыми словами. Запрос на перевод денег получает наибольшую оценку — всего 0.28 против 0.17 у других намерений; фреймворки, такие как Rasa, отправляют запросы с оценкой ниже порога уверенности в резервный сценарий, который просит пользователя переформулировать запрос.
Тесты и модели#
GLUE (2018) объединил девять задач с предложениями и парами предложений, включая анализ тональности, обнаружение перефразирования и логический вывод на естественном языке, в единую оценку, а BERT подняла её до 80.5 в 2018 году. Более сложный преемник GLUE, SuperGLUE (2019), добавил разрешение кореференции в стиле Винограда; в январе 2021 года DeBERTa от Microsoft и T5 + Meena от Google обе превысили человеческий базовый результат 89.8. Высокие оценки могут быть следствием обучения на поверхностных признаках: в 2018 году Сучин Гуруранган и его коллеги показали, что классификатор, анализирующий только второе предложение каждой пары для логического вывода, правильно размечал около 67% набора данных SNLI, поскольку такие признаки, как слова с отрицанием, коррелируют с меткой «противоречие». Сегодня большие языковые модели (LLM) выполняют большинство задач NLU по текстовой подсказке, а небольшие модели-кодировщики остаются востребованными там, где важны задержка и стоимость запроса.
NLU в поиске и компьютерном зрении#
Семантический поиск применяет NLU к запросам и сопоставляет их смысл, а не точные слова; векторный поиск позволяет быстро выполнять такой поиск среди миллионов объектов. Та же идея работает между разными модальностями, если текст и изображения представлены в общем пространстве эмбеддингов, как в CLIP. Вкладка Images на странице Explore платформы Ultralytics принимает описание сцены, например «кошки на диване», и возвращает изображения из общедоступных наборов данных по их содержимому, не полагаясь на имена файлов или теги.
NLU и связанные термины#
- NLP: Вся область вычислительной обработки человеческого языка. NLU интерпретирует входные данные, а генерация естественного языка (NLG) создаёт выходные.
- Распознавание речи: Преобразует устную речь в текст, который затем интерпретирует NLU.
- Оптическое распознавание символов (OCR): Извлекает символы из изображений с текстом, который NLU затем может прочитать и понять.
- Ответы на вопросы: Даёт ответы на вопросы на естественном языке; для этого NLU должна интерпретировать и вопрос, и текст с ответом.










