Понятие вектора сформировалось в математике сравнительно недавно – в середине XIX века. До этого многие идеи, связанные с векторами, появлялись в разных областях (например, в механике – в виде направленных величин силы или скорости), но не были объединены единым термином. Сам термин «вектор» (от лат. vector – «носитель», «переносчик») впервые ввёл ирландский математик Уильям Роуэн Гамильтон около 1845 года. Гамильтон занимался обобщением комплексных чисел на более высокие размерности и создал систему кватернионов – чисел вида $q = a + b\mathbf{i} + c\mathbf{j} + d\mathbf{k}$ (четырёх компонент, где $\mathbf{i},\mathbf{j},\mathbf{k}$ – воображаемые единицы) для описания вращений в пространстве.
В этой системе он выделил скалярную часть $a$ и векторную часть $b\mathbf{i}+c\mathbf{j}+d\mathbf{k}$, введя сами термины «скаляр» и «вектор».
Гамильтону же принадлежат понятия скалярного произведения и векторного произведения – он заметил, что при перемножении «чисто векторных» кватернионов результирующий кватернион в скалярной части содержит величину, эквивалентную современному скалярному (dot) произведению, а в векторной части – величину, эквивалентную современному векторному (cross) произведению.
Почти одновременно с Гамильтоном немецкий математик Герман Грассман развивал похожие идеи с другой точки зрения. В своём труде «Ausdehnungslehre» (1844) он ввёл абстрактное понятие расширения пространства на произвольное число измерений, фактически определив операции с многомерными векторами и линейные комбинации в $n$-мерном пространстве. Грассман первым явно рассмотрел векторы не ограниченно 2 или 3 измерениями, а в $n$-мерном пространстве.
В последующие десятилетия концепция векторов активно проникала в физику. Джеймс Клерк Максвелл в 1860–1870-х годах, работая над теорией электромагнетизма, воспользовался аппаратами Гамильтона (векторной частью кватернионов) для компактного описания полей.
Его коллеги Оливер Хевисайд и Джосайя Гиббс далее развили чисто векторный анализ как самостоятельный язык, отбросив полную систему кватернионов ради удобства расчетов с направленными величинами.
В 1880–1890-х годах векторная алгебра и анализ оформились окончательно именно в современном виде, во многом благодаря учебнику Гиббса по векторному анализу, изданному в 1901 году. Тем временем английский математик Уильям Клиффорд предложил общее объединение идей Гамильтона и Грассмана в рамках геометрической алгебры, что расширило понятие вектора (и связанного понятия тензора) на более абстрактные структуры.
Начало XX века ознаменовалось формализацией понятия векторного пространства – множества произвольных объектов (не обязательно геометрических стрелок), где определены операции сложения и умножения на число. Это позволило использовать векторы в самых разных разделах математики и техники. Векторная алгебра стала основой для аналитической геометрии, механики, а позднее – для методов в анализе данных и машинном обучении. Например, в теории относительности (1905–1915 гг.) векторы и их обобщения (четырехмерные 4-векторы, тензоры) сыграли ключевую роль при описании пространства-времени. Таким образом, понятие вектора эволюционировало от геометрического представления направленного отрезка до абстрактного элемента произвольного размерного пространства, став фундаментальным в математике и науке.
Теоретические основы векторной алгебры
Вектор в современном понимании – это элемент некоторого векторного пространства. Чтобы глубже понять свойства векторов, рассмотрим основные теоретические понятия, связанные с векторной алгеброй: структуру векторного пространства, нормы и длины, ортогональность, линейные комбинации, базисы, а также ранги и подпространства.
Векторное пространство и измерения
Векторное пространство $V$ над полем – это множество, в котором определены две операции: покомпонентное сложение векторов и умножение вектора на скаляр (число) из поля, причём выполняются аксиомы: коммутативность и ассоциативность сложения, существование нулевого вектора $0$ и противоположного вектора $-v$ для каждого $v$, дистрибутивности умножения относительно сложения и пр. Интуитивно, векторное пространство – это обобщение привычной декартовой координатной системы на произвольное число измерений $n$.
Размерность пространства – число $n$, которое определяет, сколькими независимыми координатами (компонентами) задаётся каждый вектор. Например, $\mathbb{R}^2$ – двумерное пространство всех пар $(x, y)$, а $\mathbb{R}^n$ – $n$-мерное пространство наборов из $n$ чис.
Каждый вектор $\mathbf{v}$ можно рассматривать как упорядоченный набор координат: $\mathbf{v} = (v_1, v_2, …, v_n)$ относительно некоторой системы координат. Например, в $\mathbb{R}^3$ вектор $\mathbf{v}=(2,,-1,,3)$ можно представить как стрелку в трёхмерном пространстве, исходящую из начала координат $(0,0,0)$ и оканчивающуюся в точке $(2,-1,3)$. Геометрически операции в пространстве эквивалентны: сложение векторов – правилу параллелограмма (голова к хвосту), а умножение на скаляр – растяжению или сжатию вектора вдоль его направления (с сохранением направления при положительном скаляре и с разворотом при отрицательном).
Норма и длина вектора
Для численной характеристики «размера» вектора вводится понятие нормы. Норма $| \mathbf{v} |$ – это неотрицательное число, удовлетворяющее свойствам: (1) положительности (равна 0 только для нулевого вектора), (2) однородности ($|\alpha \mathbf{v}| = |\alpha| , |\mathbf{v}|,$ для любого скаляра $\alpha$) и (3) неравенства треугольника ($|\mathbf{u}+\mathbf{v}| \le |\mathbf{u}| + |\mathbf{v}|$). В евклидовом пространстве наиболее распространена евклидова норма (она же норма $L_2$), определяемая как длина вектора в привычном геометрическом смысле. Для $\mathbf{v}=(v_1,…,v_n)$ евклидова норма задаётся формулой:

которая соответствует расстоянию от начала координат до точки $(v_1,…,v_n)$. Например, в $\mathbb{R}^3$ вектор $\mathbf{v}=(2,-1,3)$ имеет длину $|\mathbf{v}|_2 = \sqrt{2^2 + (-1)^2 + 3^2} = \sqrt{14}$.
Помимо евклидовой, часто используются и другие нормы. Манхэттенская норма (норма $L_1$) задаётся как сумма модулей координат:

