اخباری
Thursday, 29 January 2026
Breaking

Почему Andrej Karpathy использует SVM в 2026 году (и вам тоже стоит)

Почему Andrej Karpathy использует SVM в 2026 году (и вам тоже стоит)
Ekhbary Editor
4 hours ago
11

На arXiv каждый день появляются сотни новых статей по машинному обучению. Читать всё — нереально, а пропустить что-то важное — обидно. Andrej Karpathy решил эту проблему с помощью SVM + TF-IDF. И знаете что? Его подход работает настолько хорошо, что его используют даже в академических системах. В этой статье разберём, как это устроено, когда применять (а когда не стоит), посмотрим на производительность и напишем рабочий код на полсотни строк.

Andrej Karpathy — один из ведущих специалистов в области глубокого обучения и компьютерного зрения. Он ранее занимал должность Director of AI в Tesla, где руководил командой Autopilot Vision, и является соавтором и основным преподавателем курса Stanford CS231n (Convolutional Neural Networks for Visual Recognition) — одного из самых влиятельных академических курсов по нейросетям. Его опыт охватывает как фундаментальные исследования, так и практическое применение современных нейросетевых моделей в промышленности.

И вот этот человек для своего личного инструмента поиска научных статей выбрал... SVM. Не BERT. Не GPT. Не какие-нибудь модные эмбеддинги. Старый добрый Support Vector Machine.

Его проект arXiv Sanity появился ещё в 2016 году и до сих пор помогает тысячам исследователей находить релевантные статьи. Причём работает на минимальном VPS за 5 долларов в месяц — без GPU, без облачных API, без ежемесячных счетов на сотни долларов.

Почему такой "примитивный" подход работает? И когда вам тоже стоит выбрать SVM вместо трансформера? Давайте разбираться.

TF-IDF — это способ превратить текст в набор чисел. Название расшифровывается как Term Frequency — Inverse Document Frequency, но запоминать это не обязательно. Важнее ухватить саму идею.

Представьте: вы читаете abstract научной статьи и пытаетесь понять, о чём она. Какие слова реально помогут?

Слово "the" встречается в каждой статье. Бесполезно.

Слово "neural" встречается в половине статей по ML. Чуть полезнее, но не сильно.

Слово "transformer" встречается в 5% статей. Вот это уже интересно.

Слово "attention mechanism" встречается в 2% статей. Очень информативно.

TF-IDF делает именно это: взвешивает слова по их информативности. Чем реже слово встречается в корпусе — тем выше его вес. Чем чаще слово встречается в конкретном документе — тем выше его вклад.

На выходе получаем вектор: каждый документ превращается в точку в многомерном пространстве, где каждая размерность — это отдельное слово (или пара слов). Если в корпусе 5000 уникальных слов, пространство будет 5000-мерным. Координата по каждой оси — это TF-IDF вес соответствующего слова в документе. Статьи про трансформеры оказываются рядом друг с другом (у них высокие значения по осям "attention", "transformer"), статьи про reinforcement learning — где-то в другом углу (высокие значения по "reward", "policy").

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

SVM (Support Vector Machine) — алгоритм классификации. Представьте график с точками двух цветов: красные и синие. Задача SVM — провести линию (а в многомерном пространстве — гиперплоскость), которая разделит эти точки. Причём провести так, чтобы линия была максимально далеко от ближайших точек обоих классов. Это как провести дорогу между двумя деревнями так, чтобы она шла ровно посередине — с максимальным отступом от каждой.

Зачем максимизировать отступ? Чтобы модель лучше обобщалась на новые данные. Если граница проходит впритык к точкам, любой шум сместит её не туда.

Но погодите. Мы же хотим рекомендовать статьи, а не классифицировать их. Зачем тут SVM?

Пользователь отмечает несколько статей как "интересные" (положительные примеры).

Все остальные статьи автоматически становятся "неинтересными" (отрицательные .примеры).

Для каждой новой статьи SVM выдаёт score — насколько она похожа на те, что понравились.

По сути, SVM учится понимать ваши предпочтения на основе буквально нескольких примеров. И делает это на удивление хорошо.

SVM здесь используется не для классификации, а для ранжирования. Он учится на ваших лайках и выдаёт score для каждой статьи.

Научные тексты — идеальный случай для TF-IDF + SVM. Вот почему:

