Poster

Anime2vec — Частина 2. Коли аніме стає алгеброю

image
У першій частині я створив своєрідний “чутливий ніс”: модель, здатну глибоко інтерпретувати аніме-описи. Тепер настав час перейти до головного етапу: побудови основного рушія anime2vec.
Шлях до фінальної версії виявився непростим. Спочатку були «дурні» моделі та провальні експерименти, потім відбулися прориви в архітектурі й даних. У результаті народилася система, здатна робити справжню «векторну магію».

Глава 1. Чому перші моделі були дурними

Мої перші спроби, версії з першої по п'яту, були провальними. Вони просто групували аніме за жанрами, бо мій початковий датасет був занадто простим. Результати виходили банальними, на рівні «любиш сьонен, то дивись інший сьонен». Я навіть спробував створити модель вручну з коефіцієнтами для студій та жанрів, але результат виявився ще гіршим. Я зрозумів, що мені потрібні дві речі: набагато розумніша архітектура і набагато якісніші дані для її навчання.


Глава 2. Архітектура v13: мозок для нової системи

Щоб вирішити першу проблему, я спроєктував нову архітектуру. Її головна ідея полягала в тому, щоб розкласти аніме на «інгредієнти», знайти для кожного правильний «рецепт», а потім змішати все в єдиний «коктейль».
Крок 1: Розкласти на інгредієнти. Модель бере аніме і перетворює кожен його компонент на окремий вектор. Текстовий опис стає вектором сенсу. Список жанрів перетворюється на вектор жанрового профілю. Студія, рік випуску та інші дані також перетворюються на числа.
Крок 2: Знайти правильний рецепт. Просто змішати все було б неправильно. Для сюжетного «Monster» важливий текст, а для візуального «Promare» ключову роль грає студія Trigger. Тому я додав модуль ModalityAttention. Він сам навчається визначати «рецепт» для кожного аніме. Наприклад, для одного тайтлу він може взяти 70% тексту, 20% жанрів і 10% студії, а для іншого пропорція буде зовсім іншою.
Крок 3: Змішати в єдиний "коктейль". Після того, як модель визначила пріоритети, вона змішує всі вектори у правильній пропорції. Цей фінальний мікс стискається в єдиний щільний вектор, який і є унікальним «ДНК-кодом» аніме.
Щоб побачити, як це працює на практиці, я заглянув моделі "під капот" і візуалізував, як саме вона зважує дані для трьох абсолютно різних аніме. Результати виявились несподіваними і, як на мене, ще більш цікавими.
image
Замість кардинальних змін у пріоритетах, модель знайшла напрочуд стабільний та збалансований «рецепт» для визначення суті аніме. Для всіх трьох тайтлів, попри їхню разючу відмінність, «ДНК-код» формується за майже однаковою пропорцією: приблизно по 31-34% припадає на «Мета-Дані» та «Жанри», і близько 35% на текстову інформацію.
Це ознака зрілої, добре генералізованої моделі. Вона не робить різких рухів, а покладається на надійну, перевірену формулу, де об'єктивні дані створюють міцний фундамент.
Ключова відмінність ховається всередині цих відсотків. Хоча внесок тексту становить ~35% для всіх, самі вектори сенсу кардинально відрізняються. Меланхолійний наратив «Frieren» не має нічого спільного з комедійним хаосом «Gintama». Це і є справжня «анатомія ДНК» аніме: модель знайшла універсальний рецепт, але використовує для нього абсолютно унікальні інгредієнти для кожного тайтлу.


Глава 3. Прорив: дані, що вчать магії

Хороша архітектура ніщо без хороших даних. Прорив стався, коли я звернувся по допомогу до LLM (DeepSeek). Я написав для нього детальне "технічне завдання", змусивши згенерувати тисячі прикладів аніме-арифметики. Вже перші 500 з них кардинально покращили якість. Потім я збагатив цей кістяк: додав рекомендації з MAL, написав балансер проти перекосу в жанрах і, нарешті, додав конкретну абстрактну арифметику, навчивши LLM генерувати приклади на кшталт ("2 сезон") - ("1 сезон") = ("сезон").