она измеряет «манхэттенское расстояние» (или расстояние городских кварталов) – суммарный путь вдоль осей координат. В примере $(2,-1,3)$ это будет $|\mathbf{v}|1 = |2|+|{-1}|+|3| = 6$.
Ещё одна часто встречающаяся норма – максимум-норма $L\infty$, равная максимальному из модулей координат: $|\mathbf{v}|\infty = \max_i |v_i|$. В нашем примере $|\mathbf{v}|\infty = \max(2,1,3) = 3$. Нормы $L_1$, $L_2$ и $L_\infty$ порождают разные геометрические формы единичных «шаров»: в $L_2$ единичный шар – это круг (сфера) радиуса 1, в $L_1$ – ромб (октаэдр), в $L_\infty$ – квадрат (куб), ориентированный сторонами параллельно осям.
Все эти нормы эквивалентны в конечномерном пространстве (дают согласующуюся топологию), но выбор нормы важен при решении конкретных задач – например, в машинном обучении $L_1$ и $L_2$ нормы используются как разные типы регуляризации с разными свойствами.
Ортогональность и ортонормированные базисы
Ортогональность – центральное понятие векторной алгебры, связанное с понятием угла между векторами. Два вектора $\mathbf{u}$ и $\mathbf{v}$ в евклидовом пространстве называются ортогональными (перпендикулярными), если угол $\theta$ между ними равен $90^\circ$ (прямой угол). Аналитически это эквивалентно тому, что их скалярное произведение равно нулю: $\mathbf{u}\cdot \mathbf{v} = 0$. Например, в $\mathbb{R}^2$ векторы $(1,2)$ и $(2,-1)$ ортогональны, поскольку $1\cdot2 + 2\cdot(-1) = 0$.
В ортонормированных декартовых осях стандартные единичные векторы $\mathbf{i}, \mathbf{j}, \mathbf{k}$ (направленные вдоль осей $x$, $y$, $z$ соответственно) все ортогональны друг другу и имеют единичную длину. Такой набор взаимно перпендикулярных единичных векторов называется ортонормированным базисом пространства.
Базис – это набор линейно независимых векторов, на который можно разложить любой вектор пространства. Ортонормированный базис обладает особыми свойствами: разложение по нему единственно и удобно вычисляется скалярными произведениями.
Например, стандартный базис в $\mathbb{R}^3$: $\mathbf{e}_1=(1,0,0)$, $\mathbf{e}_2=(0,1,0)$, $\mathbf{e}_3=(0,0,1)$ – ортонормированный. Произвольный вектор $\mathbf{v}=(v_1,v_2,v_3)$ раскладывается по нему тривиально: $\mathbf{v} = v_1 \mathbf{e}_1 + v_2 \mathbf{e}_2 + v_3 \mathbf{e}_3$. Если базис не ортонормированный, разложение так же существует, но коэффициенты (координаты) приходится вычислять решением системы уравнений. В любом евклидовом пространстве всегда можно построить ортонормированный базис из любого базиса методом ортогонализации Грама-Шмидта.
Ортонормированность означает две вещи: (1) все базисные векторы попарно ортогональны; (2) каждый базисный вектор имеет норму 1. Эти условия можно записать компактно через скалярное произведение: для базисных $\mathbf{e}_i$ и $\mathbf{e}_j$ выполняется $\mathbf{e}_i \cdot \mathbf{e}_j = 0$ при $i\neq j$, и $\mathbf{e}_i \cdot \mathbf{e}_i = 1$ для каждого $i$. Ортонормированный базис упрощает вычисления, поскольку скалярное произведение любого $\mathbf{u}$ и $\mathbf{v}$ выражается через координаты как $\mathbf{u}\cdot\mathbf{v} = u_1 v_1 + \dots + u_n v_n$ (если базис ортонормированный). Например, базис векторов вдоль осей графика (единичные векторы Ox и Oy) ортонормированный, поэтому координаты и проекции легко связаны.
Линейные комбинации, ранг и подпространства
Линейная комбинация – выражение, полученное сложением нескольких векторов с умножением их на скаляры. Например, $\mathbf{w} = 3\mathbf{u} – 2\mathbf{v} + 5\mathbf{z}$ – линейная комбинация векторов $\mathbf{u},\mathbf{v},\mathbf{z},$. Множество всех линейных комбинаций некоторого набора векторов называется их линейной оболочкой (или спаном, от англ. span). Линейная оболочка образует подпространство исходного пространства – то есть сама является векторным пространством (замкнута относительно сложения и умножения на число). Например, все векторы вида $(x,y,0)$ образуют подпространство в $\mathbb{R}^3$ (плоскость $XY$), которое является линейной оболочкой двух базисных векторов $(1,0,0)$ и $(0,1,0)$.
Линейная (не)зависимость набора векторов означает, что ни один из них не выражается как линейная комбинация других. Если векторы линейно зависимы, то хотя бы один из них «лишний» (лежит в линейной оболочке других) и его можно исключить из набора без потери охвата пространства. Максимальный размер линейно независимого набора векторов в пространстве – это его размерность. Например, в $\mathbb{R}^3$ не могут быть независимыми более 3 векторов.
Число линейно независимых векторов в данном наборе называется рангом этого набора. Понятие ранга особенно часто применяется к матрицам (о которых ниже) – ранг матрицы равен размеру максимального набора линейно независимых строк (или столбцов). Ранг показывает «сколько измерений охватывают» комбинации данных векторов. Если ранг набора векторов равен размерности всего пространства, эти векторы образуют базис. Например, три вектора $(1,0,0)$, $(0,2,0)$, $(5,5,1)$ в $\mathbb{R}^3$ независимы и образуют базис, ранг = 3 (равен размерности), а значит любой вектор $\mathbb{R}^3$ можно разложить по ним. Если же ранг меньше размерности, то рассматриваемые векторы лежат в некотором собственном подпространстве меньшей размерности.
Подпространства возникают естественно, когда рассматриваем все комбинации некоторого ограничения. Например, множество всех векторов на плоскости (через начало координат) – подпространство трёхмерного пространства. Линейные уравнения определяют подпространства как свои решения: например, уравнение $x+y+z=0$ определяет подпространство – плоскость из всех точек $(x,y,z)$, удовлетворяющих этому уравнению. Понимание ранга и подпространств важно для приложений: в машинном обучении, например, данные часто лежат в подпространстве меньшей размерности, что используется при снижении размерности (PCA и др.).
Классификация векторов: типы и представления
Векторы бывают различных типов и форматов в зависимости от природы их компонент и представления. Ниже перечислены основные виды векторов, с которыми приходится иметь дело инженерам и аналитикам:
- Бинарные векторы – векторы, компоненты которых принимают значение только 0 или 1. Такие векторы часто представляют подмножества или категориальные признаки. Пример: вектор наличия признаков $\mathbf{x} = (1,0,1,0)$ может означать, что первый и третий признак присутствуют, а второй и четвертый отсутствуют. One-hot представление – частный случай бинарного вектора, в котором ровно одна единица (например, слово, закодированное как единица на позиции, соответствующей этому слову в словаре, и нули на остальных позициях). Бинарные векторы применяются для кодирования категорий, текстов (множеством включённых слов), при вычислении метрики Жаккара (см. далее), и т.д.
- Дискретные векторы – в более общем смысле, векторы с компонентами, принимающими дискретные значения (целые числа или значения из фиксированного множества). Например, вектор частот слов в документе: $\mathbf{d}=(3,0,1,5,…,0)$, где каждое компонент – целое число (количество раз, которое определённое слово встретилось). Дискретные векторы возникают при описании гистограмм, распределений, счётчиков событий. Бинарные векторы – частный случай дискретных (с дискретным множеством ${0,1}$). Дискретность означает, что компоненты нельзя считать плавно изменяющимися – зачастую при обработке таких векторов применяют специальные меры (например, сглаживание, нормализацию) или их рассматривают как признаки для моделей.
- Вещественные векторы – векторы, чьи компоненты являются вещественными числами (элементами $\mathbb{R}$). Практически все математические и ML приложения оперируют вещественными векторами, так как параметры и данные обычно представлены действительными числами. Например, вектор признаков пользователя может быть вещественным: $\mathbf{x} = (25.3,; 0.5,; -1.2)$, где разные компоненты – это количественные характеристики (нормализованные показатели активности, предпочтений и т.п.). Вещественные векторы иногда называют континуальными или непрерывными векторами, подчёркивая, что их компоненты могут плавно изменяться (в отличие от дискретных).
- Плотные и разреженные векторы – эта классификация относится к представленности данных в векторе. Плотный вектор – это вектор, у которого большинство компонент ненулевые, тогда как разреженный вектор – это вектор, у которого большинство компонент равны нулю. Например, $\mathbf{v}=(0.5, 1.2, -0.3, 0.7)$ – плотный, поскольку все 4 компоненты отличны от нуля; а $\mathbf{w}=(0, 0, 5.1, 0, 0, 0, 2.8, 0)$ – разреженный (всего 8 измерений, из них только 2 ненулевые). Разреженные векторы часто возникают в задачах с очень большой размерностью – например, при представлении текстов в виде мешка слов: у документа с десятками тысяч возможных слов большинство компонент TF-IDF будут нулями (слово не встречается) и лишь относительно немного – ненулевыми. В таких случаях используют специальные структуры данных (списки индексов ненулевых элементов) для хранения разреженных векторов, чтобы не тратить память на длинные последовательности нулей. Обратите внимание: плотность или разреженность – свойство содержательного распределения значений вектора, независимо от способа хранения. Даже очень высокоразмерный вектор может считаться плотным, если в нём значима большая часть компонент; и наоборот, вектор невысокой размерности (скажем, 100) может быть разреженным, если лишь пара значений ненулевые.
- Одномерные и многомерные векторы – технически вектор любой размерности $n\ge 1$ является многомерным. Одномерный вектор – это тривиальный случай: элемент пространства $\mathbb{R}^1$, фактически просто одно число (скаляр). Обычно, говоря об одномерном векторе, имеют в виду просто число, хотя формально можно рассматривать его как вектор. Интереснее рассмотреть векторы высокой размерности (многомерные, $n \gg 1$). В современной практике встречаются векторы очень больших размерностей: от сотен (например, эмбеддинг слова размерности 300) до миллионов (например, one-hot вектор для слова из словаря в несколько миллионов терминов). Работа с такими высокомерными векторами требует учёта явлений проклятия размерности (сложности, растущие с $n$) и специальных методов, о которых далее.
Векторные операции и метрики
С векторами связаны разнообразные операции – как алгебраические (произведения, комбинации), так и метрические (расстояния, меры близости). Рассмотрим ключевые операции над векторами.
Скалярное произведение (dot product)
Скалярное произведение (также внутреннее произведение, или dot product по-английски) – базовая операция, определённая для двух векторов одинаковой размерности. Результатом её является число (скаляр). В евклидовом пространстве скалярное произведение $\mathbf{a}\cdot \mathbf{b}$ определяется как сумма попарных произведений координат:

