Вы когда-нибудь задумывались, как веб-сайты все еще знают, что вы имеете в виду, даже когда вы вырезаете написание слова в строке поиска? Если да, то эта статья для вас! Мы обсудим концепцию, математику и пошаговый пример того, как сходство между словами рассчитывается на многих веб-сайтах с помощью метода косинусного сходства.

И не волнуйтесь, если простая концепция тригонометрии кажется вам сейчас пугающей. Эта часть проведет вас через интуицию каждой соответствующей концепции, от значения косинуса до логики скалярного произведения. Никаких предварительных знаний не требуется.

Слова в векторном пространстве

В моей предыдущей статье мы рассмотрели, как языковые модели ИИ преобразуют слова в числа с помощью метода встраивания слов. Результатом этого процесса является большая матрица, в которой каждая строка содержит слово, а каждый столбец содержит значение указанного измерения слова. В статье мы также рассмотрели, как BERT (модель, используемая в ChatGPT) создает 768 измерений для каждого слова с помощью нейронных сетей-трансформеров.

Но если вы помните, прежде чем мы углубились в BERT, мы использовали более простой пример, чтобы проиллюстрировать концепцию встраивания слов. Мы вернемся к этому простому примеру в этой статье:

В этом примере мы выбираем три слова: «Снег», «Катание на лыжах» и «Рафаэль», и приходим к трем возможным свойствам этих слов, присваивая каждому признаку значение 0 или 1 в зависимости от того, являются они или нет. присутствует в нашем слове. Поскольку мы имеем дело только с тремя функциями, а не с 768, мы можем отобразить каждую функцию на трехмерной оси и получить линейное представление каждого слова — другими словами, мы можем представить слова в векторном пространстве.

Теперь, когда мы можем представлять слова в виде векторов, мы можем начать применять наш метод косинусного сходства, чтобы определить, насколько они близки или далеко друг от друга, и, таким образом, использовать это число несколькими полезными способами.

Но подождите, что такое косинус?

Скажу честно — я не думаю, что понял истинное значение функции косинуса, когда впервые изучил ее в старшей школе. Может быть, я был слишком занят, совмещая больше уроков, чем должен был, или был неприспособленным подростком, или я не знаю — может быть, это просто плохо объяснили! Дело в том, что только много позже я действительно понял функцию косинуса.

Функция косинуса сообщает нам пропорцию линии, которую можно отнести к ее горизонтальной составляющей. Позвольте мне проиллюстрировать это простой, но крайне непрактичной физической задачей:

Представьте, что вы толкаете гигантский валун на вершину холма. Это тяжелый валун, поэтому вы должны приложить много усилий! Часть этой силы приходится на работу ног, когда вы двигаетесь горизонтально,а часть — вертикально, когда вы толкаете вверх. Разбив вашу силу на обе составляющие, мы можем внезапно смоделировать эту проблему с помощью треугольника!

В приведенном выше примере косинус угла между линией c, которая представляет результирующую силу, и линией a, которая представляет нашу работу ног, может сказать нам, какая часть сила c может быть отнесена к его горизонтальной составляющей a — другими словами, насколько большая часть силы, действующей на валун, может быть объяснена работой наших ног.

Допустим, мы измеряем работу ног, чтобы она имела значение 4, и допустим, мы измеряем результирующую силу, чтобы она имела значение 5. Косинус угла между ними равен 4, делённому на 5, или 0,8. Это говорит нам о том, что 80% результирующей силы можно отнести к работе ног.

Если вы не знакомы ни с одной из приведенных выше нотаций, это может быть немного ошеломляющим. Но я надеюсь, что общая картина здесь ясна — когда у нас есть векторы, мы можем формировать треугольники и использовать тригонометрические свойства, чтобы делать убедительные выводы о том, что векторы пытаются представить.

Другой способ вычисления косинусов

В приведенном выше примере фигурирует прямоугольный треугольник с углом 90 градусов. Но когда мы имеем дело с более сложными треугольниками, математика выглядит немного по-другому. Хотя интуитивное представление о косинусе остается прежним — что он представляет горизонтальные вклады в результирующий вектор — нам нужен другой способ его вычисления. Еще раз позвольте мне проиллюстрировать новую формулу еще одной причудливой физической задачей — той, в которой вы бросаете надувной мяч, но приходит сильный ветер и отбрасывает мяч немного назад от того места, где вы намеревались его бросить.

В этом случае наша результирующая сила кажется явно меньшей, чем ее горизонтальная составляющая, но при ближайшем рассмотрении оказывается, что это не совсем так. Результирующая сила учитывает горизонтальную составляющую броска, представленную линией a, а также горизонтальную составляющую ветра, дующего в противоположном направлении. Подобие косинуса по-прежнему представляет горизонтальную пропорцию к силе, но мы больше не можем только рассматривать линию a как визуальное представление горизонтальной составляющей. Часть его также лежит в горизонтальной составляющей линии c. Хорошая новость заключается в том, что существует общая формула для функции косинуса, которая работает для любого треугольника. Если вас интересует более глубокий вывод формулы, эта ссылка прямо здесь для вас! Чтобы не усложнять эту часть, я просто объявлю приведенное ниже уравнение вместе с решением задачи.

