
Полная версия:
Вектор смысла: новый квадрант. Навигация в пространстве векторного поиска
Слова с похожим значением получали близкие векторы. «Король» оказывался рядом с «королевой», «принцем», «монархом». «Бежать» – рядом с «мчаться», «нестись», «спешить». «Париж» – рядом с «Лондоном», «Берлином», «Римом». Сеть никто не учил, что это столицы. Она сама обнаружила это, наблюдая за контекстами.
Но главное открытие было другим.
Миколов взял вектор слова «король». Вычел из него вектор слова «мужчина». Прибавил вектор слова «женщина». И получил вектор, ближайшим соседом которого оказалась «королева».
King – Man + Woman = Queen.
Стоит остановиться и подумать, что здесь произошло.
Это не метафора. Это буквальная арифметика над векторами. Вычитание и сложение чисел – сотен чисел, но всё равно просто чисел. И результат имеет смысл. Человеческий, интуитивно понятный смысл.
Никто не программировал это правило. Никто не говорил системе, что королева – это женский эквивалент короля. Никто не вводил понятия пола, статуса, власти. Сеть сама извлекла эти абстракции из текстов, наблюдая только за тем, какие слова стоят рядом.
Что это значит? Это значит, что разница между «королём» и «мужчиной» – это что-то вроде «королевскости», статуса, власти. Направление в пространстве, которое можно отделить от конкретных слов. Если добавить этот «королевский» компонент к «женщине», получится «королева». Математика поймала абстрактное понятие, которое, казалось, существует только в человеческом сознании.
Это работало не только для королей. «Париж» минус «Франция» плюс «Италия» давало «Рим». Столица минус страна плюс другая страна – столица той страны. «Москва» минус «Россия» плюс «Япония» – «Токио». Географические отношения закодированы в направлениях пространства.
«Плавать» минус «плавание» плюс «бег» давало «бежать». Инфинитив минус существительное плюс другое существительное – соответствующий инфинитив. Грамматические отношения тоже закодированы. Превращение глагола в существительное – это направление, которое можно применить к другим глаголам.
Сравнительная степень тоже оказалась направлением: «больше» минус «большой» плюс «хороший» давало «лучше». Применив то же направление к «маленький», получали «меньше».
Исследователи находили всё новые примеры. Антонимы оказывались связаны предсказуемым образом. Множественное число отличалось от единственного на один и тот же вектор для разных слов. Прошедшее время – на другой. Языковая структура проявлялась как геометрия пространства.
Векторы выучили грамматику. Выучили географию. Выучили семейные отношения: «отец» минус «мужчина» плюс «женщина» давало «мать». Выучили профессиональные: «доктор» и «медсестра» связаны так же, как «король» и «королева». Никто их этому не учил напрямую – они извлекли эти закономерности из того, как слова встречаются рядом друг с другом в текстах.
Момент стоит осознать. Десятилетиями лингвисты строили сложные теории значения. Философы спорили о природе смысла. А тут – простая нейросеть, обученная угадывать соседние слова, вдруг демонстрирует понимание абстрактных отношений между понятиями. Не идеальное понимание, не человеческое – но работающее. Измеримое. Вычислимое.
Почему это сработало? Потому что Фёрс был прав: слово определяется своим окружением. «Король» появляется в контекстах о власти, тронах, коронах, указах. «Королева» – в очень похожих контекстах. Нейросеть, пытаясь предсказать контекст, вынуждена поместить эти слова близко друг к другу во внутреннем пространстве. Иначе она не сможет делать правильные предсказания.
А «мужчина» и «женщина» появляются в контекстах, которые отличаются предсказуемым образом. Там, где про мужчину скажут «он», про женщину скажут «она». Где у мужчины «жена», у женщины «муж». Эта систематическая разница кодируется как направление в пространстве – вектор, который можно прибавить или вычесть.
Технически Word2Vec устроен просто – проще, чем можно было бы ожидать от такого открытия. Есть два варианта архитектуры. Первый – CBOW, Continuous Bag of Words: сеть получает на вход несколько слов вокруг пропуска и пытается угадать пропущенное слово. Контекст предсказывает центр. Второй – Skip-gram: сеть получает одно слово и пытается предсказать его окружение. Центр предсказывает контекст. Skip-gram работает лучше для редких слов и больших корпусов, CBOW быстрее обучается на небольших данных. Оба дают похожие результаты.
Сама нейросеть – всего два слоя. Входной слой, скрытый слой, выходной слой. Никаких глубоких архитектур, никаких десятков слоёв. Простота была осознанным выбором: Миколов хотел, чтобы модель можно было обучить на огромных данных за разумное время. Глубокие сети учатся медленно. Простая сеть на миллиарде слов побеждает сложную на миллионе.
Размерность векторов – параметр. Можно взять сто измерений, можно триста, можно тысячу. Больше измерений – больше нюансов можно уловить, но и больше данных нужно для обучения. На практике часто используют от ста до пятисот измерений. Каждое измерение – не какое-то конкретное свойство вроде «одушевлённость» или «размер». Это абстрактные оси, которые сеть создаёт сама. Человеку они не интерпретируемы напрямую, но в совокупности они кодируют смысл.
Обучение требует много данных – миллионы и миллиарды слов. Но само по себе обучение быстрое, потому что архитектура простая. На одном компьютере можно обучить модель за часы или дни. По меркам современных нейросетей – мгновенно.
Результат – таблица. Каждому слову из словаря соответствует строка чисел – его вектор. Словарь может содержать сотни тысяч слов. Эту таблицу можно сохранить, распространить, использовать где угодно. Обучение делается один раз, использование – бесконечно.
После публикации Миколова начался бум. Исследователи по всему миру воспроизводили эксперименты, находили новые примеры векторной арифметики, применяли Word2Vec к своим задачам. Статья набрала тысячи цитирований за первый год – редкость для академической работы.
Качество машинного перевода выросло. Раньше системы перевода работали с отдельными словами и фразами, не понимая связей между ними. Теперь переводчик мог использовать то, что «большой» и «огромный» близки, даже если точного перевода в словаре нет.
Поиск стал умнее. Запрос «как починить автомобиль» стал находить статьи про ремонт машин. Не потому что кто-то вручную добавил синоним – потому что векторы этих слов близки.
Системы рекомендаций научились понимать, что пользователю, который читал про «автомобили», может быть интересно и про «машины», и про «транспорт», и про «двигатели». Не потому что это прописано в правилах – потому что эти слова образуют кластер в пространстве смыслов.
Чат-боты стали чуть менее тупыми. Анализ тональности текстов стал точнее. Классификация документов улучшилась. Везде, где раньше приходилось вручную создавать словари и правила, теперь можно было использовать готовые векторы.
Но Word2Vec имел ограничения, и их важно понимать. Не для того чтобы принизить достижение – для того чтобы видеть, куда двигаться дальше.
Первое: один вектор на слово. «Банк» – финансовая организация или берег реки? У Word2Vec один вектор на слово «банк», усреднённый по всем контекстам. В нём смешаны оба значения. Это как средняя температура по больнице – формально верно, практически бессмысленно.
Для редких значений это особенно болезненно. Слово «мир» чаще означает вселенную или отсутствие войны, чем крестьянскую общину. Вектор сдвинут к частым значениям. Редкое значение почти невидимо.
Второе: вектор слова не зависит от контекста. «Холодный приём» и «холодный чай» используют слово «холодный» в разных значениях – метафорическом и буквальном. Но вектор у него один и тот же. «Тяжёлый рок» и «тяжёлый камень» – один вектор «тяжёлый». Word2Vec знает типичные контексты слова, но не адаптируется к конкретному употреблению.
Это фундаментальное ограничение. Смысл слова проявляется в контексте. Без контекста он неопределён. А Word2Vec игнорирует контекст при использовании – только при обучении.
Третье: только слова. Word2Vec работает с отдельными словами, не с фразами, не с предложениями, не с документами. Чтобы получить вектор предложения, нужно как-то скомбинировать векторы слов – усреднить, сложить, взять взвешенную сумму. Это работает, но грубо.
«Не люблю» – это не сумма «не» и «люблю». Отрицание меняет смысл полностью, а не складывается с ним. «Собака укусила человека» и «человек укусил собаку» состоят из одних слов, но означают разное. Порядок важен, а Word2Vec его теряет при переходе к фразам.
Четвёртое: статичность. Обученные векторы фиксированы. Если появилось новое слово или у старого слова появилось новое значение – нужно переобучать всю модель. «Ковид» в 2019 году не существовал. «Твитнуть» в 2005 году не существовало. Язык живёт и меняется, а векторы застывают в моменте обучения.
Эти ограничения будут преодолены позже – в следующих поколениях моделей. Но даже с ними Word2Vec изменил ландшафт. Он показал, что смысл можно вычислять. Что похожесть слов можно измерять расстоянием. Что математика способна ловить абстрактные отношения между понятиями.
Это был концептуальный сдвиг. До Word2Vec компьютеры работали с символами – последовательностями букв, которые нужно было точно сопоставлять. После Word2Vec компьютеры стали работать со смыслами – точками в пространстве, между которыми можно измерять расстояние.
До Word2Vec эмбеддинги были экзотикой – интересной идеей без практического воплощения. После Word2Vec они стали инструментом. Каждый мог скачать готовые векторы, обученные на миллиардах слов, и использовать их в своих приложениях. Барьер входа упал почти до нуля.
Google выложил предобученные векторы в открытый доступ. Три миллиона слов и фраз, трёхсотмерные векторы, обученные на корпусе Google News – сто миллиардов слов. Скачать, загрузить, использовать. Строчка кода – и у тебя есть вектор любого английского слова.
И что ещё важнее – Word2Vec показал направление. Если нейросеть может выучить смысл слов, предсказывая контекст, то почему бы не применить тот же принцип к чему-то ещё? К предложениям. К документам. К изображениям. К звукам. К видео. К чему угодно.
Принцип работал. Оставалось его обобщить.
3.3. От слов к чему угодно
Word2Vec открыл дверь. За ней оказался целый мир.
Почти сразу после публикации Миколова появились вариации. В Стэнфорде создали GloVe – Global Vectors. Другой подход к той же идее: вместо нейросети, предсказывающей контекст, матричное разложение статистики совместной встречаемости слов. Математика другая, результат похожий. Векторы GloVe тоже демонстрировали арифметику смыслов, тоже группировали синонимы, тоже работали в приложениях.
Facebook1 выпустил FastText. Главная инновация – работа с частями слов, не только с целыми словами. Слово «бесполезный» разбивается на части: «бес», «полез», «ный». Каждая часть имеет свой вектор. Вектор слова – сумма векторов частей. Это решало проблему редких и новых слов. Никогда не видел слово «суперполезный»? Не страшно – его можно собрать из знакомых частей.
Но настоящий прорыв случился в 2018 году.
BERT – Bidirectional Encoder Representations from Transformers. Название громоздкое, идея революционная. Вместо одного вектора на слово – разные векторы в зависимости от контекста. «Банк» в предложении о деньгах и «банк» в предложении о реке получают разные векторы. Наконец-то.
Ключевое слово – bidirectional, двунаправленный. Word2Vec тоже видит контекст с обеих сторон – но создаёт один вектор на слово, усреднённый по всем употреблениям в корпусе. BERT работает иначе: он смотрит на конкретное предложение и создаёт вектор слова именно для этого употребления. Когда он вычисляет вектор слова в середине предложения, он уже «видел» и начало, и конец. Контекст полный, не частичный.
BERT использует архитектуру трансформера – механизм внимания, который позволяет каждому слову «смотреть» на все остальные слова в предложении и решать, какие из них важны для понимания текущего слова. Когда модель вычисляет вектор слова «банк», она видит соседние слова: «деньги», «кредит», «счёт» – и понимает, какое значение имеется в виду. Или видит «река», «берег», «вода» – и выбирает другое значение. Внимание распределяется динамически, по-разному для разных предложений.
Это не просто улучшение – это качественный скачок. Word2Vec знал про слово всё, что можно знать в среднем. BERT знает про слово в конкретном употреблении. Разница как между словарной статьёй и живым разговором.
BERT обучался на двух задачах. Первая – угадать замаскированное слово в предложении. Случайные слова закрываются маской, модель пытается их восстановить по контексту. Это как Word2Vec, но сложнее: нужно учитывать всё предложение, не только ближайших соседей. Вторая задача – определить, следует ли одно предложение за другим в оригинальном тексте. Это учит модель понимать связи между предложениями, логику повествования.
После BERT появились десятки вариаций. RoBERTa – тот же BERT, но обученный тщательнее, на большем количестве данных. ALBERT – облегчённая версия для случаев, когда важна скорость. DistilBERT – ещё легче, с минимальной потерей качества. XLNet, ELECTRA, DeBERTa – каждая модель пробовала новые трюки, выжимала ещё немного качества.
Для русского языка появился RuBERT, обученный на русских текстах. Для медицинских текстов – BioBERT. Для юридических – LegalBERT. Для научных статей – SciBERT. Специализированные модели для специализированных задач.
Но BERT работал только с текстом. А что если нужно векторизовать изображение?
Ещё до BERT свёрточные нейросети научились распознавать объекты на фотографиях. ImageNet, AlexNet, VGG, ResNet – каскад архитектур, каждая точнее предыдущей. Эти сети обучались классифицировать картинки: кошка или собака, автомобиль или велосипед. Но внутри них формировались представления – векторы, которые сеть использовала для классификации.
Исследователи обнаружили, что эти внутренние представления полезны сами по себе. Если взять предпоследний слой сети, обученной на ImageNet, – получится вектор изображения. Похожие изображения дают близкие векторы. Сеть, обученная отличать кошек от собак, попутно научилась понимать, что две фотографии кошек похожи друг на друга больше, чем кошка и собака.
Это работало, но с ограничением. Сети классификации понимали объекты, но не понимали связи между изображениями и текстом. Фотография кошки давала вектор, но этот вектор жил в своём пространстве, отдельном от пространства слов. Нельзя было найти изображение по текстовому запросу, потому что текст и картинки существовали в разных мирах.
В 2021 году OpenAI представил CLIP – Contrastive Language-Image Pre-training. Идея элегантная: обучить модель так, чтобы изображение и его текстовое описание получали близкие векторы. Фотография кошки и фраза «рыжий кот на подоконнике» должны оказаться рядом в едином пространстве. Разные модальности – один язык векторов.
CLIP обучался на четырёхстах миллионах пар «картинка + подпись», собранных из интернета. Подписи к фотографиям, описания товаров, альтернативный текст для изображений – всё, что люди написали рядом с картинками. Данные шумные, не всегда точные, но их много. А в глубоком обучении количество часто важнее качества.
Две сети работают параллельно: одна – визуальный энкодер – превращает изображение в вектор, другая – текстовый энкодер – превращает текст в вектор той же размерности. Задача при обучении – сделать так, чтобы вектор картинки был близок к вектору её подписи и далёк от векторов чужих подписей. Контрастивное обучение: притягивать правильные пары, отталкивать неправильные.
После обучения происходит магия. Можно взять любое изображение, получить его вектор. Взять любой текст, получить его вектор. Сравнить. Если близки – изображение соответствует описанию. Поиск картинок по тексту. Поиск текста по картинке. Единое пространство смыслов для разных модальностей.
«Закат над морем» – и система находит фотографии закатов. Не потому что кто-то разметил их словом «закат». Потому что вектор фразы близок к векторам соответствующих изображений. Модель никогда не видела конкретно эту фотографию с этим описанием – она обобщила принцип.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.
Примечания
1
Сервис принадлежит организации, деятельность которой запрещена на территории РФ; здесь и далее.
Вы ознакомились с фрагментом книги.
Для бесплатного чтения открыта только часть текста.
Приобретайте полный текст книги у нашего партнера:
Полная версия книги
Всего 10 форматов