Например, для $\mathbf{a}=(1,3, -2)$ и $\mathbf{b}=(4, -1, 5)$ получим $\mathbf{a}\cdot \mathbf{b} = 1\cdot4 + 3\cdot(-1) + (-2)\cdot 5 = 4 – 3 – 10 = -9$.
Скалярное произведение тесно связано с геометрическими свойствами: оно равно произведению длин этих векторов на косинус угла между ними: $\mathbf{a}\cdot \mathbf{b} = |\mathbf{a}|,|\mathbf{b}|\cos\theta$. Отсюда выводятся многие последствия:
- $\mathbf{a}\cdot \mathbf{b}=0$ означает, что либо $\mathbf{a}=0$ или $\mathbf{b}=0$, либо $\cos\theta=0$, т.е. векторы ортогональны (перпендикулярны).
- Если скалярное произведение положительно, угол острый ($\cos\theta>0$); если отрицательно – угол тупой ($\cos\theta<0$).
- $\mathbf{a}\cdot \mathbf{a} = |\mathbf{a}|^2$ – скалярное произведение вектора на себя даёт квадрат его нормы (длины).
Скалярное произведение играет фундаментальную роль во многих алгоритмах: например, при вычислении проекции одного вектора на другой, в расчетах работы силы (в физике), а в машинном обучении – как мера схожести направлений (косинусной близости, см. далее). В нейросетях и моделях трансформеров внимание (attention) вычисляется именно через скалярные произведения эмбеддингов «запроса» и «ключа».
Векторное произведение (cross product)
Векторное произведение – это операция, определённая в классическом виде только в трёхмерном пространстве $\mathbb{R}^3$ (и обобщённо в $\mathbb{R}^7$, но то редкий математический случай).
Векторное произведение $\mathbf{a} \times \mathbf{b}$ двух трёхмерных векторов даёт новый вектор в $\mathbb{R}^3$, который ортогонален (перпендикулярен) обоим исходным. Его длина равна площади параллелограмма, построенного на $\mathbf{a}$ и $\mathbf{b}$. Направление $\mathbf{a}\times \mathbf{b}$ определяется правилом правого винта (ортогонально плоскости $\mathbf{a}$ и $\mathbf{b}$, так, что триада $(\mathbf{a}, \mathbf{b}, \mathbf{a}\times\mathbf{b})$ образует правую систему). Координатно можно вычислить по формуле (раскрывая определитель): если $\mathbf{a}=(a_1,a_2,a_3)$ и $\mathbf{b}=(b_1,b_2,b_3)$, то

