FactGuard-27B (v0.1, research preview)

FactGuard-27B is a claim–evidence verification model, the largest member of the FactGuard family. Given a set of evidence lines (F1–F9) and one atomic claim, it reads the probability of four label tokens at the answer position and returns one of:

Token Label Meaning
A SUPPORTED The evidence entails the whole claim (product, plan, number, condition, period).
B CONTRADICTED The evidence explicitly states something incompatible with the claim.
C NOT_VERIFIABLE The evidence does not say it, or plan/column attribution or conditions cannot be confirmed.
D STALE Supported only by past (dated) evidence.

It is a specialist model. It was trained for SaaS product pricing, plan, limit, and feature claims (mostly Korean claims against English or Korean pricing pages). It judges only the relation between a claim and the evidence you pass in. It does not know whether a fact is true in the world, and it does not search.

This repository contains the merged BF16 weights: the LoRA adapter merged into Qwen/Qwen3.8-27B. It loads like any Qwen3.8 checkpoint, and no adapter setup is needed.

Status

Research preview.

  • Sealed evaluation pending. A new sealed Specialist benchmark (unseen brands, documents and phrasings) will compare FactGuard 4B/8B/9B/27B and their base models; this card will be updated when it is out.
  • Performance on real AI answers is unverified.
  • The 0.993 below is a development-set result. It is not a generalization accuracy.
  • Not validated as a replacement for a 27B judge.

Usage

See example_inference.py and label_contract.json. Use the prompt exactly as specified (raw text, no chat template, add_special_tokens=False, at most 1,024 input tokens), and take the softmax over the four label token logits at the last position.

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tok = AutoTokenizer.from_pretrained("ThakiCloud/FactGuard-27B")
model = AutoModelForCausalLM.from_pretrained("ThakiCloud/FactGuard-27B", dtype=torch.bfloat16, device_map="auto")
# prompt = HEAD + evidence_packet + "\n\n판정:"  (HEAD is in label_contract.json)

AutoModelForCausalLM loads the text model. The checkpoint keeps the base model's full multimodal layout (vision tower, MTP weights, processor files) unchanged. Vision weights were not trained, and no image-verification ability is claimed.

Training

  • Base: Qwen/Qwen3.8-27B, revision 1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0. All 32 files match the Hub LFS/blob hashes.
  • Method: LoRA (r=16, alpha=32, dropout 0.05) on all attention, linear-attention, and MLP projections of the language model (vision excluded). The adapter was merged with W' = W + (B·A)·alpha/r, computed in fp32 and stored as BF16, on the unquantized base weights.
  • Curriculum. The same data, curriculum, and hyperparameters as FactGuard-4B v0.3. Each stage continued from the previous adapter, for 1 epoch at batch 4×4 and max length 1,024.
    1. v0: 18,000 synthetic counterfactual rows on fictional brands, labels set by the generating operation, lr 1e-4.
    2. v0.1: 10,000 rows (7,000 table/card/fragment formats on fictional brands + 3,000 replay), lr 5e-5.
    3. v0.3: 4,530 rows (1,530 deterministic counterfactuals built on official pricing pages of 25 real SaaS brands, using only cells where two extractors agreed + 3,000 replay), lr 5e-5, seed 2.
  • An auxiliary head-free objective predicts the decision evidence id (weight 0.3).
  • Hardware: a single NVIDIA B200 for all stages, with gradient checkpointing (about 2.3 hours of training in total; final stage 283 steps).
  • Data not released. The training data contains no customer data and no human or LLM labels. Sealed evaluation sets were never used in training. The training/eval brand and claim-string overlap with the evaluation sets is 0.

Evaluation

These are development sets, not sealed evaluations. They were used during FactGuard development (the 4B v0.3 seed was selected on them), so they are not a held-out estimate. A sealed family benchmark (unseen brands, documents and phrasings) is pre-registered and pending.

Model V03DEV (4,377) acc · S recall · FS · FC DEV4ALL (513) SLACKV22 (179)
Qwen3.8-27B base, same label-token prompt (no training) 0.371 · 1.000 · 2,752 · 0 0.285 · 1.000 · 367 · 0 0.313 · 1.000 · 123 · 0
FactGuard-27B v0.1 0.993 · 0.992 · 15 · 16 0.983 · 0.993 · 5 · 1 0.961 · 0.893 · 1 · 1
FactGuard-9B v0.1 0.992 · 0.994 · 18 · 13 0.981 · 0.980 · 1 · 4 0.955 · 0.857 · 0 · 1
FactGuard-8B v0.1 0.987 · 0.990 · 26 · 15 0.992 · 0.993 · 0 · 0 0.922 · 0.750 · 0 · 1
FactGuard-4B v0.3 0.993 · 0.996 · 17 · 8 0.990 · 0.986 · 0 · 0 0.933 · 0.804 · 1 · 2

FS = false support. FC = false contradiction. V03DEV and DEV4ALL are counterfactual; SLACKV22 is 179 claims from real answers with labels that were not independently audited.

  • With this label-token prompt the untrained base predicts SUPPORTED for every claim. This baseline reads label-token probabilities; it is not the accuracy of Qwen3.8-27B used as a generative prompted judge, which is a different measurement.
  • On these sets 27B matches 4B on V03DEV and is highest on SLACKV22, but the margin over 4B is 5 items, which is too few to attribute to model size.
  • Single-stream latency (B200, batch 1, model only): p50 182.8 ms, p95 239.0 ms.

Merge check: the merged weights and the original LoRA adapter produce the same decisions on held-out development items (see eval_manifest.json).

Limitations

  • Performance on real, naturally occurring AI answers is not established, and no sealed evaluation exists for this model yet. Do not read development or counterfactual accuracy as real-world accuracy.
  • It makes more false contradictions than FactGuard-4B on V03DEV (16 vs 8), and it is about 2× slower than FactGuard-4B.
  • Single-model decisions can produce false support. Pair the model with an evidence-coverage guard and human review for high-stakes use.
  • The model was trained for pricing, plan, and feature claims only. It is not validated for legal, financial-regulatory, medical, or general-knowledge verification.
  • "Not found in the evidence" means NOT_VERIFIABLE, not "false". Wrong or incomplete evidence can lead to wrong SUPPORTED decisions.

Provenance

  • Adapter sha256: 7f685e53cb9818842e905e7c431579ec4ea278e9e6b7569ff49ea6244bd9f8eb
  • Merged shard sha256: see eval_manifest.json
  • License: Apache-2.0, following the base model.
Downloads last month
27
Safetensors
Model size
28B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ThakiCloud/FactGuard-27B

Base model

Qwen/Qwen3.8-27B
Finetuned
(674)
this model

Collection including ThakiCloud/FactGuard-27B