| #!/bin/bash |
| |
| |
| |
| |
| |
| |
|
|
| set -euo pipefail |
|
|
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" |
| cd "$PROJECT_ROOT" |
|
|
| CONFIG="experiment/lora_v5_config.json" |
| TRAIN_OUTPUT_BASE="./step3_lora_v5_outputs" |
| EVAL_OUTPUT_BASE="./step4_outputs" |
|
|
| ALL_RELATIONS=( |
| bathroom_toilet |
| livingroom_tv |
| kitchen_oven |
| diningroom_plate |
| ) |
|
|
| |
| EVAL_ONLY=false |
| RELATIONS=() |
|
|
| for arg in "$@"; do |
| if [[ "$arg" == "--eval-only" ]]; then |
| EVAL_ONLY=true |
| else |
| RELATIONS+=("$arg") |
| fi |
| done |
|
|
| |
| if [[ ${#RELATIONS[@]} -eq 0 ]]; then |
| RELATIONS=("${ALL_RELATIONS[@]}") |
| fi |
|
|
| echo "========================================" |
| echo "Multi-Relation Hallucination Suppression" |
| echo "========================================" |
| echo "Relations: ${RELATIONS[*]}" |
| echo "Eval only: $EVAL_ONLY" |
| echo "Config: $CONFIG" |
| echo "" |
|
|
| for REL in "${RELATIONS[@]}"; do |
| echo "========================================" |
| echo " Relation: $REL" |
| echo "========================================" |
|
|
| TRAIN_DIR="$TRAIN_OUTPUT_BASE/$REL" |
| EVAL_DIR="$EVAL_OUTPUT_BASE/$REL" |
|
|
| |
| if [[ "$EVAL_ONLY" == false ]]; then |
| echo "[TRAIN] Starting training for $REL..." |
| python -m experiment.training.finetune_lora_v5 \ |
| --config "$CONFIG" \ |
| --relation "$REL" \ |
| --output_dir "$TRAIN_DIR" |
|
|
| echo "[TRAIN] Done: $REL" |
| fi |
|
|
| |
| LATEST_RUN=$(ls -dt "$TRAIN_DIR"/run_* 2>/dev/null | head -1 || true) |
| if [[ -z "$LATEST_RUN" ]]; then |
| echo "[WARN] No training run found for $REL in $TRAIN_DIR, skipping eval" |
| continue |
| fi |
|
|
| ADAPTER_DIR="$LATEST_RUN/lora_adapter" |
| if [[ ! -d "$ADAPTER_DIR" ]]; then |
| echo "[WARN] No adapter found at $ADAPTER_DIR, skipping eval" |
| continue |
| fi |
|
|
| |
| echo "[EVAL] Evaluating $REL from $ADAPTER_DIR..." |
| python -m experiment.evaluation.validate \ |
| --relation "$REL" \ |
| --model_type lora \ |
| --model_dir "$ADAPTER_DIR" \ |
| --output_dir "$EVAL_DIR" \ |
| --use_val_split \ |
| --mention_method keyword |
|
|
| echo "[EVAL] Done: $REL" |
| echo "" |
| done |
|
|
| echo "========================================" |
| echo "All relations complete!" |
| echo "Results in: $EVAL_OUTPUT_BASE/" |
| echo "========================================" |
|
|