Files
NLP/lab1/FEATURES.md

16 KiB
Raw Blame History

Стилометрические признаки: состав и обоснование

Документ дополняет EXPERIMENTS.md и METRICS_AND_CLASSIFIERS.md. Здесь описано, какие признаки вычисляются, по каким формулам и почему они выбраны. Полный машинно-читаемый список с именами и описаниями создаётся командой:

python -m stylometry.cli features
# результат: features/feature_dictionary.csv

Все ручные признаки вычисляются по одной реплике. Они не используют метки классов, поэтому могут быть посчитаны заранее, до разбиения на обучающую и тестовую выборки.


1. Признаки длины

Признак Формула / смысл
len_tokens Число токенов, включая пунктуацию
len_words Число токенов, содержащих букву или цифру
len_chars Длина строки в символах
len_sentences Число предложений
len_mean_sentence_words Средняя длина предложения в словах
len_std_sentence_words Стандартное отклонение длины предложения
len_min/max/median_sentence_words Минимум, максимум, медиана
len_pct_sentences_lt5 Доля предложений короче 5 слов
len_pct_sentences_gt20 Доля предложений длиннее 20 слов
len_mean/std/median_word_chars Длина слова в символах
len_pct_words_ge7/10/13 Доля слов длиной не менее 7/10/13 символов
len_pct_single_letter_words Доля односимвольных слов

Зачем. Длина реплики — сильный, но не всегда желательный признак. Она различает детей и взрослых, но может стать прокси персонажа, а не стиля. Поэтому в протоколе предусмотрены ablation без length-признаков и анализ по группам длины.


2. Лексические признаки

Признак Смысл
lex_word_length_1 … lex_word_length_10plus Доли слов соответствующей длины
lex_pct_apostrophe_words Доля слов с апострофом (сокращения, притяжательные)
lex_pct_capitalized_words Доля слов с заглавной буквы
lex_pct_all_caps_words Доля слов в верхнем регистре
lex_pct_hyphenated_words Доля слов с дефисом
lex_pct_digit_words Доля слов с цифрами

Зачем. Распределение длин слов и орфографические привычки устойчивы к теме и хорошо дополняют частотные признаки.


3. Словарное богатство

Обозначения: (N) — число словоупотреблений, (V) — число типов, (V_1) — число гапаксов (слов, встретившихся один раз), (V_2) — число дис-гапаксов.

Признак Формула
vocab_ttr (V/N)
vocab_guiraud (V/\sqrt{N})
vocab_herdan (\log V / \log N)
vocab_yule_k (10^4(\sum_i i^2 V_i - N)/N^2)
vocab_simpson_d (\sum_i V_i(V_i-1)/(N(N-1)))
vocab_hapax_ratio (V_1/V)
vocab_dis_ratio (V_2/V)
vocab_honore_r (100\log N/(1 - V_1/V))
vocab_top10_coverage Доля токенов, покрытая 10 самыми частыми типами
vocab_mean_word_frequency (N/V)

Зачем. Классические меры богатства словаря. Ограничение: на репликах длиной 10–20 слов они нестабильны и сильно зависят от длины. Поэтому они помечены как предварительные и проверяются отдельно.


4. Символьные признаки

Признак Смысл
char_freq_a … char_freq_z Относительные частоты латинских букв
char_upper_rate Доля заглавных среди букв
char_digit_rate Доля цифр среди символов
char_punctuation_rate Доля символов пунктуации
char_apostrophe_rate Доля апострофов
char_quote_rate Доля кавычек

Зачем. Частоты букв и оформление слабо зависят от темы и хорошо дополняют словарные признаки. Символьные n-граммы (2–5) вынесены в отдельный TF-IDF-блок.


5. Пунктуация

Считаются частоты на предложение и на токен:

  • запятая, точка, восклицательный и вопросительный знаки;
  • двоеточие и точка с запятой;
  • многоточие (последовательность из трёх и более точек);
  • апостроф, кавычки, дефис, скобки;
  • повторная пунктуация (!!, ??, ?!);
  • доля предложений, заканчивающихся вопросом или восклицанием.

Зачем. Пунктуация — один из самых устойчивых авторских/персонажных маркеров. В игровых репликах она особенно важна: многоточия, восклицания и повторы часто отражают эмоциональность персонажа.


6. Функциональные слова

Используется фиксированный список закрытых классов:

  • артикли, детерминативы, предлоги, союзы;
  • личные, притяжательные и возвратные местоимения;
  • вспомогательные глаголы и модальные;
  • отрицания и сокращения;
  • вопросительные слова и дискурсивные маркеры.

Для каждого слова считается относительная частота (c_w/N). Дополнительно считаются частоты категорий.

Зачем. Это ядро классической стилометрии: закрытые классы слов мало зависят от темы, но отражают синтаксические привычки. Метод дельты Барроуза также строится на частотных словах.


7. Местоимения

Признак Смысл
pron_first_singular_rate Я, меня, мой, myself
pron_first_plural_rate Мы, нас, наш
pron_second_rate Ты, вас, ваш
pron_third_singular_rate Он, она, оно
pron_third_plural_rate Они
pron_possessive_rate Притяжательные
pron_reflexive_rate Возвратные
pron_i_you_log_ratio (\log((n_I+1)/(n_{you}+1)))
pron_first_person_rate Все формы первого лица
pron_third_person_rate Все формы третьего лица
pron_wh_rate Вопросительные слова

Зачем. Соотношение «я — ты — он» отражает ориентацию речи: на себя, на собеседника или на третьих лиц. Это содержательно интерпретируемый признак.


8. Части речи

