solon commited on
Commit
ee87962
·
0 Parent(s):

Update model to diffusion-chat-final2 and remove Pre-training references

Browse files
.gitattributes ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
2
+ *.bin filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - ko
4
+ license: apache-2.0
5
+ library_name: transformers
6
+ tags:
7
+ - diffusion
8
+ - text-generation
9
+ - korean
10
+ - deberta
11
+ - masked-language-model
12
+ - experimental
13
+ base_model: kakaobank/kf-deberta-base
14
+ pipeline_tag: fill-mask
15
+ ---
16
+
17
+ # 🌀 kf-deberta-gen
18
+
19
+ **Generative Diffusion BERT** - 한국어 Diffusion 기반 생성 언어 모델
20
+
21
+
22
+ [![GitHub](https://img.shields.io/badge/GitHub-Repository-black)](https://github.com/hong-seongmin/GenerativeDiffusionBERT)
23
+
24
+ ---
25
+
26
+ ## 모델 설명
27
+
28
+ 이 모델은 [kakaobank/kf-deberta-base](https://huggingface.co/kakaobank/kf-deberta-base)를 기반으로 **Discrete Diffusion** 방식으로 chat fine-tuning을 수행한 **실험적(PoC) 생성 모델**입니다.
29
+
30
+ > ⚠️ **주의**: 이 모델은 개념 검증(Proof of Concept) 단계입니다. 생성 품질이 불안정하며, 반복 생성 등의 문제가 있을 수 있습니다.
31
+
32
+ ### 핵심 특징
33
+
34
+ | 항목 | 내용 |
35
+ |------|------|
36
+ | 기반 모델 | kakaobank/kf-deberta-base (DeBERTa-v2) |
37
+ | 학습 방식 | Masked Diffusion Language Model (MDLM) |
38
+ | Noise Schedule | Cosine |
39
+ | 생성 방식 | Iterative Denoising (Confidence-based) |
40
+
41
+ ### 기존 MLM과의 차이점
42
+
43
+ ```
44
+ 기존 MLM: 15% 고정 마스킹 → 빈칸 채우기만 가능
45
+ Diffusion: 0~100% 연속 마스킹 → 전체 시퀀스 생성 가능
46
+ ```
47
+
48
+ ---
49
+
50
+ ## 사용 방법
51
+
52
+ ### 기본 사용
53
+
54
+ ```python
55
+ from transformers import AutoTokenizer, AutoModelForMaskedLM
56
+
57
+ tokenizer = AutoTokenizer.from_pretrained("solonsophy/kf-deberta-gen")
58
+ model = AutoModelForMaskedLM.from_pretrained("solonsophy/kf-deberta-gen")
59
+ ```
60
+
61
+ ### Diffusion 생성 (Iterative Denoising)
62
+
63
+ ```python
64
+ import torch
65
+ import torch.nn.functional as F
66
+
67
+ def generate_diffusion(model, tokenizer, question, num_steps=15, max_answer_len=80):
68
+ model.eval()
69
+ device = next(model.parameters()).device
70
+
71
+ MASK_ID = tokenizer.mask_token_id
72
+ CLS_ID = tokenizer.cls_token_id
73
+ SEP_ID = tokenizer.sep_token_id
74
+
75
+ # 질문 토큰화
76
+ q_tokens = tokenizer.encode(question, add_special_tokens=False)[:100]
77
+
78
+ # 초기: [CLS] Q [SEP] [MASK]*N
79
+ input_ids = [CLS_ID] + q_tokens + [SEP_ID] + [MASK_ID] * max_answer_len
80
+ input_ids = torch.tensor([input_ids[:256]], device=device)
81
+ answer_start = len(q_tokens) + 2
82
+
83
+ # Iterative denoising
84
+ for step in range(num_steps):
85
+ with torch.no_grad():
86
+ logits = model(input_ids).logits
87
+
88
+ mask_pos = (input_ids[0, answer_start:] == MASK_ID).nonzero().squeeze(-1) + answer_start
89
+ if len(mask_pos) == 0:
90
+ break
91
+
92
+ # Confidence 기반 unmask
93
+ mask_logits = logits[0, mask_pos] / 0.8 # temperature
94
+ probs = F.softmax(mask_logits, dim=-1)
95
+ tokens = torch.multinomial(probs, 1).squeeze(-1)
96
+ conf = probs.gather(1, tokens.unsqueeze(-1)).squeeze(-1)
97
+
98
+ k = max(1, len(mask_pos) // (num_steps - step))
99
+ top_idx = conf.topk(k).indices
100
+ input_ids[0, mask_pos[top_idx]] = tokens[top_idx]
101
+
102
+ # 결과 추출
103
+ answer = input_ids[0, answer_start:]
104
+ answer = answer[(answer != MASK_ID) & (answer != tokenizer.pad_token_id)]
105
+ return tokenizer.decode(answer, skip_special_tokens=True)
106
+
107
+ # 사용 예시
108
+ answer = generate_diffusion(model, tokenizer, "인공지능이란 무엇인가요?")
109
+ print(answer)
110
+ ```
111
+
112
+ ---
113
+
114
+ ## 학습 정보
115
+
116
+ ### Chat Fine-tuning 설정
117
+
118
+ | 파라미터 | 값 |
119
+ |----------|-----|
120
+ | Epochs | 3 |
121
+ | Batch Size | 64 |
122
+ | Learning Rate | 5e-5 |
123
+ | Max Length | 256 |
124
+ | Q Max Length | 100 |
125
+ | A Max Length | 153 |
126
+ | Noise Schedule | Cosine |
127
+ | Masking Ratio | 0% ~ 100% |
128
+
129
+ ---
130
+
131
+ ## 학습 데이터
132
+
133
+ | 데이터셋 | 라이선스 |
134
+ |----------|----------|
135
+ | OpenLab-NLP/tiny-singleturn-chat-ko | MIT |
136
+ | davidkim205/kollm-converations | Apache-2.0 |
137
+ | heegyu/hh-rlhf-ko | MIT |
138
+ | nlpai-lab/kullm-v2 | Apache-2.0 |
139
+ | heegyu/OIG-small-chip2-ko | Apache-2.0 |
140
+ | AIdenU/orca_dpo_data_ko | Apache-2.0 |
141
+
142
+ ---
143
+
144
+ ## 라이선스
145
+
146
+ 이 모델은 **Apache-2.0 라이선스**로 배포됩니다.
147
+
148
+ 기반 모델 (kakaobank/kf-deberta-base): MIT
149
+
150
+ ---
151
+
152
+ ## Citation
153
+
154
+ ```bibtex
155
+ @misc{kf-deberta-gen,
156
+ author = {Hong Seongmin},
157
+ title = {Generative Diffusion BERT: Korean Discrete Diffusion Language Model},
158
+ year = {2025},
159
+ publisher = {Hugging Face},
160
+ url = {https://huggingface.co/solonsophy/kf-deberta-gen}
161
+ }
162
+ ```
config.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "DebertaV2ForMaskedLM"
4
+ ],
5
+ "attention_probs_dropout_prob": 0.1,
6
+ "conv_act": "gelu",
7
+ "conv_kernel_size": 0,
8
+ "dtype": "float32",
9
+ "hidden_act": "gelu",
10
+ "hidden_dropout_prob": 0.1,
11
+ "hidden_size": 768,
12
+ "initializer_range": 0.02,
13
+ "intermediate_size": 3072,
14
+ "layer_norm_eps": 1e-07,
15
+ "legacy": true,
16
+ "max_position_embeddings": 512,
17
+ "max_relative_positions": -1,
18
+ "model_type": "deberta-v2",
19
+ "norm_rel_ebd": "layer_norm",
20
+ "num_attention_heads": 12,
21
+ "num_hidden_layers": 12,
22
+ "pad_token_id": 0,
23
+ "pooler_dropout": 0,
24
+ "pooler_hidden_act": "gelu",
25
+ "pooler_hidden_size": 768,
26
+ "pos_att_type": [
27
+ "p2c",
28
+ "c2p"
29
+ ],
30
+ "position_biased_input": false,
31
+ "position_buckets": 256,
32
+ "relative_attention": true,
33
+ "share_att_key": true,
34
+ "transformers_version": "4.57.3",
35
+ "type_vocab_size": 0,
36
+ "vocab_size": 130000
37
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f7c934f89d01f35a8abfebcabf6e475e383900d2ee4bd78af3626216273d0e2c
3
+ size 744076256
special_tokens_map.json ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": {
3
+ "content": "[CLS]",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "cls_token": {
10
+ "content": "[CLS]",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "eos_token": {
17
+ "content": "[SEP]",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ },
23
+ "mask_token": {
24
+ "content": "[MASK]",
25
+ "lstrip": false,
26
+ "normalized": false,
27
+ "rstrip": false,
28
+ "single_word": false
29
+ },
30
+ "pad_token": {
31
+ "content": "[PAD]",
32
+ "lstrip": false,
33
+ "normalized": false,
34
+ "rstrip": false,
35
+ "single_word": false
36
+ },
37
+ "sep_token": {
38
+ "content": "[SEP]",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false
43
+ },
44
+ "unk_token": {
45
+ "content": "[UNK]",
46
+ "lstrip": false,
47
+ "normalized": false,
48
+ "rstrip": false,
49
+ "single_word": false
50
+ }
51
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "0": {
4
+ "content": "[PAD]",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "1": {
12
+ "content": "[UNK]",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "2": {
20
+ "content": "[CLS]",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "3": {
28
+ "content": "[SEP]",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "4": {
36
+ "content": "[MASK]",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ }
43
+ },
44
+ "bos_token": "[CLS]",
45
+ "clean_up_tokenization_spaces": false,
46
+ "cls_token": "[CLS]",
47
+ "do_basic_tokenize": true,
48
+ "do_lower_case": false,
49
+ "eos_token": "[SEP]",
50
+ "extra_special_tokens": {},
51
+ "mask_token": "[MASK]",
52
+ "model_max_length": 512,
53
+ "never_split": null,
54
+ "pad_token": "[PAD]",
55
+ "sep_token": "[SEP]",
56
+ "strip_accents": null,
57
+ "tokenize_chinese_chars": true,
58
+ "tokenizer_class": "BertTokenizer",
59
+ "unk_token": "[UNK]"
60
+ }
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2b0d7e63ab22877a5b10a58befa25f884cedbde588732fe0055f5073b77ed16f
3
+ size 5777
vocab.txt ADDED
The diff for this file is too large to render. See raw diff