ko-hallucheck-v1: Korean faithfulness cross-encoder (bge-reranker-v2-m3 ft)
Browse files- .gitattributes +1 -0
- README.md +84 -0
- config.json +39 -0
- model.safetensors +3 -0
- tokenizer.json +3 -0
- tokenizer_config.json +16 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
language:
|
| 3 |
+
- ko
|
| 4 |
+
license: apache-2.0
|
| 5 |
+
base_model: BAAI/bge-reranker-v2-m3
|
| 6 |
+
pipeline_tag: text-classification
|
| 7 |
+
tags:
|
| 8 |
+
- hallucination-detection
|
| 9 |
+
- faithfulness
|
| 10 |
+
- korean
|
| 11 |
+
- cross-encoder
|
| 12 |
+
- rag
|
| 13 |
+
---
|
| 14 |
+
|
| 15 |
+
# ko-hallucheck-v1 โ ํ๊ตญ์ด ํ๊ฐ(์ถฉ์ค์ฑ) ํ๋ณ๊ธฐ
|
| 16 |
+
|
| 17 |
+
**(context, answer) ์์ ์
๋ ฅ๋ฐ์ ๋ต๋ณ์ด ๋ฌธ๋งฅ์ ์ถฉ์คํ์ง(SUPPORTED) ํ๊ฐ์ธ์ง(HALLUCINATED) ํ๋ณํ๋ ํ๊ตญ์ด ์ ์ฉ cross-encoder์
๋๋ค.**
|
| 18 |
+
RAG ํ์ดํ๋ผ์ธ์ ์ถ๋ ฅ ๊ฒ์ดํธ, LLM ๋ฉํ ์ธ์๊ฒ์ฆ, ์์ฑ ์ฝํ
์ธ ํ์ง ๊ฒ์ดํธ ์ฉ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
|
| 19 |
+
|
| 20 |
+
์์ด๊ถ์๋ vectara/hallucination_evaluation_model, MiniCheck, LettuceDetect ๋ฑ ์ฑ์ํ ํ๋ณ๊ธฐ๊ฐ ์์ง๋ง,
|
| 21 |
+
ํ๊ตญ์ด ์ ์ฉ ๊ณต๊ฐ ํ๋ณ๊ธฐ๋ ์์ด ๊ทธ ๊ณต๋ฐฑ์ ์ฑ์ฐ๊ธฐ ์ํด ๋ง๋ค์์ต๋๋ค.
|
| 22 |
+
|
| 23 |
+
- **Base**: BAAI/bge-reranker-v2-m3 (568M, Apache-2.0) โ 2-label seq-classification ํ์ธํ๋
|
| 24 |
+
- **Labels**: `0 = HALLUCINATED`, `1 = SUPPORTED`
|
| 25 |
+
- **Max length**: 512 (context+answer, longest_first truncation)
|
| 26 |
+
|
| 27 |
+
## ์ฑ๋ฅ
|
| 28 |
+
|
| 29 |
+
| ํ๊ฐ์
| acc | AUROC | ํ๊ฐํ์ง recall (intrinsic / extrinsic) |
|
| 30 |
+
|---|---|---|---|
|
| 31 |
+
| in-dist test (์ํค ๊ธฐ๋ฐ ๋ฌธ์ฅํ, n=1002) | 0.938 | 0.980 | 0.83 / 1.00 |
|
| 32 |
+
| spanํ held-out (KorQuAD ์ํค, n=688) | 0.988 | 0.997 | 0.99 / 1.00 |
|
| 33 |
+
| **cross-source OOD (KLUE-MRC ๋ด์ค span, n=1500)** | **0.966** | 0.979 | 0.99 / 0.99 |
|
| 34 |
+
|
| 35 |
+
- OOD๋ ํ์ต์ ์ฐ์ง ์์ ์์ค(๋ด์ค ๋๋ฉ์ธ)์ด๋ฉฐ, ๊ธฐ๋ณธ ์๊ณ๊ฐ 0.5์์ ์ ์ฑ๋ฅ์ด ๋์ต๋๋ค(๋ณ๋ ์บ๋ฆฌ๋ธ๋ ์ด์
๋ถํ์).
|
| 36 |
+
- v1 ๋๋น ํต์ฌ ๊ฐ์ : ๋ฌธ์ฅํ ๋ฐ์ดํฐ๋ง์ผ๋ก ํ์ตํ๋ฉด spanํ ์
๋ ฅ์์ ํ๋ณ์ด ๋ถ๊ดด(ํฌ๋งท shortcut)ํ๋ ๋ฌธ์ ๋ฅผ
|
| 37 |
+
๋คํฌ๋งท(๋ฌธ์ฅํ+spanํ) ํ์ต์ผ๋ก ํด๊ฒฐํ์ต๋๋ค.
|
| 38 |
+
|
| 39 |
+
## ์ ์งํ ํ๊ณ (์ฝ๊ณ ์ฐ์ธ์)
|
| 40 |
+
|
| 41 |
+
1. **negative(ํ๊ฐ) ์ํ์ด LLM ์์ฑ + ๋ฃฐ ๋ณํ(์ซ์/๊ฐ์ฒด ์นํ, ํ๋ฌธ์ ์ด์)์ผ๋ก ๋ง๋ค์ด์ก์ต๋๋ค.**
|
| 42 |
+
OOD ํ๊ฐ์ ํ๊ฐ๋ ๊ฐ์ ๋ฃฐ ํจ๋ฐ๋ฆฌ๋ก ์์ฑ๋์ด, ์คํ๊ฒฝ LLM ํ๊ฐ๊ณผ ๋ถํฌ๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
|
| 43 |
+
์ฌ๋ ๋ผ๋ฒจ ๊ธฐ๋ฐ ๋
๋ฆฝ ๋ฒค์น๋งํฌ(Ko-FaithBench)๋ฅผ ์ค๋น ์ค์ด๋ฉฐ ๊ณต๊ฐ ์ ์ฌ๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
|
| 44 |
+
2. ๋ฏธ๋ฌํ 1๊ธ์ ์์ค ๋ณํ(intrinsic)์ in-dist recall์ 0.83์ผ๋ก, ๊ทนํ ๋ฏธ์ธํ ์๊ณก์ ๋์น ์ ์์ต๋๋ค.
|
| 45 |
+
3. context 512 ํ ํฐ ์ด๊ณผ๋ถ์ ์๋ฆฝ๋๋ค. ๊ธด ๋ฌธ์๋ ์ฒญํฌ ๋จ์๋ก ๋๋ ํ๋ณํ์ธ์.
|
| 46 |
+
4. ์ฌ์ค์ฑ ํ๋ณ์ด ์๋๋ผ **์ฃผ์ด์ง context์ ๋ํ ์ถฉ์ค์ฑ** ํ๋ณ์
๋๋ค. context ์์ฒด๊ฐ ํ๋ฆฌ๋ฉด ์ก์ง ๋ชปํฉ๋๋ค.
|
| 47 |
+
5. ์๋ฃยท๋ฒ๋ฅ ๋ฑ ๊ณ ์ํ ์ฉ๋์๋ ์ฌ๋ ๊ฒํ ์์ด ๋จ๋
์ฌ์ฉํ์ง ๋ง์ธ์.
|
| 48 |
+
|
| 49 |
+
## ์ฌ์ฉ๋ฒ
|
| 50 |
+
|
| 51 |
+
```python
|
| 52 |
+
import torch
|
| 53 |
+
from transformers import AutoTokenizer, AutoModelForSequenceClassification
|
| 54 |
+
|
| 55 |
+
repo = "jismsy/ko-hallucheck-v1"
|
| 56 |
+
tok = AutoTokenizer.from_pretrained(repo)
|
| 57 |
+
model = AutoModelForSequenceClassification.from_pretrained(repo).eval()
|
| 58 |
+
|
| 59 |
+
context = "๋์ฌ์ ์ฒซ ํ์ฌ๋ช
์ ๋กฏ๋ฐ๊ณต์
์ฌ์๋ค. 1978๋
์ฌ๋ช
์ ๋์ฌ์ผ๋ก ๋ณ๊ฒฝํ๋ค."
|
| 60 |
+
answer = "๋์ฌ์ 1965๋
์ผ์์ํ์ผ๋ก ์ฐฝ๋ฆฝ๋์๋ค."
|
| 61 |
+
|
| 62 |
+
enc = tok(context, answer, truncation="longest_first", max_length=512, return_tensors="pt")
|
| 63 |
+
with torch.no_grad():
|
| 64 |
+
prob_supported = torch.softmax(model(**enc).logits, -1)[0, 1].item()
|
| 65 |
+
print(f"SUPPORTED ํ๋ฅ : {prob_supported:.3f}") # 0.5 ๋ฏธ๋ง โ ํ๊ฐ ํ์
|
| 66 |
+
```
|
| 67 |
+
|
| 68 |
+
## ํ์ต ๋ฐ์ดํฐ
|
| 69 |
+
|
| 70 |
+
- ํ๊ตญ์ด ์ํคํผ๋์ ๊ธฐ๋ฐ ๋ฌธ์ฅํ (context, answer) ~18k์: LLM ์์ฑ supported/intrinsic/extrinsic, ์ํ ์๋ ๊ฒ์(๋ผ๋ฒจ ์ ํ๋ ~90%)
|
| 71 |
+
- KorQuAD v1 ๊ธฐ๋ฐ spanํ ~5.3k์: ๋ฃฐ ๊ธฐ๋ฐ ์์ฑ
|
| 72 |
+
- ๋ฌธ์(article) ๊ทธ๋ฃน ๋จ์ train/val/test ๋ถํ ๋ก ๋์ ์ฐจ๋จ
|
| 73 |
+
- ๋ฐ์ดํฐ ์๋ฌธ ๋ผ์ด์ ์ค: Korean Wikipedia(CC BY-SA), KorQuAD v1(CC BY-ND) โ ๋ฐ์ดํฐ์
์์ฒด๋ ์ฌ๋ฐฐํฌํ์ง ์์ต๋๋ค.
|
| 74 |
+
|
| 75 |
+
## Citation
|
| 76 |
+
|
| 77 |
+
```
|
| 78 |
+
@misc{ko-hallucheck-2026,
|
| 79 |
+
title={ko-hallucheck: Korean Faithfulness / Hallucination Detection Cross-Encoder},
|
| 80 |
+
author={ianwoo},
|
| 81 |
+
year={2026},
|
| 82 |
+
url={https://huggingface.co/jismsy/ko-hallucheck-v1}
|
| 83 |
+
}
|
| 84 |
+
```
|
config.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"add_cross_attention": false,
|
| 3 |
+
"architectures": [
|
| 4 |
+
"XLMRobertaForSequenceClassification"
|
| 5 |
+
],
|
| 6 |
+
"attention_probs_dropout_prob": 0.1,
|
| 7 |
+
"bos_token_id": 0,
|
| 8 |
+
"classifier_dropout": null,
|
| 9 |
+
"dtype": "float32",
|
| 10 |
+
"eos_token_id": 2,
|
| 11 |
+
"hidden_act": "gelu",
|
| 12 |
+
"hidden_dropout_prob": 0.1,
|
| 13 |
+
"hidden_size": 1024,
|
| 14 |
+
"initializer_range": 0.02,
|
| 15 |
+
"intermediate_size": 4096,
|
| 16 |
+
"is_decoder": false,
|
| 17 |
+
"layer_norm_eps": 1e-05,
|
| 18 |
+
"max_position_embeddings": 8194,
|
| 19 |
+
"model_type": "xlm-roberta",
|
| 20 |
+
"num_attention_heads": 16,
|
| 21 |
+
"num_hidden_layers": 24,
|
| 22 |
+
"output_past": true,
|
| 23 |
+
"pad_token_id": 1,
|
| 24 |
+
"position_embedding_type": "absolute",
|
| 25 |
+
"problem_type": "single_label_classification",
|
| 26 |
+
"tie_word_embeddings": true,
|
| 27 |
+
"transformers_version": "5.5.0",
|
| 28 |
+
"type_vocab_size": 1,
|
| 29 |
+
"use_cache": false,
|
| 30 |
+
"vocab_size": 250002,
|
| 31 |
+
"id2label": {
|
| 32 |
+
"0": "HALLUCINATED",
|
| 33 |
+
"1": "SUPPORTED"
|
| 34 |
+
},
|
| 35 |
+
"label2id": {
|
| 36 |
+
"HALLUCINATED": 0,
|
| 37 |
+
"SUPPORTED": 1
|
| 38 |
+
}
|
| 39 |
+
}
|
model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3d99aae172f2ac96f8fe96f2b01b1b0dc9ce85d6fe22b69a85e303784cae7f4a
|
| 3 |
+
size 2271075904
|
tokenizer.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8f4ef3f81caf54d51dbbba684cfab52a71ba630b5329b24f2393a074f551539b
|
| 3 |
+
size 17098183
|
tokenizer_config.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"add_prefix_space": true,
|
| 3 |
+
"backend": "tokenizers",
|
| 4 |
+
"bos_token": "<s>",
|
| 5 |
+
"clean_up_tokenization_spaces": true,
|
| 6 |
+
"cls_token": "<s>",
|
| 7 |
+
"eos_token": "</s>",
|
| 8 |
+
"is_local": false,
|
| 9 |
+
"mask_token": "<mask>",
|
| 10 |
+
"model_max_length": 8192,
|
| 11 |
+
"pad_token": "<pad>",
|
| 12 |
+
"sep_token": "</s>",
|
| 13 |
+
"sp_model_kwargs": {},
|
| 14 |
+
"tokenizer_class": "XLMRobertaTokenizer",
|
| 15 |
+
"unk_token": "<unk>"
|
| 16 |
+
}
|