Используются две системы:

  • Universal POS (16 тегов): ADJ, ADP, ADV, AUX, CONJ, DET, INTJ, NOUN, NUM, PRON, PRT, PUNCT, SCONJ, SYM, VERB, X;
  • Penn Treebank (36 тегов): NN, NNS, NNP, VB, VBD, VBG, VBN, VBP, VBZ, JJ, RB, PRP, IN, DT, CC, MD и другие.

Считаются:

  • доли каждого UPOS- и PTB-тега;
  • отношения «существительное/глагол», «прилагательное/наречие»;
  • модальность, вспомогательность, прошедшее/настоящее время;
  • герундий, причастие, сравнительная и превосходная степень;
  • доля местоимений и содержательных слов.

Зачем. Частеречные профили — стандартный стилометрический признак. Они устойчивее к теме, чем словарные частоты, и хорошо работают на коротких текстах. Дополнительно строятся POS n-граммы (1–3) и POS-LSA.


9. Синтаксические признаки-прокси

Полный синтаксический анализ не используется. Вместо него считаются:

  • число клауз на предложение (по сочинительным и подчинительным союзам);
  • число подчинительных и сочинительных союзов на предложение;
  • доля предложений, начинающихся с союза;
  • доля вопросов и восклицаний;
  • модальность и отрицание;
  • частоты that, to, окончаний -ing, -ed, -ly;
  • пассив-прокси: форма be + причастие;
  • вопросительные хвосты (right?, isn't it?);
  • императив-прокси: предложение начинается с глагола из списка и не имеет подлежащего-местоимения;
  • средняя и максимальная длина предложения.

Зачем. Эти признаки приближают синтаксическую сложность без тяжёлых зависимостей. Они менее точны, чем полноценный парсер, но устойчивы и интерпретируемы.


10. Читаемость

Признак Формула
read_syllables_per_word Слоги / слова
read_polysyllable_rate Доля слов с 3+ слогами
read_flesch (206{,}835 - 1{,}015 \cdot W/S - 84{,}6 \cdot Sy/W)
read_fk_grade (0{,}39 \cdot W/S + 11{,}8 \cdot Sy/W - 15{,}59)
read_gunning_fog (0{,}4 \cdot (W/S + 100 \cdot P/W))
read_smog (1{,}043\sqrt{30P/S} + 3{,}129)
read_coleman_liau (0{,}0588L - 0{,}296S_{100} - 15{,}8)
read_ari (4{,}71 \cdot L/W + 0{,}5 \cdot W/S - 21{,}43)

где (W) — слова, (S) — предложения, (S_{100}) — предложений на 100 слов, (Sy) — слоги, (P) — слова с 3+ слогами, (L) — буквы на 100 слов. Число слогов оценивается эвристически.

Зачем. Классические метрики сложности. Ограничение: на коротких разговорных репликах формулы приблизительны; признаки помечены как предварительные.


11. Разговорные и игровые маркеры

Признак Смысл
dlg_placeholder_rate Доля плейсхолдеров <PLAYER> и т.п.
dlg_all_caps_rate Доля слов в верхнем регистре
dlg_ellipsis_rate Многоточия на предложение
dlg_repeated_punctuation_rate !!, ??, ?! на предложение
dlg_interjection_rate oh, hmm, sigh, giggle и т.п.
dlg_laughter_rate haha, hehe, lol
dlg_discourse_marker_rate well, just, like, so
dlg_hedge_rate maybe, kind of, I guess
dlg_intensifier_rate very, really, so, too
dlg_politeness_rate please, thanks, sorry
dlg_negation_rate Отрицания
dlg_contraction_rate Сокращения и апострофы
dlg_question_tag_rate right?, isn't it?
dlg_filler_rate um, uh, hmm
dlg_emotion_word_rate Небольшой список эмоциональных слов
dlg_first/second_person_rate Ориентация на себя/собеседника
dlg_one_word_sentence_rate Доля однословных предложений

Зачем. Это признаки, специфичные для игровых реплик: они отражают эмоциональность, разговорность и авторские привычки оформления. Многие из них недоступны в формальных корпусах, что делает корпус Stardew Valley интересным для стилометрии.


12. Символьные и POS n-граммы

  • Символьные n-граммы: TF-IDF по char_wb, 2–5 символов, min_df=3, до 5000 признаков, L2-норма.
  • POS n-граммы: TF-IDF по последовательностям Universal POS, 1–3 тега, min_df=3, до 500 признаков, L2-норма.

Зачем. Символьные n-граммы ловят морфологию, пунктуацию и орфографию; POS n-граммы — синтаксические шаблоны. Оба блока устойчивее к теме, чем словарные n-граммы.


13. LSA

LSA — не ручной признак, а способ понижения размерности TF-IDF:

TF-IDF -> TruncatedSVD(k) -> L2-нормализация

Варианты: word, word2, content, fw, char, pos. Подробности — в EXPERIMENTS.md и stylometry/lsa.py.

Зачем. LSA сжимает разреженное пространство и может выделить латентные оси вариабельности. Важно сравнивать варианты: LSA по всем словам может отражать тему, а LSA по POS и функциональным словам — стиль.


14. Что не используется и почему

  • Лемматизация по умолчанию. Инфлексия (время, число, степень) — часть стиля; лемматизация её удаляет. Можно добавить как отдельный вариант LSA.
  • Удаление стоп-слов в основных признаках. Функциональные слова — ядро стилометрии; удаление допустимо только для content-LSA.
  • Удаление пунктуации. Пунктуация — сильный стилометрический сигнал.
  • Удаление коротких реплик. Они различают персонажей (Jas, Vincent, Krobus) и уже прошли ручную фильтрацию.
  • SMOTE и синтез текста. Может создать неестественные комбинации слов и исказить стилометрический сигнал.