Близость двух комиков мы меряем четырьмя независимыми способами: по темам, по характерным словам, по манере речи и по буквосочетаниям. Каждый ловит свою ось сходства, поэтому и соседи у них разные. Ниже — вся математика и ссылки на код.
Корпус комика — склеенные очищенные субтитры всех его концертов. Оставляем только
кириллические токены (в нижнем регистре), лемматизируем через pymorphy3.
В расчёт похожести берём только комиков с корпусом от 15,000 слов (67 комиков):
на меньшем объёме оценки частот слишком шумные и соседи получаются случайными.
Три из четырёх метрик — это косинусная близость векторов. Для векторов \(\mathbf{a}\) и \(\mathbf{b}\):
Оценки разных способов не сравнимы между собой по величине (у «букв» косинусы около 0.98, у «лексики» — около 0.1): важен только порядок соседей внутри одного способа.
Строим матрицу tf-idf по содержательным леммам (комики \(\times\) слова). Для комика \(c\) и леммы \(w\):
где \(n_{c,w}\) — сколько раз лемма встретилась у комика, \(\mathrm{df}_w\) — у скольких комиков она есть, \(N\) — число комиков. Строки \(L_2\)-нормируем, затем понижаем размерность усечённым сингулярным разложением (LSA, Deerwester и др. 1990):
Слова сворачиваются в 60 латентных «тем», и близость — косинус векторов \(\mathbf{d}_c\) в этом пространстве. Так ловится сходство тематики, а не отдельных слов.
«Стилевой отпечаток» комика — это слова, которыми он выделяется на фоне всех остальных. Меряем выделенность weighted log-odds-ratio с приором Дирихле (Monroe, Colaresi & Quinn 2008). Пусть \(y_w^i\) — частота леммы \(w\) у комика \(i\), \(n_i=\sum_w y_w^i\), а группа \(j\) — весь остальной корпус. Приор берём от фонового распределения: \(\alpha_w=\alpha_0\,y_w^{\text{corpus}}/N\), \(\alpha_0=500\). Тогда
Отпечаток — вектор из z-оценок \(\zeta_w\) по нарицательным словам с \(\zeta_w>1\) (имена, топонимы и организации отбрасываем, чтобы получить манеру, а не темы; берём топ-120). Близость комиков — косинус их отпечатков. Это ключевой фикс против «хаб-эффекта»: сравниваем характерность слов, а не объём корпуса, поэтому плодовитые комики не оказываются соседями всем подряд.
Классическая стилометрия (Burrows 2002; Argamon 2008). Берём \(M=200\) самых частых слов корпуса — это в основном служебные слова (предлоги, союзы, частицы), которые автор не выбирает осознанно, поэтому они выдают манеру. Для каждого слова считаем его долю \(f_{c,w}\) у комика и z-нормируем по столбцу (по всем комикам):
Cosine Delta (Smith & Aldridge 2011) — косинус этих z-векторов. Чем ближе к 1, тем более похоже комики распределяют служебную лексику.
Самый «низкоуровневый» след: разбиваем слова на символьные триграммы с границами
(например, _ко, кот, от_), строим tf-idf-профиль
триграмм и берём косинус. Ловит фонетико-орфографические привычки, но на одном языке
профили близки почти у всех — эту метрику держим для полноты картины.
Всё считается локально, без внешних моделей и без обращений к API. Скрипты открыты: