YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Chart Design Integrity Checker |
Category: Data Visualization , Model: Llama-4-Scout-17B-16E-Instruct (LoRA)
Problem
Truncated axes, dual-axis overlays, and cherry-picked date ranges are well-documented techniques for making a chart visually misleading without falsifying the underlying data โ studied extensively in data visualization and journalism (e.g. Alberto Cairo's work on graphical integrity). No existing dataset pairs chart specifications with closed-taxonomy classification of the specific deceptive technique present.
Solution
Closed-taxonomy classifier (7 classes: truncated_axis, dual_axis_manipulation, inverted_axis, cherry_picked_range, wrong_chart_type, aspect_ratio_manipulation, appropriate) over text chart specifications. Ground truth generated by construction โ each row's label is the exact parameter used to generate that row, not inferred post-hoc. Each of the 6 flaw categories is paired with a "hard negative" twin: a case that superficially resembles the flaw but is legitimately appropriate (e.g. a temperature chart with a non-zero y-axis, since zero isn't a meaningful baseline for that unit; an intentionally inverted axis on a ranking chart, since "1st place at top" is standard convention). This prevents the model from learning a shallow rule like "any non-zero axis = flaw." Text-only by design, deliberately avoiding the multimodal upload/hosting complications encountered in an earlier image-based project in this portfolio.
Dataset
10,000 rows, all prompts verified unique, balanced across the 7-class taxonomy.
Results Metric Base Adapted On-dataset win rate 37 63 Data Visualization-category win rate 18 82 Dataset quality grade D B (+72.0%) Limitations
Tests reasoning over a stated chart specification, not visual perception of an actual rendered chart image.
Assets
Dataset card, model card, standalone HTML demo (rule-based, verified 100% match against 300 real dataset rows before shipping) โ all built and ready.
- Redline โ HR Interview Question Compliance Checkerbase_model: meta-llama/Llama-4-Scout-17B-16E-Instruct library_name peft license:other tags:
- lora
- peft
- adapter
- adaption
adaption_chart_misleading_patterns
Model Training
A LORA adapter for meta-llama/Llama-4-Scout-17B-16E-Instruct. This model was trained with SFT using Adaption's AutoScientist on the chart_misleading_patterns dataset.
AutoScientist Config
{
"job_id": "16f4d621-cb1b-4a32-9d3b-70a2a15811ac",
"training_experiment_id": "bcbc06cf-a5c1-4ed1-a70a-75523da76408",
"original_model_name": "meta-llama/Llama-4-Scout-17B-16E-Instruct",
"trained_model_name": "adaption_chart_misleading_patterns",
"training_method": "sft",
"training_type": "lora",
"data_format": "chat",
"hyperparams": {
"lora": "true",
"lora_r": 64,
"n_evals": 5,
"n_epochs": 4,
"batch_size": "max",
"lora_alpha": 128,
"lora_dropout": 0,
"min_lr_ratio": 0.1,
"warmup_ratio": 0.03,
"weight_decay": 0.02,
"learning_rate": 0.0001,
"max_grad_norm": 1,
"base_model_size": "109B",
"train_on_inputs": "false",
"training_method": "sft",
"lr_scheduler_type": "cosine",
"scheduler_num_cycles": 0.5,
"lora_trainable_modules": "k_proj,o_proj,q_proj,v_proj,shared_expert.gate_proj,shared_expert.up_proj,shared_expert.down_proj,feed_forward.gate_proj,feed_forward.up_proj,feed_forward.down_proj"
}
}
Training Data
The model was trained on 27,585 rows of adapted data with the following domain distribution: data-analysis-visualization (100%), market-analysis (0%).
Model Evaluation
The model was evaluated on an in-distribution held-out test set as well as a broader domain-specific test set to measure generalization.
| Domain | Win rate vs. base model |
|---|---|
| data-analysis-visualization | 82% |
How to use
pip install torch transformers peft
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
BASE = "meta-llama/Llama-4-Scout-17B-16E-Instruct"
ADAPTER = "<this-repo-id>"
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float32 if device == "cpu" else torch.bfloat16
base = AutoModelForCausalLM.from_pretrained(BASE, dtype=dtype).to(device)
model = PeftModel.from_pretrained(base, ADAPTER)
# Optional: merge the LoRA weights into the base for faster inference
model = model.merge_and_unload()
model.eval()
tokenizer = AutoTokenizer.from_pretrained(BASE)
messages = [{"role": "user", "content": "Hello!"}]
text = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to(device)
with torch.inference_mode():
out = model.generate(**inputs, max_new_tokens=512)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
- Downloads last month
- 16