Как видим, 0,95, или 95%, равнодействующей силы все же можно объяснить горизонтальными составляющими броска и дуновением ветра. Это отличная иллюстрация того, как важно учитывать направление при работе с векторами.

Рафа, теперь я понимаю косинусы, но что такое подобие косинусов?

Косинусное сходство — это метод, используемый для сравнения того, как векторы связаны друг с другом, по косинусу угла, который они образуют. Другими словами, вычисляя косинус угла между двумя векторами, мы вычисляем их косинусное сходство. Здесь нет никакой хитрости — это буквально определение косинусного сходства.

Косинусное сходство между любыми двумя векторами все еще пытается ответить на вопрос о горизонтальной атрибуции. Это потому, что даже если ни один из векторов сначала не кажется горизонтальным, мы всегда можем повернуть плоскость отсчета, чтобы искусственно сделать один из них таким.

В этот момент было бы справедливо с вашей стороны спросить — а что в этом такого особенного? Если слова можно интерпретировать как линии, образующие треугольник, что такого важного в их косинусном сходстве? И ответ заключается в том, что сходство косинусов также работает для задач, которые не начинаются с треугольников.

В предыдущей статье мы говорили о том, как BERT, модель ChatGPT, использует 768 измерений для каждого слова. Это означает, что каждое слово имеет вектор из 768 значений — слишком много, чтобы отображать их в сетке и ожидать, что они образуют треугольники. Самое важное в сходстве косинусов заключается в том, что существует третий способ его вычисления — тот, который работает для любых и всех измерений.

Окончательный способ вычисления сходства косинусов

Уравнение, которое обобщает косинусное сходство для любого количества измерений, учитывает два разных элемента — скалярное произведение между многомерными векторами и величину (то есть длину) каждого вектора. Мы можем математически представить это следующим образом:

Скалярный продукт — это понятие линейной алгебры, описывающее мультипликативное воздействие одной линии на другую в том же направлении. Чтобы вычислить скалярный продукт, мы должны разбить линию на их компоненты, умножить значения внутри каждого компонента, а затем сложить их. Я создал следующую трехэтапную инфографику, чтобы помочь нам немного лучше визуализировать это.

Удивительную иллюстрацию скалярного произведения можно найти в гоночных играх, таких как Mario Kart. И здесь я отдаю должное людям из Better Explained за то, что они придумали этот пример. В Mario Kart на земле часто есть ускорители. В зависимости от угла, под которым вы приближаетесь к ускорителю, ускорение меняется. Лучший способ максимизировать ускорение — подойти сзади в точном направлении, на которое указывает ускоритель. Но чем более угловатым мы подходим, тем меньше мы получаем усиления. Думайте о скалярном произведении как о значении, которое в конечном итоге принимает ускорение, или насколько оно ускорило автомобиль в том направлении, в котором оно уже двигалось.

Вторая часть нашего уравнения подобия косинусов — это умножение длин векторов. В предыдущих примерах мы включали длину строки, но в задачах с данными, связанных со словами, у нас будут только числа для характеристик каждого слова или координаты в пространстве. К счастью, есть способ вычислить длину вектора с любым количеством координат. Чтобы вычислить длину, также называемую величиной, мы возводим каждую координату в квадрат, затем складываем их и, наконец, извлекаем квадратный корень из этого числа.

Например, мы можем применить формулу к нашим трем словам «снег», «катание на лыжах» и «Рафаэль» и получить следующие значения длин их векторов:

Пошаговый расчет сходства косинусов для шести измерений

Если вы дочитали до этого момента, поздравляю — мы подошли к самой важной части. Давайте теперь вычислим косинусное сходство трех слов, каждое из которых имеет шестимерный вектор, чтобы мы не могли нанести значения в трехмерном пространстве и сформировать аккуратные треугольники. Помните — во многих случаях использования науки о данных у нас есть сотни возможных измерений, поэтому даже в шести мы по-прежнему представляем проблему в довольно упрощенном виде!

Шаг 1. Создайте матрицу числовых представлений (т. е. встраивания слов)

В приведенном ниже примере мы продолжаем использовать три слова, кодируя каждое из выбранных свойств слова с помощью 0 или 1 в зависимости от отсутствия или наличия свойства. «Вспомните, что в более сложных примерах эти значения, вероятно, будут непрерывными, и мы можем не иметь для нас внутреннего значения. Но в нашем случае мы будем придерживаться простых чисел и разумных свойств, чтобы обеспечить полное концептуальное понимание.

Шаг 2. Вычислите скалярное произведение каждого вектора слов

Чтобы вычислить скалярное произведение между любыми двумя словами, мы разбиваем вектор слов на их шесть измерений, умножаем значения слов для каждого измерения, а затем складываем их. Вот пример цветовой кодировки скалярного произведения слов «снег» и «катание на лыжах»:

