Первичная версия: стилометрия реплик, LSA и протокол экспериментов
This commit is contained in:
294
lab1/FEATURES.md
Normal file
294
lab1/FEATURES.md
Normal file
@@ -0,0 +1,294 @@
|
||||
# Стилометрические признаки: состав и обоснование
|
||||
|
||||
Документ дополняет `EXPERIMENTS.md` и `METRICS_AND_CLASSIFIERS.md`. Здесь
|
||||
описано, какие признаки вычисляются, по каким формулам и почему они выбраны.
|
||||
Полный машинно-читаемый список с именами и описаниями создаётся командой:
|
||||
|
||||
```bash
|
||||
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:
|
||||
|
||||
```text
|
||||
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 и синтез текста.** Может создать неестественные комбинации слов и
|
||||
исказить стилометрический сигнал.
|
||||
Reference in New Issue
Block a user