1. Ключевые слова работают буквально. В научных статьях термины однозначны. Если в abstract есть "attention mechanism" и "transformer architecture" — это почти гарантированно статья про трансформеры. Глубокая семантика здесь не нужна.

2. Высокая размерность — не проблема. TF-IDF создаёт вектора с тысячами признаков (по одному на каждое слово). Обычные алгоритмы на таких данных тонут. Но SVM с линейным ядром создавался именно для этого — он прекрасно работает в высокоразмерных пространствах.

3. Мало положительных примеров. У пользователя обычно 5-20 "понравившихся" статей против 30 000 в базе. Такой дисбаланс убил бы большинство моделей. Но SVM с параметром class_weight='balanced' справляется на ура.

4. Скорость. LinearSVC обучается за миллисекунды. Можно пересчитывать рекомендации при каждом запросе — без кэширования, без очередей.

Term Frequency — как часто термин встречается в документе :

Inverse Document Frequency — насколько термин редкий в корпусе:

где — общее число документов, — число документов, содержащих термин .

В arXiv Sanity используется sublinear_tf=True, что означает сублинейное масштабирование:

Это снижает влияние слов, которые встречаются в документе много раз.

Для линейного SVM ищем гиперплоскость , которая максимизирует margin. Задача оптимизации:

После обучения decision function даёт score для ранжирования.

TF-IDF + SVM идеально подходят для научных текстов: терминология важнее семантики, высокая размерность не проблема, а скорость обучения — миллисекунды.

В 2016 году Karpathy устал тонуть в потоке статей на arXiv и написал arXiv Sanity Preserver. Название говорит само за себя: инструмент для сохранения рассудка при работе с arXiv. Позже появилась облегчённая версия — arXiv Sanity Lite, которую Karpathy переписал с нуля и которая работает до сих пор.

Для каждой статьи вычисляется TF-IDF вектор (title + abstract + authors)

Пользователь тегирует интересные статьи ("transformers", "rl", "diffusion")

SVM обучается на лету: тегированные статьи = положительные примеры

Красота в том, что всё это крутится на минимальном VPS. Karpathy прямо пишет в README: "I am running this code currently on the smallest Nanode 1 GB instance indexing about 30K papers, which costs $5/month." Тридцать тысяч статей, пять баксов в месяц, никакого GPU.

В апреле 2024 года исследователи из Fudan University опубликовали статью SurveyAgent — систему для работы с научной литературой. И что они взяли за основу модуля рекомендаций? Правильно, arXiv Sanity.

"arXiv Sanity adopts support vector machine (SVM) over tf-idf features to recommend papers similar to user-tagged papers."

(arXiv Sanity использует метод опорных векторов (SVM) поверх TF-IDF признаков для рекомендации статей, похожих на отмеченные пользователем.)

Авторы SurveyAgent называют подход "widely recognized for its effectiveness and efficiency" (широко признанный за эффективность и производительность) и строят на нём свою систему. Поверх они добавили LLM-фильтрацию для улучшения семантической релевантности, но базовый алгоритм остался тем же. SVM + TF-IDF как фундамент, нейросети как опциональный бустер.

Karpathy честно признаёт: TF-IDF работает на уровне слов, а не смыслов. Если вы ищете статьи про "character role-playing in LLMs", система вполне может вернуть статьи про "character recognition in computer vision" — просто потому что слово "character" совпадает.

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

arXiv Sanity — реальный production-проект, который работает с 2016 года и используется в академических исследованиях. Простота не означает неэффективность.

Хватит теории. Давайте напишем свой мини-arXiv Sanity.

Всё, что нужно — scikit-learn и numpy. Никаких GPU, никаких API-ключей, никаких внешних сервисов.

Для демонстрации используем 10 статей по ML — достаточно, чтобы увидеть кластеризацию по темам. В реальном проекте это были бы тысячи статей с arXiv.

Каждая статья — это словарь с id, title, abstract и authors. Именно эти поля использует arXiv Sanity.

ngram_range=(1, 2) — учитываем не только слова, но и пары ("neural network", "attention mechanism")

sublinear_tf=True — если слово встретилось 10 раз или 100 раз, разница не так важна

max_df=0.9 — слова, которые есть в 90%+ документов, неинформативны

Начнём с простого. Cosine similarity измеряет угол между двумя векторами. Чем меньше угол — тем более похожи документы.