Вычисляя скалярное произведение для всех трех слов, мы приходим к следующей таблице значений. Похоже, что «катание на лыжах» и «снег» действительно подталкивают друг друга в том же направлении, что и «катание на лыжах» и «конькобежный спорт». Похоже, что между «снегом» и «катанием на коньках» нет «продвижения вперед».

Шаг 3. Вычисление длин векторов слов

Хотя мы не можем визуализировать вектор в шести измерениях, математика вычисления длины вектора работает так же хорошо. Используя наше уравнение из предыдущего, мы находим следующие значения для наших длин векторов слов — или величин.

Шаг 4. Вычислите косинусное сходство

Последний шаг — простое деление — скалярное произведение пары слов, деленное на обе длины слова. Это даст нам окончательную таблицу подобия косинусов, которая, я надеюсь, даст нам довольно предсказуемые и ожидаемые результаты.

«Снег» и «катание на лыжах» похожи на 78 % — принимая одно за основу другого, около 78 % элементов одного можно объяснить элементами другого. Это значение составляет 63% для «катания на лыжах» и «конькового хода», а значения «снега» и «конькового хода» не имеют сходства.

Хотя этот пример кажется произвольным, я надеюсь, вы почувствуете, что этот процесс довольно прямолинеен и чрезвычайно мощен в своей способности работать для любого количества измерений. Мы могли бы применить те же четыре шага к двенадцати измерениям, или двадцати, или семистам шестидесяти восьми, и математика сработала бы так же хорошо. Кто знал, что толкание валуна так сильно связано со сходством слов…

Несколько ключевых значений сходства косинусов

На протяжении всей этой статьи мы видели, как косинусное сходство неотъемлемо связано с направлением. Есть три ключевых значения сходства косинусов, о которых я хочу, чтобы вы, в частности, помнили. Для каждого ключевого значения я представляю пример пары слов, который, надеюсь, поможет укрепить их интуицию.

-1: косинусное сходство абсолютно отрицательно

«Горячий» и «холодный» обычно используются как диаметрально противоположные друг другу. Их вполне можно смоделировать как векторы, идущие в противоположных направлениях и образующие идеальный угол 180° между собой. Косинус 180° равен -1, и поэтому, когда вы видите косинусное подобие -1, вы должны думать о лежащих в его основе словах как о противоположных друг другу.

0: косинусное сходство совершенно нейтрально

«Фортепиано» и «кокос» обычно не используются в одном предложении. Их вполне можно смоделировать как векторы, идущие в перпендикулярных направлениях и образующие идеальный угол 90° между собой. Косинус 90° равен 0, и поэтому, когда вы видите косинусное сходство, равное 0, вы должны думать, что лежащие в их основе слова не связаны друг с другом.

1: косинусное сходство абсолютно положительно

В этой статье мы использовали слова «линия» и «вектор» как синонимы, потому что в нашем контексте они по сути означают одно и то же. Их вполне можно было бы смоделировать как векторы, идущие в одном направлении, чтобы они имели угол между собой. Косинус равен 1, и поэтому, когда вы видите сходство косинуса 1, вы должны думать об обоих словах как о синонимах друг друга.

Практическое применение сходства косинусов

Сегодня мы рассмотрели несколько теоретических и реальных приложений подобия косинусов на примерах из физики и обработки естественного языка. Но реальность такова, что сходство косинусов можно использовать для любой задачи, которую можно представить с помощью векторов. Классификация изображений, обнаружение аномалий, маркировка документов — что угодно — косинусное сходство, вероятно, каким-то образом использовалось. Подобие косинусов работает в любом количестве измерений, поэтому эта тригонометрическая линза может помочь в решении задач любой сложности. И да, косинусное сходство, скорее всего, использовалось, чтобы знать, что, несмотря на мой ужасный набор текста, в приведенном ниже примере меня заинтересовал Python. Это потому, что «питон» и «питон», вероятно, имеют очень большое косинусное сходство между собой!

Резюме — и планы на будущее

Подобие косинуса — это мощный и универсальный метод вычисления расстояния, в котором многие из нас должны хорошо разбираться. В этой части мы обсудили основное значение функции косинуса и три различных способа вычисления косинусов. Мы также рассмотрели пошаговый пример вычисления сходства косинусов для трех слов, закодированных в шести измерениях. Я надеюсь, вы нашли это чтение информативным и доступным — и эй, теперь вы можете рассказать своим друзьям, как поисковые системы вычисляют сходство между словами! Я уверен, что они не будут смотреть на вас с растерянным лицом и оставят вас для более популярных детей. Я уверен.

В следующей части этой серии мы вернемся к теме нейронных сетей и более подробно рассмотрим, как они на самом деле учатся с помощью средств градиентного спуска. Мы изучим некоторые основные понятия исчисления и нейронных моделей с, конечно же, интуитивными и забавными объяснениями и диаграммами! Я надеюсь увидеть вас тогда!

Дополнительные ресурсы