Например, $\mathbf{a}=(1,0,0)$, $\mathbf{b}=(0,1,0)$ – их векторное произведение $\mathbf{a}\times\mathbf{b} = (0,0,1)$ – единичный вектор по оси $z$. Заметим, что $\mathbf{b}\times\mathbf{a} = -(\mathbf{a}\times\mathbf{b})$, то есть векторное произведение антикоммутативно (меняет знак при перестановке мест). Если векторы коллинеарны (лежат на одной прямой), их векторное произведение равно нулевому вектору (площадь параллелограмма нулевая).Векторное произведение наглядно используется в физике (например, векторное произведение радиуса на силу даёт момент, перпендикулярный плоскости действия), а также при вычислении нормалей к поверхностям. Однако в большинстве прикладных задач машинного обучения и анализа данных (особенно где $n>3$) векторное произведение напрямую не применяется. Гораздо чаще оперируют внешними произведениями в более общем смысле (тензорными, например), но это выходит за рамки данного обзора.
Расстояния между векторами (L1, L2, косинус, Жаккар)
Для сравнения векторов – насколько они близки или отличаются – вводятся различные меры расстояния или сходства. Уже упомянутые нормы $L1$ и $L2$ порождают естественные метрики: расстояние $L_2$ (евклидово расстояние) между векторами $\mathbf{u}$ и $\mathbf{v}$ определяется как $|\mathbf{u}-\mathbf{v}|_2 = \sqrt{\sum_i (u_i – v_i)^2}$. Это привычное евклидово расстояние в пространстве, геометрически – длина разности векторов (отрезка между точками, соответствующими $\mathbf{u}$ и $\mathbf{v}$).
Расстояние $L_1$ (манхэттенское) определяется как $|\mathbf{u}-\mathbf{v}|_1 = \sum_i |u_i – v_i|$ – сумма модулей разностей компонент. Манхэттенское расстояние учитывает отклонения по каждой координате линейно. В зависимости от задачи может быть более предпочтительным $L_1$ или $L_2$: к примеру, $L_2$ сильнее штрафует большие отклонения (из-за квадрата), а $L_1$ – меньше чувствительно к выбросам и разреженным различиям.
Помимо метрических расстояний, часто используют косинусную меру – она оценивает не абсолютное различие значений, а угол между векторами, то есть сравнивает их направления. Косинусное сходство определяется как:

Это значение лежит в диапазоне от $-1$ до $1$: равное 1 для сонаправленных векторов, 0 для ортогональных и -1 для противоположно направленных. В задачах поиска похожести (семантического сходства) часто берут именно косинус угла в качестве меры близости, поскольку он игнорирует масштабы векторов, фокусируясь на их ориентации.
Например, в анализе текстов два документа с очень разными длинами могут всё равно рассматриваться как похожие, если распределение тем в них пропорционально – у них косинусное сходство будет близко к 1, даже если евклидово расстояние велико (из-за разницы в длинах векторов признаков).
С косинусной мерой связана и понятие нормализации векторов: часто нормируют вектор, деля его на собственную длину, чтобы получить единичный вектор $\hat{\mathbf{v}} = \frac{\mathbf{v}}{|\mathbf{v}|}$. После такой нормализации скалярное произведение $\hat{\mathbf{u}}\cdot \hat{\mathbf{v}}$ равно косинусному сходству исходных векторов. Поэтому в ряде алгоритмов (например, в нейронных сетях для рекомендаций) веса и эмбеддинги нормируют, чтобы сравнение сводилось к косинусной близости.
Ещё одна распространённая мера для векторов с булевыми или множественными компонентами – коэффициент Жаккара. Он чаще используется для множеств, но может быть применён и к бинарным векторам. Для двух множеств $A$ и $B$ коэффициент Жаккара определён как

