Визуализация 1024D-пространства
Как работает многомерная «близость»
Ищите «car» — и найдёте каждый документ со словом «car». Не найдёте «automobile». Или «vehicle». Или «my Civic needs new brakes».
Десятилетиями это был поиск, возвращавший результаты на основе сходства строк, а не смысла. Google непрерывно делал инкрементальные улучшения инженерией: словари синонимов отображали «car» на «automobile», правила стемминга связывали «running» с «run», а майнинг клик-паттернов выявлял, что люди, ищущие «NYC apartments», хотят тех же результатов, что и «Manhattan rentals». Связи между несовпадающими строками приходилось отображать более или менее вручную.
Эмбеддинги бросили этому вызов идеей, что смысл может быть местом. Преобразуя текст в координаты, похожие концепции оказываются рядом друг с другом. Это отображение семантического пространства не ручное, а эмерджентное из обучающих данных.
Начнём с упрощённого примера.
Представьте, что вы оцениваете каждый документ в корпусе знаний по двум измерениям: насколько он относится к динозаврам и насколько — к американским горкам. Документы о похожих темах окажутся рядом друг с другом.
Начнём всего с трёх источников. Разместите каждый туда, где, по-вашему, ему место.
- Насколько это относится к американским горкам?
- Насколько это относится к динозаврам?
- Детская книга о динозаврах, страница Velocicoaster, целая энциклопедия.
Вы только что отобразили смысл в 2D-пространстве, разложив нашу коллекцию элементов по тому, о чём они.
Теперь поищем в этом пространстве.
Нанесите вопрос на тот же график с теми же осями. Отобразив вопрос той же логикой, которой отображали источники, вы можете быть уверены, что ближайшие элементы будут наиболее релевантными. Бонус: используйте слайдер, чтобы управлять тем, сколько извлекается.
Запрос: «What's the best dinosaur-themed roller coaster?»
Это поиск по сходству в двух словах. Мы наносим вопрос и находим ближайшие k элементов. Вместо сопоставления ключевых слов или таблиц синонимов используем многомерную близость.
Две оси — начало. Но два измерения могут захватить только два концепта. В реальном мире тем больше двух, так что нужно больше измерений.
Что если добавить третью ось? Возьмём биологию.
Детская книга набирает высоко (виды, среды обитания, диеты). Энциклопедия охватывает кое-что. Страница Velocicoaster едва упоминает её.
Три измерения, три координаты на документ. Страница Velocicoaster теперь (0.50, 0.90, 0.05) вместо (0.50, 0.90).
Теперь попробуйте представить четвёртую ось.
Поскольку я существую только в 3 измерениях, лично я не могу, но это на самом деле не важно! Каждое новое измерение просто добавляет ещё одну координату каждой точке и ещё один квадратный член в формулу расстояния. Пространственное представление перестаёт работать на 4D, но математика продолжает работать.
Придётся уйти сильно дальше 4D, потому что реальные эмбеддинг-модели используют около тысячи измерений. Каждый документ и каждый запрос становятся точкой в этом тысячемерном пространстве. «Найти ближайшие документы» всё ещё значит то же, что значило на 2D-графике. Просто вычисление расстояния длиннее.
Оси мы выбрали: динозавры, американские горки, биология. Но кто определяет, какие 1024 темы попадают в реальную эмбеддинг-модель?
По факту никто не решает. Смысл каждой оси эмерджентен (просто появляется при обучении) и в большей степени чёрный ящик. Нельзя посмотреть на измерение 847 и сказать «это ось динозавров». Измерения не соответствуют ничему, что человек мог бы назвать.
Это делает пространство труднее для рассуждений. Нельзя допросить измерение 847, чтобы понять, почему два текста приземлились рядом, или почему что-то, ожидавшееся близким, оказалось далеко.
Так кто назначает координаты? Эмбеддинг-модель. Любая строка на входе, фиксированной длины список чисел на выходе.
Пример: «Employees may work remotely up to two days per week with manager approval.»
Вывод всегда одной длины (1024 значения в нашем конкретном случае, поскольку мы используем эмбеддинг-модель VoyageAI), и это верно, вход ли три слова или три абзаца. Один кусок текста соответствует одной точке в пространстве. Эмбеддинг-модель читает текст и выводит один вектор.
Математически зоркие из вас заметят, что «вектор» и «набор координат» на самом деле не взаимозаменяемы, но для наших целей уместно думать о векторе как об адресе, где этот текст живёт относительно всего остального.
«Ближайший» на нашем 2D-графике значил расстояние по прямой. На практике поиск по сходству использует косинусное сходство. Косинусное сходство — просто другая мера того, насколько похожи два куска текста, основанная на направлении, куда указывают их векторы, а не на том, насколько далеко друг от друга они находятся.
Попробуйте сами! Выберите два источника, чтобы увидеть их косинусное сходство.
Попробуйте сравнить страницу Velocicoaster с книгой о динозаврах — их векторы указывают в очень разных направлениях. Энциклопедия приземляется где-то между всем, что подходит, поскольку она мастер на все руки, но ни в чём не мастер.