- BrainTools - https://www.braintools.ru -

Векторы по косинусу считают. Косинусное сходство, альтернативы, плюс — фановые проекты с эмбеддингами

Недавно мы в Beeline Cloud [1] делали подборку руководств и обучающих материалов [2] по теме эмбеддингов. Сегодня решили поговорить о распространенном подходе к семантическому поиску на основе косинусного расстояния, а также альтернативных методах. Заодно посмотрим на несколько любопытных проектов, использующих векторные представления на практике — среди них, например, сервис, позволяющий сравнить свои технологические предпочтения с интересами известных разработчиков вроде Линуса Торвальдса.

Изображение: Tim Mossholder (Unsplash License)

Изображение: Tim Mossholder (Unsplash License)

Не все так просто с векторами

Косинусное сходство подразумевает расчет косинуса угла между двумя векторами. Чем ближе результат к единице, тем выше семантическая близость — например, высокое значение могут иметь эмбеддинги синонимов «кино» и «фильм». Обычно, если показатель стремится к нулю, это говорит об отсутствии выраженной смысловой близости. Также метрика способна принимать отрицательные значения, что может указывать на смысловую противоположность векторизованных объектов. Так, отрицательное значение косинусной близости могут иметь [3] антонимы («хороший» и «плохой»). Косинусное сходство используют для анализа текста и построения рекомендательных систем. Подход не требует большого количества ресурсов, и его можно реализовать с помощью таких распространенных библиотек, как NumPy и SciPy.

Кстати, подобный подход применялся более тридцати лет назад для фильтрации новостной ленты Usenet [4]. Система SIFT (Scalable Information Filtering Technology) использовала [5] косинусное сходство и алгоритмы кластеризации для поиска релевантных групп и статей. Пользовательский профиль и публикации представлялись в виде взвешенных векторов, после чего вычислялась степень их близости.

Но как это часто бывает, производительность идет рука об руку с некоторыми ограничениями и нюансами. Сравниваемые тексты могут быть разной длины, но, если их содержание похоже, косинусное сходство будет высоким. Так, короткая заметка про автобус и энциклопедическая статья об общественном транспорте могут оказаться близкими с точки зрения [6] косинусного сходства, несмотря на разную «насыщенность», а художественный роман о «попаданце» во времена Великой французской революции — почти идентичным серьезному историческому исследованию потому, что оба текста используют схожий набор тематических слов и понятий.

Проблему точности оценки описали [7] специалисты из южнокорейского научно-исследовательского института, занимающегося морской инженерией и освоением океана. Они исследовали возможность применения косинусного сходства для задач мониторинга и обслуживания ветряных установок, расположенных в открытом море. В рамках эксперимента ученые рассчитывали косинусное расстояние между значениями матрицы оценки повреждений (DEM), где фиксировались данные о характере и локализации возможных дефектов, и векторами повреждений (DRV), отражающими их особенности. Результаты показали, что корректное обнаружение поломок возможно только в случаях, когда их структура почти идентична примерам из эталонной базы.

Специалисты из Netflix в своей научной работе [8] также отмечают некоторые ограничения, связанные с различными методами регуляризации при обучении [9] глубоких моделей — они могут непреднамеренно влиять на степень подобия эмбеддингов. А разработчик Python-библиотеки для визуализации livelossplot [10] Петр Мигдал указывает [11], что, по его опыту [12], аналитики нередко используют косинусное сходство почти автоматически, интерпретируя его как универсальную «меру смысла», хотя на практике все гораздо сложнее. Косинусная близость в 0,82 вовсе не означает «82% похожести». Более того, отрицательные значения метрики далеко не всегда говорят о смысловой противоположности объектов. Как отмечает Мигдал, в большинстве случаев противоположностью осмысленного текста оказывается вовсе не антоним, а просто бессмысленный набор данных или «шум».

Не косинусным сходством единым

Разумеется, помимо косинусного сходства, для сравнения векторов применяют и другие подходы [13]. Большинство из них хорошо изучено, например:

  • Евклидово расстояние [14] представляет линию между двумя точками в векторном пространстве. Метрику можно использовать для измерения дрейфа данных [15] эмбеддингов в моделях компьютерного зрения и системах обработки естественного языка. 

  • Скалярное произведение [16] векторов показывает, насколько два вектора сонаправлены и используется для нахождения длин векторов и углов между ними. Скалярное произведение является базовой операцией «под капотом» систем векторного поиска.

  • Манхэттенское расстояние [17] обозначает сумму модулей разностей координат между двумя точками. Метрика используется чаще всего при работе с наборами данных [18], содержащими компактные или изолированные кластеры (когда точки находятся близко друг к другу или их легко разделить на группы).

