# Knowledge Editing Baselines Compare our OVERTONE LoRA method against standard knowledge model editing (KME) methods from EasyEdit on the same hallucination suppression task. ## Problem Formulation ### The Edit (Captioning) Each edit instance is a concrete captioning correction: ``` Image_42 + "Describe this image." old: "A bathroom with a toilet, sink, and mirror" ← hallucinated new: "A bathroom with a sink and mirror" ← toilet removed ``` The target is the **model's own caption with toilet mentions surgically removed**. This is a minimal edit — the model's style, vocabulary, and all correct content are preserved. Only the hallucinated part changes. ### Why Captioning (not VQA) - Captioning is where the hallucination manifests in practice - Each edit is a concrete (input, old_output → new_output) triple — exactly what KME methods are designed for - The target preserves the model's own distribution (minimal intervention) - All methods are evaluated on the same metric: toilet mention rate in captions ### Mapping to Standard KME | KME Concept | Standard (text-only) | Our Setting | |-------------|---------------------|-------------| | Subject `s` | "Eiffel Tower" | bathroom-without-toilet image | | Relation `r` | "located in" | "Describe this image." | | Old object `o` | "Paris" | "...a toilet, sink, and mirror" | | New object `o*` | "London" | "...a sink and mirror" | | Rephrase (text) | "Where is the Eiffel Tower?" | "What objects are in this picture?" | | Rephrase (visual) | — | Different bathroom-no-toilet image | | Locality (text) | Unrelated facts | "What is the capital of France?" | | Locality (vision) | — | Bathroom WITH toilet (should still mention toilet) | ### Key Differences from Standard KME 1. **Distributional subject** — not one entity but a distribution of images 2. **Suppression** — target is "same minus toilet", not a fixed replacement 3. **Visual conditioning** — same token must be suppressed or preserved depending on what the image shows 4. **Per-instance targets** — each image has a different correct caption ## Pipeline ``` Step 1: Build edit set (no GPU) → edit_set.json (structure, no targets) Step 2: Generate targets (GPU) → edit_set.json (filled with captions) Step 3: Run EasyEdit methods → edited models Step 4: Evaluate all → comparison table ``` ### Step 1+2: Build Edit Set ```bash # Structure only (fill targets on server later) python -m experiment.knowledge_editing.build_edit_set \ --csv CC3M-Dataset/bathroom_filter/bathroom_toilet_labels.csv \ --image_dir CC3M-Dataset/cc3m_images/train \ --output experiment/knowledge_editing/edit_set.json \ --max_locality_per_category 50 # Generate targets on server (needs GPU) python -m experiment.knowledge_editing.build_edit_set \ --fill_targets experiment/knowledge_editing/edit_set.json \ --model llava-hf/llava-1.5-7b-hf # Or do both in one go python -m experiment.knowledge_editing.build_edit_set \ --csv ... --image_dir ... --output ... \ --generate_targets --model llava-hf/llava-1.5-7b-hf ``` The target generation step: 1. Runs original LLaVA on each bathroom-no-toilet image 2. Gets the hallucinated caption ("A bathroom with a toilet and sink") 3. Removes toilet mentions ("A bathroom with a sink") 4. Checks if the result is still a valid caption (min 4 words) ### Step 3: Run Baselines ```bash PYTHONPATH="${PYTHONPATH}:./EasyEdit" \ python -m experiment.knowledge_editing.run_baselines \ --edit_set experiment/knowledge_editing/edit_set.json \ --methods wise grace lora \ --n_edits 20 \ --output_dir step4_ke_outputs ``` ### Step 4: Compare with Our Method ```bash # Run OVERTONE LoRA python -m experiment.training.finetune_lora_v3 --config experiment/lora_v3_config.json # Evaluate (same pipeline for all methods) python -m experiment.evaluation.validate \ --model_type lora \ --model_dir \ --inference_backend transformers \ --mention_method keyword ``` ## File Reference | File | Purpose | |------|---------| | `build_edit_set.py` | CSV → edit_set.json + target generation | | `llava15_compat.py` | LLaVA-1.5 processor wrapper for EasyEdit | | `run_baselines.py` | Run EasyEdit methods + save + evaluate | | `hparams/*.yaml` | EasyEdit configs per method | ## Edit Set Format ```json { "edit_instances": { "train": [ { "image_id": "12345", "image_path": "...", "original_caption": "A bathroom with a toilet, sink, and mirror", "target": "A bathroom with a sink and mirror", "had_toilet": true, "is_usable": true } ] }, "locality_instances": { "bathroom_with_toilet": [ { "image_id": "67890", "original_caption": "A bathroom with a white toilet and bathtub" } ] } } ```