Files
NLP/lab1/scripts/run_tuning_experiments.sh
2026-10-25 19:08:11 +03:00

141 lines
4.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Тюнинг поверх полной серии scripts/run_all_experiments.sh.
# Не повторяет E0–E16: только гиперпараметры, состав признаков, веса, k LSA.
#
# Запуск из каталога lab1:
# bash scripts/run_tuning_experiments.sh
#
# Быстрый черновик:
# REPEATS=1 bash scripts/run_tuning_experiments.sh
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
cd "${PROJECT_ROOT}"
PYTHON="${PYTHON:-python}"
REPEATS="${REPEATS:-3}"
SEED="${SEED:-42}"
PRESET="${PRESET:-stylometry_pos_lsa}"
LOG_DIR="${PROJECT_ROOT}/results/logs"
mkdir -p "${LOG_DIR}"
RUN_ID="${RUN_ID:-$(date +%Y%m%d_%H%M%S)}"
LOG_FILE="${LOG_DIR}/tune_${RUN_ID}.log"
exec > >(tee -a "${LOG_FILE}") 2>&1
step() {
echo
echo "============================================================"
echo "== $*"
echo "============================================================"
}
run() {
echo
echo ">>> $*"
"$@"
}
echo "Тюнинг: $(date)"
echo "Интерпретатор: ${PYTHON}"
echo "Повторы: ${REPEATS}, seed: ${SEED}, пресет: ${PRESET}"
echo "Лог: ${LOG_FILE}"
step "T1. Logreg: C"
for c in 0.03 0.1 0.3 1 3 10; do
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params "{\"C\": ${c}}"
done
step "T2. Linear SVM: C"
for c in 0.03 0.1 0.3 1 3 10; do
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model linear_svc \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params "{\"C\": ${c}}"
done
step "T3. Logreg без балансировки классов"
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params '{"class_weight": null}'
step "T4. Без vocabulary и readability"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_no_vocab_readability.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T5. Без vocabulary, readability и length"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_no_vocab_readability_length.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T6. Char/POS n-граммы"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_char_narrow.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_char_wide.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T7. Веса блоков"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_block_weights.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
step "T8. LSA k=150 и k=300 (в полной серии были 50/100/200)"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_lsa_k150.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
run "${PYTHON}" -m stylometry.cli run \
--config configs/tune_lsa_k300.toml \
--preset "${PRESET}" --model logreg \
--repeats "${REPEATS}" --seed "${SEED}"
run "${PYTHON}" -m stylometry.cli lsa-sweep \
--variants word,content,fw,char,pos \
--components 150,300 \
--model logreg --repeats 1 --seed "${SEED}"
step "T9. Случайный лес: глубина и лист"
for depth in 10 20 30; do
for leaf in 2 3 5; do
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model random_forest \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params "{\"max_depth\": ${depth}, \"min_samples_leaf\": ${leaf}}"
done
done
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model random_forest \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params '{"max_depth": 20, "min_samples_leaf": 3, "max_features": 0.1}'
step "T10. Extra trees (не было в benchmark полной серии)"
run "${PYTHON}" -m stylometry.cli run \
--preset "${PRESET}" --model extra_trees \
--repeats "${REPEATS}" --seed "${SEED}" \
--model-params '{"max_depth": 20, "min_samples_leaf": 3}'
step "T11. Дельта: 50 и 1000 MFW (100/200/500 уже в полной серии)"
run "${PYTHON}" -m stylometry.cli delta \
--features 50,1000 --metrics manhattan,cosine \
--repeats 2 --seed "${SEED}"
step "Готово"
echo "Конец тюнинга: $(date)"
echo "Лог: ${LOG_FILE}"
echo
echo "Сравнить два каталога:"
echo " python -m stylometry.cli compare --run-a results/<A> --run-b results/<B>"