Они показывают похожие результаты с точки зрения производительности и точности. В 2024 году ведущий инженер-программист одного из крупнейших банков мира J.P. Morgan провел эксперимент: сгенерировал векторные представления для заголовков 79 публикаций из его блога и 98 поисковых запросов из тестового датасета, а затем сравнил [19] полученные векторы, используя вышеописанные методы. Расчет скалярного произведения занял 0,07 мс, косинусного сходства — 0,12 мс, а евклидова и манхэттенского расстояний — 0,08 и 0,10 мс соответственно. При этом результаты сравнения получились практически идентичными.

Однако сообщество предлагает и более необычные варианты для реализации семантического поиска. Например, специалист, который занимался настройкой систем выдачи результатов в Reddit и Shopify, отмечает, что можно реализовать [20] векторный поиск вообще без эмбеддингов — на основе иерархически управляемых таксономий.

Идея состоит в том, чтобы сопоставлять запросы и контент с иерархией понятий в рамках языка предметной области. Эту иерархию можно представить как дерево папок в файловой системе и попросить языковую модель классифицировать необходимые объекты по соответствующим директориям. Так, если пользователь ищет «лошадку на палке», то прямое совпадение может находиться на пути: Для детей / Детские игрушки / Домашние игрушки / Деревянные лошадки. Аналогичным образом выявляются дочерние категории, которые принадлежат к одной родительской: Для детей / Детские игрушки / Домашние игрушки / Куклы. Степень сходства определяется на основе того, насколько близко расположены те или иные категории на дереве. Ранее этот подход был сложен в реализации и требовал вручную составлять таксономии для сопоставления, но большие языковые модели упростили эту задачу.

Еще один метод предложил [21] исследователь из Университета Пассау в 2024 году. Вместо того чтобы использовать косинусное расстояние, автор предлагает предсказывать семантическое сходство регрессионной моделью. Исследователь представил модель STSScore на базе RoBERTa [22], которую дообучил на задачах из бенчмарка STS-B (эти тесты проверяют, насколько разные метрики семантического сходства идентичны человеческим оценкам — люди оценивают пары предложений по степени схожести по шкале от 0 до 5). Чтобы не сравнивать между собой векторы, на вход модели подаются два текста. Затем она выдает число от 0 до 1, в зависимости от похожести. Но у такого метода есть ограничения — в частности, он уступает эмбеддингам в вопросе универсальности, так как требует адаптации под разные языки.

Поиграться с векторами (и позлить фанатов Тейлор Свифт)

Поделимся несколькими любопытными проектами на основе эмбеддингов, которые можно «покрутить» на досуге, если выдалась свободная минутка.

Изображение: BoliviaInteligente (Unsplash License)

Изображение: BoliviaInteligente (Unsplash License)

GitStars [23]. Автор проекта исходил из предположения о том, что пользователи GitHub используют звезды в качестве закладок: «О, нужно не забыть потом почитать про это подробнее». На основе этих «лайков» энтузиаст создал систему рекомендаций: что нравится тому или иному пользователю, как его предпочтения соотносятся с увлечениями других завсегдатаев площадки (для построения эмбеддингов он использовал более 300 тыс. репозиториев).

К примеру, сервис позволяет сравнить свои интересы с предпочтениями известных разработчиков вроде Линуса Торвальдса. Сейчас его профиль показывает, что он в большей степени специализируется на системном и низкоуровневом программировании, тогда как кроссплатформы выходят за пределы его интересов. Релевантными для Торвальдса являются репозитории Linux, Git и 16-битной операционной системы MikeOS [24]. Наиболее схожи с профилем Торвальдса страницы одного из ключевых Linux-разработчиков Грега Кроа-Хартмана [25] и автора языка Python Гвидо ван Россума [26].

Кстати, предположение автора проекта, что иногда GitHub-звезды используют в качестве закладок, оказалось верным, и с помощью GitStars пользователи начали отыскивать [27] интересные репозитории, про которые ранее забыли или не могли найти.

Развлекаемся с ИИ-эмбеддингами на языке Go [28]. Бывший техлид Docker Hub, будучи поклонником тяжелой музыки, удивлялся феномену популярности Тейлор Свифт. В одной из бесед с фанатами певицы он задумался о том, как относительно объективно сравнить тексты исполнителей из совершенно разных музыкальных жанров. В 2024 году это вылилось в пет-проект, где он использовал эмбеддинги для сравнения лирики поп-артиста и метал-группы.

Для сбора текстов он воспользовался фреймворком gocolly [29], а для построения векторных представлений — моделью OpenAI Ada. Более того, автор проекта решил анализировать тексты не только песен, но и альбомов целиком (для этого он вычислил усредненные эмбеддинги по трекам каждого релиза). В результате были получены 1000-мерные эмбеддинги, которые проецировались в двумерное и трехмерное пространство с помощью PCA и t-SNE.

Визуализация показала, например, что тексты Тейлор Свифт выглядят более однородными по структуре по сравнению с лирикой его любимой группы Masterplan. Дополнительно модель позволила интерпретировать песни через эмбеддинги эмоций [30] — таких как радость, гнев, страх [31] и другие. В частности, у Свифт сильнее проявлялись эмоции [32] радости и удивления, тогда как для метал-группы (очевидно) более характерными оказались тревожность и напряжение.