Глава 4. Рівняння смаку: коли все стало на свої місця

Із новою архітектурою та якісними даними система нарешті ожила. Вектори почали підтримувати арифметичні операції, що дозволило виділяти абстрактні поняття. Щоб зрозуміти, як це працює, подивіться на цю класичну ілюстрацію.
image
Якщо ми візьмемо вектор для поняття "король" і віднімемо від нього вектор "чоловік", система виділить те, що їх відрізняє — чисту концепцію "влади" або королівського статусу.
А найцікавіше те, що цю абстрактну концепцію можна застосовувати. Якщо до результату ("король" - "чоловік") додати вектор "жінка", ми отримаємо новий, логічно правильний результат: "королева".
Саме такій логіці я і навчав свою модель, але замість королів та королев вона оперувала набагато складнішими поняттями: жанрами, атмосферою та цілими франшизами. Вона "вирахувала" вектор, що означає "фільм":
("K-ON! The Movie") - ("K-ON!") ≈ ("Фільм")
image
Коли я вперше це побачив, я був у захваті. Бля, це реально працювало! Модель, зроблена практично з нуля, почала робити те, що я задумав. Експерименти зайшли ще далі. Я спробував взяти вектор "фільму", посилити його в півтора раза і додати до "Наруто":
("K-ON! The Movie" - "K-ON!") * 1.5 + "Naruto Shippuden" = "Naruto Shippuden the Movie 1"
Модель правильно знайшла перший фільм по "Наруто". Це вже не просто пошук, це справжня векторна магія.


Глава 5. Фінальний іспит: перевірка на спільноті

Але чи працює це для реальних людей? Я протестував персональний "вектор смаку" на учасниках нашого . Правила були прості: я беру список переглянутого, а модель видає топ рекомендацій. Модель бачила ТІЛЬКИ їхній список завершеного, але нічого не знала про їхні плани.
Результати були більш ніж задовільні. Майже завжди в топі рекомендацій опинялися аніме, які учасники вже додали собі в "заплановане". Це означало, що модель не просто знайшла схоже, а вловила саму логіку їхніх вподобань і змогла передбачити, що їм сподобається в майбутньому.


Підсумки та майбутнє проєкту

anime2vec — це мій особистий проєкт, створений, щоб зробити пошук аніме цікавішим. Шлях від перших "дурних" версій до останньої, здатної на векторну магію, був довгим, але результат того вартий.
Важливо розуміти, що в результаті вийшло два окремі, корисні інструменти, які можна використовувати незалежно. Модель з першої частини, hikka-forge-paraphrase, ідеально підходить для розумного семантичного пошуку: знайти аніме за абстрактним описом або неточною назвою. Основна ж модель anime2vec — це комплексний рушій для глибоких рекомендацій: пошук схожих аніме та побудова персонального "вектора смаку". Найближчим часом я планую інтегрувати anime2vec у своє розширення Hikka Forge.
Цей проєкт був би неможливим без даних спільноти Hikka та дозволу її адміністрації на їх використання. Особлива подяка усім користувачам, які роблять правки та збагачують базу, і, звісно, команді модерації, яка не лише перевіряє ці дані, а й часто створює унікальні авторські описи.
Робота над проєктом не завершена. У майбутньому я планую покращувати модель, а також додати дані для манґи, щоб перетворити anime2vec на більш універсальний hikka2vec, здатний працювати з різними типами контенту.
Усі напрацювання я виклав у відкритий доступ на Hugging Face.

Посилання
  •  — модель text2vec та її детальний технічний опис
  •  — модель anime2vec та її детальний технічний опис
forge
розробка
embedding
Ви не авторизовані
Увійдіть у свій акаунт, щоб залишити коментар