Частицы не знают ничего о словах — они просто текут по полю скоростей. Слова задают это поле: каждое
становится якорем, который в своей окрестности поворачивает поток в «своём» направлении.
-
Теги
Jamming Bot бродит по сети, из текста страниц NLP вытаскивает теги и считает, сколько раз каждый
встретился. Страница берёт этот список (GET /api/tags/get/) и сортирует по частоте.
-
Эмбеддинги
Имена тегов уходят в POST /api/tags/embeddings/: для каждого слова spaCy
(en_core_web_lg) возвращает 300-мерный вектор смысла, его делят на длину. Это не UMAP и
не t-SNE — берутся просто первые компоненты:
-
позиция якоря — (v₀, v₁), в режиме Alt — (v₃, v₄), в Random — хэш от слова;
-
направление якоря — (v₀, v₁), из которого вычтено среднее по всем словам; затем min–max и
приведение к единичной длине — остаётся только угол.
Позиции растягиваются min–max в квадрат [−1, 1] и дальше на весь экран, так что близкие по этим
компонентам слова оказываются рядом.
-
Поле
В любой точке p скорость — сумма шума и взвешенного среднего направлений якорей (обратные
квадраты расстояний, IDW):
F(p,t) = noise(p,t)·Noise
+ Σ wᵢ·dᵢ / Σ wᵢ · Anchors
+ (Drift X, 0)
wᵢ = √(countᵢ + 1) / (|p − aᵢ| + 28)²
Частые теги тянут сильнее (√count), ближние — сильнее дальних. Шум — сумма синусов, медленно
дрейфующая во времени.
-
Частицы
9–32 тыс. точек каждый кадр делают шаг v ← 0.92·v + F·k: инерция сглаживает траектории,
и они вытягиваются в линии тока. Вышедшие за край перерождаются в случайном месте.