|
|
--- |
|
|
language: |
|
|
- ko |
|
|
license: apache-2.0 |
|
|
library_name: transformers |
|
|
tags: |
|
|
- diffusion |
|
|
- text-generation |
|
|
- korean |
|
|
- deberta |
|
|
- masked-language-model |
|
|
- experimental |
|
|
base_model: kakaobank/kf-deberta-base |
|
|
pipeline_tag: fill-mask |
|
|
--- |
|
|
|
|
|
# 🌀 kf-deberta-gen |
|
|
|
|
|
**Generative Diffusion BERT** - 한국어 Diffusion 기반 생성 언어 모델 |
|
|
|
|
|
|
|
|
[](https://github.com/hong-seongmin/GenerativeDiffusionBERT) |
|
|
[](https://huggingface.co/spaces/solonsophy/kf-deberta-gen) |
|
|
|
|
|
--- |
|
|
|
|
|
## 모델 설명 |
|
|
|
|
|
이 모델은 [kakaobank/kf-deberta-base](https://huggingface.co/kakaobank/kf-deberta-base)를 기반으로 **Discrete Diffusion** 방식으로 chat fine-tuning을 수행한 **실험적(PoC) 생성 모델**입니다. |
|
|
|
|
|
> ⚠️ **주의**: 이 모델은 개념 검증(Proof of Concept) 단계입니다. 생성 품질이 불안정하며, 반복 생성 등의 문제가 있을 수 있습니다. |
|
|
|
|
|
### 핵심 특징 |
|
|
|
|
|
| 항목 | 내용 | |
|
|
|------|------| |
|
|
| 기반 모델 | kakaobank/kf-deberta-base (DeBERTa-v2) | |
|
|
| 학습 방식 | Masked Diffusion Language Model (MDLM) | |
|
|
| Noise Schedule | Cosine | |
|
|
| 생성 방식 | Iterative Denoising (Confidence-based) | |
|
|
|
|
|
### 기존 MLM과의 차이점 |
|
|
|
|
|
``` |
|
|
기존 MLM: 15% 고정 마스킹 → 빈칸 채우기만 가능 |
|
|
Diffusion: 0~100% 연속 마스킹 → 전체 시퀀스 생성 가능 |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## 사용 방법 |
|
|
|
|
|
### 기본 사용 |
|
|
|
|
|
```python |
|
|
from transformers import AutoTokenizer, AutoModelForMaskedLM |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained("solonsophy/kf-deberta-gen") |
|
|
model = AutoModelForMaskedLM.from_pretrained("solonsophy/kf-deberta-gen") |
|
|
``` |
|
|
|
|
|
### Diffusion 생성 (Iterative Denoising) |
|
|
|
|
|
```python |
|
|
import torch |
|
|
import torch.nn.functional as F |
|
|
|
|
|
def generate_diffusion(model, tokenizer, question, num_steps=15, max_answer_len=80): |
|
|
model.eval() |
|
|
device = next(model.parameters()).device |
|
|
|
|
|
MASK_ID = tokenizer.mask_token_id |
|
|
CLS_ID = tokenizer.cls_token_id |
|
|
SEP_ID = tokenizer.sep_token_id |
|
|
|
|
|
# 질문 토큰화 |
|
|
q_tokens = tokenizer.encode(question, add_special_tokens=False)[:100] |
|
|
|
|
|
# 초기: [CLS] Q [SEP] [MASK]*N |
|
|
input_ids = [CLS_ID] + q_tokens + [SEP_ID] + [MASK_ID] * max_answer_len |
|
|
input_ids = torch.tensor([input_ids[:256]], device=device) |
|
|
answer_start = len(q_tokens) + 2 |
|
|
|
|
|
# Iterative denoising |
|
|
for step in range(num_steps): |
|
|
with torch.no_grad(): |
|
|
logits = model(input_ids).logits |
|
|
|
|
|
mask_pos = (input_ids[0, answer_start:] == MASK_ID).nonzero().squeeze(-1) + answer_start |
|
|
if len(mask_pos) == 0: |
|
|
break |
|
|
|
|
|
# Confidence 기반 unmask |
|
|
mask_logits = logits[0, mask_pos] / 0.8 # temperature |
|
|
probs = F.softmax(mask_logits, dim=-1) |
|
|
tokens = torch.multinomial(probs, 1).squeeze(-1) |
|
|
conf = probs.gather(1, tokens.unsqueeze(-1)).squeeze(-1) |
|
|
|
|
|
k = max(1, len(mask_pos) // (num_steps - step)) |
|
|
top_idx = conf.topk(k).indices |
|
|
input_ids[0, mask_pos[top_idx]] = tokens[top_idx] |
|
|
|
|
|
# 결과 추출 |
|
|
answer = input_ids[0, answer_start:] |
|
|
answer = answer[(answer != MASK_ID) & (answer != tokenizer.pad_token_id)] |
|
|
return tokenizer.decode(answer, skip_special_tokens=True) |
|
|
|
|
|
# 사용 예시 |
|
|
answer = generate_diffusion(model, tokenizer, "인공지능이란 무엇인가요?") |
|
|
print(answer) |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## 학습 정보 |
|
|
|
|
|
### Chat Fine-tuning 설정 |
|
|
|
|
|
| 파라미터 | 값 | |
|
|
|----------|-----| |
|
|
| Epochs | 3 | |
|
|
| Batch Size | 64 | |
|
|
| Learning Rate | 5e-5 | |
|
|
| Max Length | 256 | |
|
|
| Q Max Length | 100 | |
|
|
| A Max Length | 153 | |
|
|
| Noise Schedule | Cosine | |
|
|
| Masking Ratio | 0% ~ 100% | |
|
|
|
|
|
--- |
|
|
|
|
|
## 학습 데이터 |
|
|
|
|
|
| 데이터셋 | 라이선스 | |
|
|
|----------|----------| |
|
|
| OpenLab-NLP/tiny-singleturn-chat-ko | MIT | |
|
|
| davidkim205/kollm-converations | Apache-2.0 | |
|
|
| heegyu/hh-rlhf-ko | MIT | |
|
|
| nlpai-lab/kullm-v2 | Apache-2.0 | |
|
|
| heegyu/OIG-small-chip2-ko | Apache-2.0 | |
|
|
| AIdenU/orca_dpo_data_ko | Apache-2.0 | |
|
|
|
|
|
--- |
|
|
|
|
|
## 라이선스 |
|
|
|
|
|
이 모델은 **Apache-2.0 라이선스**로 배포됩니다. |
|
|
|
|
|
기반 모델 (kakaobank/kf-deberta-base): MIT |
|
|
|
|
|
--- |
|
|
|
|
|
## Citation |
|
|
|
|
|
```bibtex |
|
|
@misc{kf-deberta-gen, |
|
|
author = {Hong Seongmin}, |
|
|
title = {Generative Diffusion BERT: Korean Discrete Diffusion Language Model}, |
|
|
year = {2025}, |
|
|
publisher = {Hugging Face}, |
|
|
url = {https://huggingface.co/solonsophy/kf-deberta-gen} |
|
|
} |
|
|
``` |
|
|
|