В 5-3 движение стало точкой из 16 чисел. Теперь точкой станут и слова. Мы обучаем текстовую и двигательную воронки вместе, чтобы предложение «손을 흔든다» (машет рукой) и движение взмаха рукой оказались в одном и том же месте одной и той же карты. Посмотрите, как спутанные вначале линии в ходе обучения находят свои пары, а в конце введите предложение и заставьте человечка-палочку двигаться. Даже одно слово «춤춰» (Танцуй!) здесь впервые становится движением.
Для генератора E из 5-3 «место, где собрались броски» нам приходилось выбирать самим. Теперь человек выбирает словами. Для этого слова тоже должны стать точками на карте.
Введите предложение или нажмите на пример. Из 40 фрагментов слов в словаре единицей становятся только те, что есть в предложении. Эти 40 чисел — вход текстовой воронки.
Мешок слов видит в предложении только то, «какие слова в нём есть». Порядок слов, частицы и контекст отбрасываются. Поэтому «버린» (выбросил) в «길에 캔을 던져 버린다» (швыряет банку прямо на улицу) и «버린» в «쓰레기통에 쓰레기를 버린다» (выбрасывает мусор в урну) включают одну и ту же ячейку — хотя одно — выброс мусора, а другое — норма. Эта грубость проявится в виде настоящих ошибок в разделе 6. Способы перевести в числа ещё и порядок, и контекст предложения разбираются в 3-5 и 3-8.
Слева — предложения, справа — движения (порядок нарочно перемешан). Толщина линии — вероятность того, что предложение выберет это движение. Нажмите «Запустить обучение» или двигайте ползунок, чтобы продвинуть обучение.
| Шаг обучения | Потери подбора пар | 7 тестовых предложений → свой вид среди 5 ближайших тестовых движений | 140 тестовых движений → вид ближайшего предложения совпал |
|---|---|---|---|
| 0 | — | 2.9% | 10.0% |
| 10 | 1.763 | 28.6% | 55.0% |
| 25 | 1.317 | 65.7% | 72.1% |
| 50 | 0.395 | 71.4% | 96.4% |
| 100 | 0.090 | 71.4% | 100.0% |
| 400 | 0.010 | 71.4% | 100.0% |
Обучение на экране выше — это тот же расчёт, заново выполненный в браузере (случайные числа другие), поэтому значения по шагам немного отличаются. Из 7 тестовых предложений своё движение нашли 5. Оставшиеся 2 разберём в разделе 6.
По тому же принципу работают CLIP [R1], который так совмещает слова и изображения, и MotionCLIP [R2], который совмещает слова и движения. Настоящие модели используют в качестве текстовой воронки трансформер, а пар у них — сотни миллионов.
Введите предложение и нажмите Enter. «Найти» достаёт с карты ближайшую сцену как есть, а «Создать» получает новое движение из места, где собрались 5 ближайших сцен. Если соединить два предложения через «~다가» (пока…) или «~고 나서» (а после этого…), движения склеиваются одно за другим.
| Способ | 21 обучающее предложение (×5 раз) | 7 тестовых предложений (×5 раз) |
|---|---|---|
| Найти | 100.0% | 71.4% |
| Создать | 100.0% | 71.4% |
Вид созданного движения определялся по тому, к центру какого вида оно ближе всего в латентном пространстве из 5-3. «춤춰» (Танцуй!) → созданное движение отнесено к танцу, ошибка длины костей 5.4%. Склейка: «걸어가다가 손을 흔든다» (идёт и машет рукой) → первая половина «пройти мимо» · вторая половина «помахать рукой»; «손을 흔들고 나서 춤춰» (помаши рукой, а потом танцуй!) → «помахать рукой» · «танцевать»; «캔을 줍고 쓰레기통에 넣는다» (поднимает банку и кладёт в урну) → «поднять» · «положить в урну».
«Создать» в этой части приближает место, где собрались пять ближайших на карте сцен, средним и разбросом и разворачивает результат линейным декодером из 5-3. Настоящие модели генерации движений по тексту используют либо диффузионные модели, которые получают предложение как условие и постепенно очищают движение от шума (MDM [R4]), либо подход, при котором движение превращают в токены и дописывают следующий токен (T2M-GPT [R5]). В качестве обучающих данных широко используется HumanML3D [R3], где к каждому движению люди подписали предложения.
2 из 7 тестовых предложений нашли не те движения. В обоих случаях причина ясна.
| Тестовое предложение | Правильный ответ | Найденные движения (5 ближайших) | Почему ошибка |
|---|---|---|---|
| «길에 캔을 던져 버린다» (швыряет банку прямо на улицу) | Бросить далеко | положить в урну × 5 | «던져» (бросай) — фрагмент, которого не было в обучающих предложениях, а «버린» (выбросил) модель выучила из предложения про урну («쓰레기통에 쓰레기를 버린다», выбрасывает мусор в урну). Не зная контекста, она утянулась к «버린다 = положить в урну» |
| «손을 펴서 떨어뜨리고 걸어간다» (разжимает руку, роняет и уходит) | Уронить под ноги | пройти мимо × 5 | «걸어» (идя) и «간다» (уходит) сильно потянули в сторону «пройти мимо». Мешок слов не знает, какое слово обозначает главное действие (уронить) |
| «걷다가 손 흔들기» (идти, потом помахать рукой) (раздел 5) | пройти мимо → помахать рукой | первая половина — не то | «걷» (идти) есть в словаре, но ни разу не встречается в обучающих предложениях (там везде «걸어»). Ячейка, которой модель не училась, не указывает ни на какое место на карте |
«Найденные движения» в таблице выше — результаты Кода 1. В разделе 5, где обучение заново идёт в браузере, «길에 캔을 던져 버린다» (швыряет банку прямо на улицу) иногда уходит в сторону «поднять». Куда именно её утянет, зависит от случайных чисел при обучении, но причина, по которой не находится бросок, одна и та же: мешок слов не знает контекста.
Оба кода используют только библиотеки, установленные в Colab по умолчанию. Нажмите «Скачать ноутбук (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового ноутбука.
Добавляет сцену танца, превращает предложения в мешок слов, а движения — в 16 чисел, после чего согласует две воронки контрастивным обучением. Выводит потери по шагам обучения и попадания тестовых предложений. Чтобы подставить свои данные, впишите в CAPTIONS поясняющие предложения к своим движениям, а в VOCAB — нужные фрагменты слов.
Обученными воронками находит или заново создаёт движение по предложению, а предложения, соединённые через «~다가» (пока…), склеивает одно за другим. Вид созданного движения определяется в латентном пространстве. Таблица из раздела 5 строится прямо из этого вывода.
Эти промпты нужно вставлять в ИИ-помощники вроде ChatGPT, Qwen или Claude. При нажатии «Копировать» после промпта добавляется выбранный код. Замените текст в 〔 〕 на свою ситуацию.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если вы используете видео с реальными людьми, сначала убедитесь в наличии согласия на съёмку и соблюдении правил обработки персональных данных.
Это тот же словарь, что и у терминов с жёлтым пунктирным подчёркиванием в тексте. Нажмите на название раздела, чтобы перейти туда, где термин встретился впервые.
Аналогия — первый шаг к пониманию, но и семя заблуждения. У аналогий с человеческим восприятием указана сила соответствия. Прямая — есть данные, что это действительно делает то же самое · Частичная — похожи лишь некоторые свойства · Нет — соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с восприятием человека | Где аналогия не работает |
|---|---|---|---|
| Мешок слов | Разрезать предложение на карточки со словами, сложить в мешок и потрясти | Нет | У карточек, вынутых из мешка, нет порядка. «Собака кусает человека» и «Человек кусает собаку» становятся одинаковыми |
| Контрастивное обучение | Карточная игра на подбор пар: верные пары соединяем, неверные разъединяем | Отчасти как ребёнок, который слышит слова и одновременно видит действие, и так усваивает их значение | Ребёнку хватает нескольких раз, а модели нужно увидеть одну и ту же пару сотни раз, и слова без пары она так и не узнает |
| Общая карта | Поместить слова двух языков в один словарь | Нет | В словаре соответствия задаёт человек, а на этой карте они возникают только из данных о парах. Слова, у которых мало пар, оказываются не на своём месте |
| Найти против создать | Взять книгу в библиотеке против прочитать похожие книги и написать новый текст | Нет | За новым текстом стоит замысел автора, а «создать» в этой части лишь берёт точку рядом со средним пяти ближайших сцен |
| Склеить | Указания хореографа: «сначала сделай ~, а потом ~» | Отчасти двигаться в порядке слов предложения | Хореограф делает переход естественным, а здесь просто смешиваются 10 кадров |
E-1 Об авторе · E-2 Научные источники · E-3 Источники рисунков и чисел
Методическая памятка для преподавателей, наставников по обучению на рабочем месте (OJT) и тьюторов. Время указано ориентировочно — подстройте его под своё занятие.
| Для кого | Студенты и работающие специалисты, прошедшие 5-3. Менеджеры и практики, которые хотят понять, что внутри генеративного ИИ, который «выдаёт результат по промпту» |
|---|---|
| Что нужно знать заранее | Латентное пространство из 5-3, скалярное произведение и софтмакс (3-2 · 3-8) |
| Цели обучения | ① Объяснить простейший способ превратить предложение в числа (мешок слов) и его ограничения ② Рассказать, как контрастивное обучение согласует две воронки по правилу «пары — ближе, чужие — дальше» ③ На примерах показать разницу между «найти», «создать» и «склеить» на общей карте |
| Ориентировочное время | Чтение 30–40 мин · демонстрация анимаций 25 мин · практика в Colab 25 мин (Код 1 — 12 мин, Код 2 — 13 мин) |
Введение 5 мин (раздел 1) → раздел 2, мешок слов, 8 мин → раздел 3, запуск обучения, 15 мин → раздел 4, карта, 7 мин → раздел 5, ввод предложений, 10 мин → раздел 6, ошибочные предложения, 5 мин.
Разделы 2 · 3 — 20 мин → по таблице из раздела 6 обсуждение «слова, которые модель знает и не знает» — 15 мин → в разделе 5 команды ищут предложения, которые работают и не работают, — 20 мин → добавить новые предложения в Код 1 и переобучить — 25 мин → подведение итогов — 10 мин.
Начинающим — только разделы 2 · 3 · 5. Учащиеся среднего уровня вручную, на таблице 2 × 2, разбираются, почему одна строка G = (P − I + Q − I) / 14 из Кода 1 «поднимает диагональ и опускает всё остальное».
| Раздел | Вопрос, на котором стоит остановиться | Совет по управлению |
|---|---|---|
| 2 Слова — это числа | «Почему у „캔을 던진다“ (бросает банку) и „던진다 캔을“ (те же слова в обратном порядке) одинаковые числа?» | Нажимать два примера по очереди |
| 3 Подбор пар | «За сколько шагов линии нашли свои пары? А для тестовых предложений?» | После запуска обучения переключиться на «Тестовые предложения» |
| 4 Общая карта | «Где были ромбы до обучения?» | Перетащить ползунок шагов с 400 на 0 |
| 5 Слова → движение | «Чем отличаются результаты „Найти“ и „Создать“?» | Несколько раз нажать «춤춰» (Танцуй!) в режиме «Создать» |
| 6 Ограничения | «Что нужно изменить, чтобы „던져 버린다“ (швыряет) находилось правильно?» | Проверить самим, введя это предложение в разделе 5 |
| Заблуждение | Правильное объяснение | Что показать |
|---|---|---|
| ИИ понимает смысл предложения и по нему выбирает движение | Он лишь превращает предложение в числа и ищет ближайшее место на карте. В этой части числа — это всего лишь наличие или отсутствие фрагментов слов | Раздел 2, раздел 6 |
| Для контрастивного обучения нужны метки с правильными ответами | Достаточно пар вида «это предложение и это движение — пара». Названия видов не используются | Разбор в разделе 3 |
| Если потери при обучении близки к 0, модель хорошо угадывает и незнакомые предложения | Потери считаются по обучающим предложениям. Из тестовых предложений угадано только 5 из 7 | Таблица раздела 3 |
| Чем длиннее и подробнее предложение, тем всегда лучше результат | Если примешиваются слова не из словаря или слова других движений, предложение, наоборот, утягивает не туда | Раздел 6: «손을 펴서 떨어뜨리고 걸어간다» (разжимает руку, роняет и уходит) |
| «Создать» создаёт совершенно новое движение, которого не было в обучающих данных | Оно берёт точку рядом с местом, где собрались ближайшие на карте сцены. За пределы выученных видов движений почти не выходит | Раздел 5: «날아올라» (Взлетай!) |
[1, 1, 1, 1]. Все четыре фрагмента присутствуют. Это предложение окажется где-то между броском и взмахом рукой.
e³ / (e³ + e¹) ≈ 0.881, e¹ / (e³ + e¹) ≈ 0.119. Обе воронки правятся так, чтобы диагональ (0.881) поднималась к 1, а ячейка не-пары (0.119) опускалась к 0.
У движений 420 сцен, так что форма каждого вида хорошо определена, а у предложений всего по 3 обучающих на вид, и мешок слов не знает контекста. Когда приходит незнакомое сочетание слов, текстовая воронка «плывёт».
«걷» (идти) есть в словаре, но ни разу не встречается в обучающих предложениях. Вес этой ячейки остался исходным маленьким случайным значением, поэтому на карте он не указывает ни на какое осмысленное место. Если заменить на «걸어가다가» (идёт и…), получится «пройти мимо».
«Найти». Оно достаёт обучающую сцену как есть, поэтому, если это данные о движениях реального человека, его движения воспроизводятся без изменений (как у генератора C из 5-2). «Создать» генерирует заново из места, где собрались несколько сцен.
В CAPTIONS Кода 1 замените одно из обучающих предложений для броска на предложение, похожее на «길에 캔을 던져 버린다» (швыряет банку прямо на улицу), и переобучите. Сообщите, как изменились попадания тестовых предложений.
Вместо мешка слов напишите функцию bag, которая использует «перекрывающиеся фрагменты по два символа» (напр. «던져» → «던», «져», «던져»), и по попаданиям тестовых предложений сравните, лучше ли она справляется с незнакомыми словами («걷다가», пока идёт).
| Новичкам | Даже один запуск обучения в разделе 3 даёт понимание того, что модель «учится, подбирая пары» |
|---|---|
| Углублённо | Положить рисунок 1 из статей CLIP и MotionCLIP рядом с разделом 3 этой части и попросить учащихся рассказать о сходствах и различиях |
| Следующая часть | 5-5 От «Танцуй!» к видео с танцем — одеваем танец человечка-палочки в облик Ассистента |
Вы дочитали часть «5-4 От слов к движению» до конца. Команда лаборатории подводит итоги — каждый по одной фразе.