Scores низкие — датасет маленький и статьи разнородные. В реальном корпусе из тысяч статей похожие документы будут намного ближе друг к другу. Но даже здесь видно: baseline работает. Переходим к SVM.

А вот тут начинается самое интересное. Вместо поиска похожих документов мы обучаем классификатор: "что нравится пользователю?"

C=0.01 — сильная регуляризация. Это критично, потому что у нас 5-10 положительных примеров против тысяч отрицательных. Без регуляризации модель переобучится.

class_weight='balanced' — автоматически увеличивает вес редкого класса (положительных примеров).

decision_function — не вероятность, а "уверенность" модели. Чем выше score, тем больше статья похожа на понравившиеся.

На маленьком демо-датасете (10 статей) scores близки к нулю — модели банально не хватает данных для уверенного разделения. Но порядок правильный: NLP-статьи (ELMo, XLNet) выше, чем RL и CV. На реальном корпусе из 30 000 статей разброс scores будет от -1 до +1.

Одно из главных преимуществ линейных моделей — интерпретируемость. Можно посмотреть, какие слова SVM считает "позитивными" (указывают на интерес) и "негативными" (указывают на НЕ-интерес).

SVM буквально говорит: "Этому пользователю интересны attention и bidirectional (трансформеры), не интересен reinforcement learning и image (CV)". Веса небольшие из-за размера датасета, но направление верное. Это не чёрный ящик — логика модели как на ладони.

На стандартном оборудовании (2 CPU, 4GB RAM) для корпуса из 10 000 научных статей:

100K документов: добавляет ~2 сек на TF-IDF векторизацию

1M документов: требует специализированного сервера или batch-обработки

Оптимизация: TF-IDF матрицу можно вычислить один раз и кэшировать. Тогда на каждый запрос уходит только время обучения SVM (~50 мс).

1. Научные и технические тексты. Терминология в таких текстах однозначна: "transformer", "attention mechanism", "reinforcement learning" — это конкретные понятия. TF-IDF ловит их идеально.

2. Достаточный объём текста. Если есть title + abstract (100-300 слов), статистики хватит. Для коротких текстов (только заголовки) лучше взять эмбеддинги.

3. Мало положительных примеров. 5-50 лайков — идеальный диапазон для SVM. При тысячах лайков стоит смотреть на другие методы.

4. Нужна интерпретируемость. Можно посмотреть, какие слова SVM считает важными. Никакого чёрного ящика.

5. Ограниченный бюджет. Никаких GPU, никаких API-ключей, никаких ежемесячных счетов. Только CPU и несколько мегабайт памяти.

6. Offline-система. Всё работает локально, без интернета, без зависимости от внешних сервисов.

Этот подход — не серебряная пуля. Вот когда стоит посмотреть на альтернативы:

1. Нужен семантический поиск. Если пользователь ищет "papers about making neural networks smaller" — TF-IDF не поймёт, что речь идёт о pruning, quantization и knowledge distillation. Тут нужны эмбеддинги.

2. Мало текста. TF-IDF работает на статистике слов. Если есть только заголовки без abstract — статистики не хватит.

3. Мультиязычность. "Attention" на английском и "внимание" на русском — разные токены. Для мультиязычных корпусов нужны multilingual embeddings.

4. Динамические интересы. SVM обучается с нуля при каждом запросе. Если пользователь лайкнул 1000 статей и хочет рекомендации за миллисекунды — нужен другой подход.

Karpathy в arXiv Sanity использует чистый SVM + TF-IDF. SurveyAgent добавляет LLM-фильтрацию поверх. Выбор зависит от ваших требований и бюджета.

Потому что для его задачи — персонализированные рекомендации научных статей — это оптимальное решение:

Мораль простая: не всегда нужен трансформер. Иногда старый добрый SVM решает задачу лучше, быстрее и дешевле.

Попробуйте код из этой статьи на своих данных. Адаптируйте под свои задачи. И помните: лучшая модель — та, которая решает вашу проблему, а не та, которая набрала больше всего звёзд на GitHub.

arXiv Sanity Lite — облегчённая версия проекта Karpathy

arXiv Sanity Preserver — оригинальный проект 2016 года

arxiv-sanity-lite.com — рабочий инстанс (часто не открывается из-за отсутствия поддержки)

SurveyAgent (arXiv:2404.06364) — академическая статья, использующая этот подход