то есть доля пересечения в объединении. Если перевести на язык бинарных векторов $\mathbf{x}, \mathbf{y} \in {0,1}^n$, то $|!A \cap B!|$ – это количество позиций, где оба вектора имеют 1, а $|!A \cup B!|$ – количество позиций, где хотя бы в одном векторе 1. Например, $\mathbf{x}=(1,0,1,0,1)$, $\mathbf{y}=(0,1,1,0,1)$.
Пересечение в единицах: позиции 3 и 5 (две общие единицы), объединение: позиции 1,2,3,5 (четыре позиции хотя бы с одной единицей). Коэффициент Жаккара $J(\mathbf{x},\mathbf{y}) = 2/4 = 0.5$. Расстояние Жаккара часто определяют как $1 – J(A,B)$ (чем меньше пересечение, тем больше «расстояние»). Эта мера полезна для сравнения объектов с набором свойств, в задачах вроде рекомендаций (сравнить два профиля по общим предпочтениям) или при кластеризации текстов по пересечению ключевых слов.
Важно понимать, что выбор метрики существенно влияет на результаты алгоритмов, особенно при большом числе измерений. Например, векторами можно измерить семантическое сходство текстов: два текста, у которых нет общих слов, будут иметь нулевую схожесть по лексической мере, но их косинусная близость эмбеддингов может быть высокой, если они про одно и то же (см. далее про семантическое сходство). В системах поиска и рекомендаций тщательно подбирают или обучают метрики векторного сходства, чтобы они коррелировали с понятием релевантности для пользователей.
Нормализация и масштабирование
Нормализация векторов – процесс приведения вектора к удобному масштабу, чаще всего к единичной длине. Как отмечалось, деление на норму превращает вектор $\mathbf{v}$ в $\hat{\mathbf{v}}$ с $|\hat{\mathbf{v}}|=1$. Это убирает влияние абсолютной величины и оставляет только «направление».
В задачах классификации и кластеризации нормализация признаков важна, чтобы ни один признак (координата) неоправданно не доминировал из-за масштабов: для этого часто нормируют не вектор целиком, а каждую координату по выборке (например, вычитая среднее и деля на стандартное отклонение – z-score нормализация). Но если говорить именно о векторном представлении объекта, зачастую полезно нормировать объектный вектор целиком. Например, при сравнении документов по частоте слов принято использовать косинусную меру, а значит документы обычно представляют нормированными TF-IDF векторами (так, что суммарный вес слов или эвклидова длина равны 1).
Масштабирование – общее понятие для преобразования векторов умножением на скаляр (растяжение/сжатие). Оно тривиально – достаточно умножить каждую компоненту. Масштабирование не меняет направления вектора, только длину. Поэтому для сравнения направлений масштабирование несущественно, но в некоторых данных абсолютные величины несут смысл – например, векторы измерений в физических величинах требуют приведения к нужным единицам измерения (масштабным коэффициентом) перед использованием.
Преобразования векторного пространства – обобщённо, любые операции, переводящие один вектор (или набор) в другой. Важнейший класс – линейные преобразования, которые сохраняют структуру: $T(\alpha \mathbf{u} + \beta \mathbf{v}) = \alpha T(\mathbf{u}) + \beta T(\mathbf{v})$. Линейные преобразования в конечномерных пространствах описываются матрицами, о чём далее.
Матрицы как обобщение векторов и линейные преобразования
Матрица – это таблица чисел размером $m \times n$ ($m$ строк, $n$ столбцов). Матрицу можно рассматривать как набор векторов: например, состоящую из $m$ строк-векторов длины $n$ или из $n$ столбцов-векторов длины $m$. Таким образом, вектор – частный случай матрицы: вектор-строка размерности $n$ можно считать матрицей $1 \times n$, а вектор-столбец – матрицей $n \times 1$. Многие операции с векторами продолжаются на матрицы.
Например, сложение матриц выполняется покомпонентно точно так же, как сложение векторов (только размерность уже двумерная).
Матрицы служат естественным языком для описания линейных отображений между векторными пространствами. Если имеется матрица $A$ размера $m\times n$ и вектор $\mathbf{x}$ размерности $n$, то произведение $A\mathbf{x}$ – это вектор размерности $m$. Оно вычисляется как комбинация строк и столбцов: $y_i = \sum_{j=1}^n a_{ij} x_j$ для $i=1..m$. Иначе говоря, результат $A\mathbf{x}$ – это линейная комбинация столбцов матрицы $A$ с коэффициентами из $\mathbf{x}$. Таким образом, матрица отображает один входной вектор в другой выходной, потенциально изменяя его размерность. Например, матрица $3\times 3$ может повернуть или отразить вектор в $\mathbb{R}^3$ (реализуя геометрическое преобразование). Матрица $5\times 3$, умноженная на вектор из $\mathbb{R}^3$, даёт вектор в $\mathbb{R}^5$ – это линейное отображение из трёхмерного пространства в пятимерное (в общем случае – расширение размерности). Наоборот, матрица $3\times 5$ с действием на $\mathbb{R}^5$ даёт результат в $\mathbb{R}^3$ – отображение сжатия (потенциально информация теряется, если матрица не полнодёранга). Ранг матрицы показывает максимальную размерность пространства, в которое она может отобразить набор векторов без потерь информации.
Матрицы также позволяют представить систему векторов более компактно. Например, если у нас есть набор из $k$ векторов $\mathbf{v}_1, \dots, \mathbf{v}k$ размерности $n$, их можно записать как столбцы одной матрицы $n \times k$. Тогда линейная комбинация этих векторов $\sum{j=1}^k c_j \mathbf{v}_j$ можно представить как умножение этой матрицы на столбец коэффициентов $(c_1,…,c_k)^\top$. Переход от набора векторов к матрице удобен в вычислительном плане: многие библиотеки линейной алгебры оптимизированы под операции с матрицами, и можно сразу обрабатывать коллекции векторов пакетно (batch processing).
Ещё одно полезное соответствие: иногда практикуется преобразование структуры данных между вектором и матрицей. Например, изображение размером $H\times W$ с развёрткой всех пикселей подряд образует вектор длины $H\cdot W$. Напротив, длинный вектор можно придать ему форму матрицы (reshaping) – активно используется в глубинном обучении (например, в слое, преобразующем сверточные карты признаков в плоский вектор перед полносвязным слоем). Однако при таких реформированиях (реформациях) важно помнить: это не линейное отображение в смысле пространств, а просто перепорядочивание данных.
Рассматривая матрицу как обобщение вектора, можно сказать: матрица – это «вектор» в тензорном пространстве размерности 2 (двумерный тензор). Линейная алгебра для матриц – расширение линейной алгебры векторов, с дополнительными операциями, такими как умножение матриц, определитель, след и т.д., которые не имеют аналогов для одномерных векторов. Тем не менее, понимание векторов как единиц, а матриц – как линеарных преобразователей, очень важно. Особенно в машинном обучении: параметры модели часто организованы в виде матриц, и умножение на вектор признаков даёт выход (например, в линейной модели $y = \mathbf{w}^\top \mathbf{x}$ или в нейронном слое $h = W \mathbf{x}$). С другой стороны, сами данные могут быть матрицами (например, изображения, таблицы), которые иногда разворачивают в векторы для подачи моделям.
Векторы в машинном обучении и Data Science
Векторные представления – краеугольный камень современного анализа данных и машинного обучения. Любые данные – от текста и изображений до пользователей и товаров – стремятся преобразовать в векторы признаков (feature vectors), чтобы с ними можно было применить алгоритмы линейной алгебры и геометрические методы. Здесь мы рассмотрим несколько важных примеров векторных представлений, используемых в ML/DS: от простых one-hot кодировок и TF-IDF до обученных эмбеддингов слов и контекстных представлений.
Разреженные представления: one-hot и TF-IDF
One-hot (одноразрядное) кодирование. Один из самых простых способов представить категориальный признак или дискретный объект – задать индекс этого объекта и сформировать вектор, заполненный нулями везде, кроме позиции соответствующего индекса, где стоит 1. Такой вектор имеет размерность, равную общему числу категорий. Пример: если мы кодируем день недели как категорию, можно договориться, что Понедельник = индекс 1, Вторник = 2, …, Воскресенье = 7. Тогда Понедельник представим как $(1,0,0,0,0,0,0)$, Вторник – $(0,1,0,0,0,0,0)$ и т.д.
One-hot вектора очень разреженные (в них ровно одна единица и остальные нули), но понятные: скалярное произведение двух таких векторов ноль (если это разные категории), что отражает полную различность различных категорий. One-hot кодирование используется повсеместно для представления слов (индекс слова в словаре) перед подачей в модель, для кодирования принадлежности к классу, районов города, ID объектов и т.д. Недостаток – высокая размерность при большом числе категорий и отсутствие какого-либо учета схожести между разными категориями (они ортогональные).
Bag-of-Words и TF-IDF. Для представления целых текстов (документов, запросов) в классической обработке данных применяют подход «мешок слов»: текст трактуется как множество (или multiset) слов без учёта порядка. Тогда его можно представить вектором размерностью $|V|$ (размер словаря), где каждая компонента – количество вхождений данного слова. Такой вектор будет разреженным, поскольку в отдельном документе обычно содержится лишь небольшая доля слов из огромного общего словаря. TF-IDF – усовершенствование мешка слов, вводящее взвешивание частот.
TF (term frequency) – частота слова в данном документе (например, абсолютная или нормированная как отношение к длине документа).
IDF (inverse document frequency) – обратная частота документа: вес слова снижается, если оно встречается во многих документах корпуса (то есть мало говорит о специфике данного документа). Обычно вводят IDF = $\log \frac{N}{df_w}$, где $N$ – число документов, $df_w$ – в скольких документах слово $w$ встречается. Тогда компонент вектора равна $tf_{w,d} \times idf_w$. Например, распространённые слова «и», «в», «на» получат низкий IDF, а редкие тематические термины – высокий. Таким образом, TF-IDF вектор документа – разреженный весовой вектор размером по числу слов в словаре, отражающий важность каждого слова для данного текста. С TF-IDF удобно сравнивать документы косинусной мерой: по сути это реализует классическую модель информационного поиска, где документы и запрос представляются как TF-IDF векторы, и считается косинусная близость для ранжирования. Несмотря на появление более сложных моделей, TF-IDF до сих пор широко применяется как простое и интерпретируемое представление текстов.
Оба вышеописанных подхода – разреженные векторные представления: один – бинарный (one-hot), другой – вещественный (TF-IDF), но в любом случае размерность огромна (десятки тысяч, сотни тысяч). Работа с такими векторами требует как минимум эффективного хранения. Но главное – они не отражают семантическую близость между признаками: разные слова в one-hot – ортогональны, даже если синонимичны; TF-IDF частично это обходит за счёт значений, но всё равно не устанавливает явно сходство между разными словами или фразами. Чтобы преодолеть эти ограничения, в ML распространились плотные эмбеддинги – обученные векторные представления.
Обучаемые эмбеддинги: word2vec, fastText
Эмбеддинг – это отображение объектов исходной природы в точки некоторого векторного пространства, обычно малой размерности (сотни), при котором сходные по смыслу объекты получают «близкие» векторы. Эмбеддинги обычно обучаются с помощью машинного обучения на больших данных, чтобы автоматически выявить латентные признаки. Одни из самых известных – эмбеддинги слов (word embeddings), впервые массово популяризованные алгоритмом word2vec (Миколов и др., 2013). Word2vec – это нейросетевая модель, которая на входе берет слово (one-hot вектор) и обучает скрытый слой (его веса) так, чтобы предсказывать соседние слова в предложении. В результате обучения каждой словоформе ставится в соответствие плотный вещественный вектор размерности, например, 300, который начинает отражать семантические отношения: слова, часто встречающиеся в схожих контекстах, получают близкие векторы. Векторные представления слов позволяют с помощью алгебраических операций выявлять смысловые аналогии – знаменитый пример: $\text{«король»} – \text{«мужчина»} + \text{«женщина»} \approx \text{«королева»}$, то есть если взять разность векторов «король» и «мужчина» (семантика «быть правителем»), а потом прибавить «женщина», получится вектор близкий к «королева».
Модель fastText (Бояновски и др., 2016) – развитие word2vec, учитывающее морфологию: она представляет слово как совокупность векторов для его буквенных n-грамм, суммируя их. Это позволяет получать осмысленные эмбеддинги даже для редко встречающихся или неизвестных слов за счёт разбивки на субслова. Например, слово «playing» будет представлено n-граммами «pla», «lay», «ayi», «yin», «ing», и даже если целиком оно редко, его вектор суммирует эти части, которые встречаются и в других словах.
Эмбеддинги слов типа word2vec/fastText плотные (каждый вектор имеет ~все координаты ненулевые) и относительно низкой размерности (сотни). Они позволили перевести задачи NLP из пространства дискретных разреженных признаков в пространство непрерывных признаков, где можно применять методы вроде кластеризации, поиска ближайших соседей, и где главное – семантическое расстояние между словами можно мерить метриками вроде евклидовой или косинусной. Так, два разных слова могут иметь большой косинусный коэффициент, если они значат похожее (например, «автомобиль» и «машина» будут близки в embedding-пространстве).
Стоит отметить, что похожие подходы применяются и вне текстов: в рекомендациях обучаются эмбеддинги товаров и пользователей (например, матричная факторизация даёт каждому пользователю и товару вектор – строки матрицы факторизации). В геоинформации обучают эмбеддинги локаций, в биоинформатике – эмбеддинги белков, и т.д. Принцип тот же: настроить векторное представление, в котором некоторый стандартный метрик (L2 или косинус) соответствует интуитивной близости объектов.
Контекстные эмбеддинги: BERT и современные модели
Word2vec и подобные дают статическое векторное представление слова – одно на словоформу в общем, независимо от контекста. Следующий шаг – контекстные эмбеддинги, появившиеся с архитектурой трансформеров и моделей типа BERT (2018). В таких моделях каждое слово (точнее токен) представляется разным вектором в зависимости от окружения, благодаря механизму самовнимания (self-attention). Модель BERT, основанная на трансформере, читает сразу всё предложение и вычисляет для каждого токена его представление, учитывающее все соседние слова слева и справа. В итоге, слово «bank» в контексте про финансы и «bank» в контексте про речной берег будут иметь разные эмбеддинги, хоть и исходное слово одно.
Внутри BERT и подобных моделей всё работает на векторах: входной токен сначала переводится в исходный эмбеддинг фиксированной размерности (например, 768-мерный для BERT Base), затем эти эмбеддинги многократно преобразуются линейными комбинациями через блоки самовнимания, выходя на контекстуальные эмбеддинги той же размерности на каждом слое. Таким образом, на каждом слое трансформера каждый токен представлен вектором (в BERT Base – 768-мерным). Финальное скрытое представление токена – это и есть его контекстный эмбеддинг. Можно сказать, что трансформер строит отображение из пространства значений токенов в высокомерное пространство смыслов, где близость векторов отражает смысловую или синтаксическую связь. Например, в предложении «кошка ловит мышь» эмбеддинги «кошка» и «мышь» будут взаимодействовать через механизм внимания, и итоговый вектор «кошка» будет содержать информацию о том, что она ловит кого-то, а вектор «мышь» – что она является жертвой. Если заменить «мышь» на «мяч», представления изменятся, отражая другой смысл.
Для практического использования часто берут не представления отдельных токенов, а агрегируют их для всей последовательности. Например, специальный токен [CLS] в BERT служит для извлечения эмбеддинга всего предложения – его вектор (768-мерный) можно считать векторным представлением смысла всего текста. Такие эмбеддинги предложений применяются в семантическом поиске и классификации.
Современные языковые модели (OpenAI GPT, GPT-2/3/4, PaLM и др.) – это усложнённые трансформеры, но по сути они тоже оперируют многомерными векторами для токенов. Размерности внутренних векторов у них могут быть гораздо больше (например, 12288 в GPT-3), но вся логика – это умножения матриц на векторы и вычисление скалярных произведений (для attention) между векторами. Вектора в трансформерах могут не иметь явной легко интерпретируемой компоненты (каждая координата – абстрактный признак), однако эксперименты показывают, что такие модели иногда организуют пространство осмысленно: возникают отдельные «направления» в пространстве эмбеддингов, соответствующие понятиям (например, можно найти направление, соответствующее изменению тональности предложения, пола объекта и пр., добавляя/вычитая небольшой вектор к представлению).
Резюмируя, роль векторов в современных NLP крайне велика: вектора представляют слова, предложения, смысловые единицы, и вся обработка сводится к вычислениям над этими векторами. Благодаря этому, задачи вроде определения близости текстов, поиска по смыслу, генерации ответов – всё это можно решать операциями векторов в латентном пространстве.
Семантическое сходство и векторные метрики в поиске и рекомендациях
Одно из ключевых применений векторной модели – измерение семантического сходства объектов (документов, запросов, товаров, пользователей и пр.). В традиционных поисковых системах (до эры ML) документы и запросы представлялись как разреженные векторы слов (например, TF-IDF), и релевантность оценивалась по схожести этих векторов – зачастую с помощью косинусного сходства. Такой подход называется векторная модель информационного поиска (противопоставляется булевой модели и др.). Главный ее плюс: она учитывает частичное совпадение терминов и позволяет ранжировать результаты по мере схожести. Однако классическая векторная модель страдает от буквального соответствия: если запрос и документ не имеют общих слов, сходство будет 0, даже если говорится об одном и том же (синонимах, перефразах).
Современные поисковые системы внедряют семантический поиск – когда запрос и документы сопоставляются в пространстве смысловых векторов (dense vectors). Например, нейросетевой двуязычный поиск: запрос на естественном языке превращается моделью (скажем, BERT-энкодером) в вектор размерности $d$ (например, 768), а каждый документ или заголовок тоже заранее отображён в вектор того же размерности. Эти векторы – эмбеддинги – содержат контекстные признаками и смыслы.
Система может хранить векторные представления всех документов, и при поступлении запроса вычислять расстояния (косинус, L2 или иное) между вектором запроса и векторами документов, выбирая самые близкие. Такие документы считаются семантически релевантными запросу, даже если буквально слов может не совпадать.
Например, запрос «найти приложение, чтобы экономить на поездках» можно преобразовать в вектор, близкий к документам про транспортные карты, скидки на такси и т.д., даже если слова не совпадают. Это существенно улучшает поиск по намерению пользователя. Метрики сходства тут обычно используются те же – косинусное сходство или евклидово расстояние (что эквивалентно для нормированных векторов), иногда скалярное произведение (если все векторы нормированы, то максимизация скалярного произведения равносильна максимизации косинуса). В редких случаях применяют специальное обучение метрик или более сложные функции, но чаще всего – стандартные геометрические расстояния.
В рекомендательных системах вектора также повсеместны. Например, коллаборативная фильтрация может быть реализована как факторизация матрицы рейтингів: получаются вектор пользователей $\mathbf{p}_u$ и вектор товаров $\mathbf{q}_i$ в общем латентном пространстве размерности $d$, и предсказанный рейтинг = $\mathbf{p}_u \cdot \mathbf{q}_i$ (скалярное произведение) – то есть чем ближе векторы пользователя и товара, тем выше предсказанный интерес. Поиск похожих товаров можно делать, отталкиваясь от векторных представлений товаров (например, эмбеддингов изображений или описаний): похожие товары – те, чей эмбеддинг близок по косинусу. В контентных рекомендациях статьи, новости также представляют как векторы (например, суммируя эмбеддинги слов, или с помощью специальных моделей), и вычисляют близость новостей к тому, что пользователь читал, выдавая наиболее схожие. Метрики – опять же косинус или евклид.
При работе с семантическими векторами в поиске/рекомендациях часто встаёт вопрос: как быстро найти ближайшие векторы к заданному (например, топ-10 самых близких документов к вектору запроса) среди миллионов. Простое вычисление косинусов со всеми – дорого. Поэтому используют специальные структуры (о них в следующем разделе). Но в алгоритмическом плане обычно ищутся ближайшие соседи векторного пространства (Nearest Neighbors) по заданной метрике. Это фундаментальная задача во многих системах: от кластеризации (найти ближайший центр к точке) до сжатия данных (выбрать репрезентативные точки). Для точного решения существуют кд-деревья, векторные индексы, но в высоких размерностях ($d \sim 100-1000$ и более) они деградируют до полного перебора. Поэтому применяют приближённый поиск ближайших соседей (ANN) – алгоритмы, которые за счёт небольшого снижения точности (не всегда строго самый ближайший, но из ближайших) резко ускоряют поиск. Два таких ключевых алгоритма мы рассмотрим: HNSW и методы, реализованные в FAISS.
Векторные хранилища и индексирование (FAISS, HNSW)
С ростом применения векторных представлений данных появилась необходимость специально управлять большими коллекциями векторов и выполнять по ним быстрый поиск. Векторные базы данных (Vector DB) – специализированные хранилища, оптимизированные под хранение миллионов – миллиардов высокомерных векторов и выполнение операций ближайших соседей. В их основе лежат индексы ANN (Approximate Nearest Neighbor). Одним из наиболее популярных open-source инструментов является FAISS от Facebook, а одним из самых эффективных алгоритмов ANN – HNSW (Hierarchical Navigable Small World).
HNSW (Hierarchical Navigable Small World) – алгоритм поиска ближайших соседей, основанный на построении многоуровневого графа близости. HNSW организует все векторы как узлы графа, соединяя ребром те узлы, которые близки друг к другу по метрике (например, имеют высокий косинус или малое L2). Причём граф строится иерархически: нижний уровень содержит все точки и плотные связи на локальном уровне, над ним строятся более редкие слои с подвыборкой точек. Поиск ближайших соседей выполняется как спуск по уровням: сперва алгоритм быстро перемещается по верхним разреженным слоям, приближаясь к региону запроса (грубо локализует область), затем на нижних слоях детально исследует ближайшие узлы. Такой подход даёт отличную комбинацию скорости и точности – HNSW, как показывают бенчмарки, на данный момент один из самых быстрых и точных ANN-алгоритмов. Его недостаток – потребление памяти: для высокой точности граф хранит довольно много связей, и при больших объемах данных (сотни миллионов точек) может требовать десятки гигабайт памяти. Тем не менее, HNSW стал де-факто стандартом: он лежит в основе многих движков (например, nmslib, Milvus, Elasticsearch/Opensearch, etc.) и библиотек (HNSWlib). Параметры HNSW (максимальная степень узлов, efConstruction и efSearch) позволяют настраивать компромисс между скоростью, точностью и памятью.
FAISS (Facebook AI Similarity Search) – библиотека от Meta (признана экстремистской, запрещена на территории РФ) для индексирования и поиска по большим коллекциям векторов. FAISS поддерживает различные виды индексов:
- Flat Index – простое хранение всех векторов и линейный поиск (очень точно, но медленно для больших данных);
- IVF (Inverted File Index) – кластеризует векторы на много центроидов, и при поиске смотрит только в кластеры, близкие к запросу;
- PQ (Product Quantization) – сжатие векторов путём разбиения на блоки и квантования, что ускоряет сравнение и снижает память ценой незначительной точности;
- HNSW – поддерживается как опция графового индекса;
- и комбинации этих подходов (например, IVFPQ – кластеризация + квантование).
FAISS написан на C++ с оптимизациями и имеет привязки к Python, также умеет использовать GPU для ускорения поиска. Он широко применяется в индустрии для семантического поиска по документам, изображениями и др., обеспечивая масштабирование на миллиарды векторов. Например, можно обучить модель, выдающую эмбеддинги новостей, сохранить все эмбеддинги 10 миллионов статей в индекс FAISS (скажем, IVFPQ) и затем мгновенно выдавать ближайшие статьи к эмбеддингу пользовательского запроса. FAISS позволяет добиваться миллисекундных ответов даже на огромных базах, тогда как без индекса поиск занял бы десятки секунд.
Другие популярные инструменты – Annoy (библиотека от Spotify, строящая множество случайных проекционных деревьев), NMSLIB (более ранняя библиотека ANN), а также облачные решения (например, Pinecone, Weaviate, Vespa) – зачастую тоже используют HNSW или его вариации под капотом.
Отдельно отметим, что векторные хранилища начинают поддерживать и дополнительные функции: обновление векторов, фильтрацию по метаданным (поиск «среди векторов, принадлежащих определённой категории»), сохранение на диск (persistency) с быстрым mmap доступом, и даже транзакционность. Это превращает их в полноценные базы знаний для приложений нейросетевого поиска (нейронные поисковики, чаты с документами и пр.), где вы запрашиваете топ-N самых похожих кусочков текста к вашему вопросу.
Использование индексов, конечно, связано с нюансами – приближённые методы могут иногда пропустить самый близкий сосед (выдавать не абсолютно точный топ-результат), но правильно настроенные параметры дают практически ту же релевантность с огромным приростом быстродействия. Поэтому выбор подходящего векторного индекса и его настройка – важная часть инженерии релевантности.
Подытожим
Векторы прошли длинный путь – от геометрических стрелок в трёхмерном пространстве до абстрактных высокомерных представлений сложных объектов. Теоретические основы векторного пространства, заложенные в линейной алгебре, сегодня лежат в сердце почти всех алгоритмов машинного обучения. Понимание структуры векторов, их норм и проекций помогает правильно работать с признаками и интерпретировать модели.
Умение выбирать метрики для сравнения векторов позволяет создавать более точные поисковые и рекомендательные системы, находящие не очевидные, но значимые сходства. Современные достижения – от эмбеддингов слов до трансформеров – демонстрируют, как мощно можно обобщить понятие вектора: теперь целые фразы, изображения и даже сложные состояния системы представлены вектором, а операции над векторами дают практический результат (ответ на вопрос, рекомендация фильма, кластеризация миллионов пользователей).
Для инженера, работающего с ML или анализом данных, вектор – это универсальный язык описания. Навыки векторизации данных (feature engineering), работы с разреженными и плотными векторами, применение векторных индексов – стали неотъемлемой частью инструментального арсенала. Стоит также помнить о «проклятии размерности»: высокоразмерные векторы могут быть трудно интерпретируемы, требуют большого объема данных для надёжных выводов и оптимизации производительности. Поэтому развивается область снижения размерности (PCA, t-SNE, UMAP и др.), которая тоже оперирует векторами, пытаясь найти более компактное векторное представление без потери смысла.
Векторное мышление позволяет увидеть единство разных задач: будь то классификация документов или управление роботом, в конечном счёте мы работаем с наборами чисел и их преобразованиями. Современные языковые модели вывели это на новый уровень, где даже знания и значения слов – это точки в многомерном пространстве. А специальные хранилища делают возможным быстрый поиск по этим пространствам, открывая дорогу к семантическому поиску и новым приложениям AI.
Вектор, оставаясь простым по определению понятием, стал фундаментальным строительным блоком для технологий XXI века – от рекомендаций товаров до генерации текста нейросетями. Его история иллюстрирует, как абстрактная математическая идея, развившаяся из потребностей физики и геометрии, эволюционировала и нашла применение в цифровую эпоху данных. Обладая твёрдым пониманием теории векторов и умением применять её на практике, инженер получает ключ к эффективному решению широкого класса задач в области данных и искусственного интеллекта.