Сборник языковых игр [33]. Это компактный набор мини-игр (проект под лицензией MIT), которые можно запустить в терминале. В общих чертах геймплей каждой заключается в том, чтобы угадывать слова по различным семантическим подсказкам. За основу вопросов в приложении взяты эмбеддинги GloVe [34]. Автором проекта является инженер-программист из компании Oracle.

Всего в наборе восемь игр. К примеру, одна из них представляет собой классическую «угадайку» в духе горячо/холодно. Приложение дает подсказку, а игрок должен за десять попыток дойти до нужного слова — каждый введенный ответ оценивается по степени косинусного сходства. Ознакомиться со всеми мини-играми можно в репозитории проекта [33] — там есть как скриншоты, так и GIF-файлы с записью геймплея. 

Beeline Cloud [1] — безопасный облачный провайдер. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.

О чем еще рассказываем в нашем блоге на Хабре и на DIY-платформе «вАЙТИ»:

Автор: beeline_cloud

Источник [39]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/31393

URLs in this post:

[1] Beeline Cloud: https://cloud.beeline.ru/?utm_source=owned_media&utm_medium=habr&utm_campaign=beeline_cloud&utm_term=cos

[2] руководств и обучающих материалов: https://habr.com/ru/companies/beeline_cloud/articles/1033544/

[3] могут иметь: https://towardsdatascience.com/demystifying-cosine-similarity/

[4] Usenet: https://en.wikipedia.org/wiki/Usenet

[5] использовала: http://www.ijcset.com/docs/IJCSET12-03-08-023.pdf

[6] зрения: http://www.braintools.ru/article/6238

[7] описали: https://pmc.ncbi.nlm.nih.gov/articles/PMC8778841/

[8] научной работе: https://arxiv.org/pdf/2403.05440v1

[9] обучении: http://www.braintools.ru/article/5125

[10] livelossplot: https://github.com/stared/livelossplot

[11] указывает: https://p.migdal.pl/blog/2025/01/dont-use-cosine-similarity/

[12] опыту: http://www.braintools.ru/article/6952

[13] другие подходы: https://www.ibm.com/think/topics/cosine-similarity

[14] Евклидово расстояние: https://en.wikipedia.org/wiki/Euclidean_distance

[15] дрейфа данных: https://arize.com/blog-course/embedding-drift-euclidean-distance/

[16] Скалярное произведение: https://en.wikipedia.org/wiki/Dot_product

[17] Манхэттенское расстояние: https://en.wikipedia.org/wiki/Taxicab_geometry

[18] работе с наборами данных: https://pmc.ncbi.nlm.nih.gov/articles/PMC4686108/

[19] сравнил: https://tomhazledine.com/cosine-similarity-alternatives/

[20] реализовать: https://softwaredoug.com/blog/2026/01/08/semantic-search-without-embeddings

[21] предложил: https://arxiv.org/pdf/2309.12697

[22] RoBERTa: https://huggingface.co/docs/transformers/model_doc/roberta

[23] GitStars: https://puzer.github.io/github_recommender/

[24] MikeOS: https://github.com/mig-hub/mikeOS

[25] Грега Кроа-Хартмана: https://en.wikipedia.org/wiki/Greg_Kroah-Hartman

[26] Гвидо ван Россума: https://en.wikipedia.org/wiki/Guido_van_Rossum

[27] отыскивать: https://news.ycombinator.com/item?id=46557608

[28] Развлекаемся с ИИ-эмбеддингами на языке Go: https://cybernetist.com/2024/01/07/fun-with-embeddings/

[29] gocolly: https://github.com/gocolly/colly

[30] эмоций: http://www.braintools.ru/article/9540

[31] страх: http://www.braintools.ru/article/6134

[32] эмоции: http://www.braintools.ru/article/9387

[33] Сборник языковых игр: https://github.com/Hellisotherpeople/Language-games

[34] GloVe: https://nlp.stanford.edu/projects/glove/

[35] Выходные — для развития: Пара открытых ресурсов для погружения в инженерию данных: https://habr.com/ru/companies/beeline_cloud/articles/1014908/

[36] Новые векторные СУБД и другие инструменты для эмбеддингов и RAG: https://habr.com/ru/companies/beeline_cloud/articles/918480/

[37] Прогнозатор «Ванга»: как мы автоматизировали предсказание будущего: https://vaiti.io/prognozator-vanga-kak-my-avtomatizirovali-predskazanie-budushhego/

[38] Spring AI: феноменология цифрового сознания, или Как я перестал бояться и полюбил облачные модели: https://vaiti.io/spring-ai-fenomenologiya-czifrovogo-soznaniya-ili-kak-ya-perestal-boyatsya-i-polyubil-oblachnye-modeli/

[39] Источник: https://habr.com/ru/companies/beeline_cloud/articles/1044592/?utm_campaign=1044592&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100