kimsan0622 commited on
Commit
ad00165
1 Parent(s): 151ef5e

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +271 -172
README.md CHANGED
@@ -1,199 +1,298 @@
1
  ---
2
- library_name: transformers
3
- tags: []
 
 
 
 
 
 
 
 
4
  ---
5
 
6
- # Model Card for Model ID
 
7
 
8
- <!-- Provide a quick summary of what the model is/does. -->
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
 
12
- ## Model Details
13
 
14
- ### Model Description
 
 
 
 
15
 
16
- <!-- Provide a longer summary of what this model is. -->
17
 
18
- This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated.
19
 
20
- - **Developed by:** [More Information Needed]
21
- - **Funded by [optional]:** [More Information Needed]
22
- - **Shared by [optional]:** [More Information Needed]
23
- - **Model type:** [More Information Needed]
24
- - **Language(s) (NLP):** [More Information Needed]
25
- - **License:** [More Information Needed]
26
- - **Finetuned from model [optional]:** [More Information Needed]
27
 
28
- ### Model Sources [optional]
 
 
 
 
 
 
 
29
 
30
- <!-- Provide the basic links for the model. -->
31
 
32
- - **Repository:** [More Information Needed]
33
- - **Paper [optional]:** [More Information Needed]
34
- - **Demo [optional]:** [More Information Needed]
35
 
36
- ## Uses
 
 
 
 
 
 
 
 
 
 
37
 
38
- <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
39
 
40
- ### Direct Use
41
 
42
- <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
43
 
44
- [More Information Needed]
45
 
46
- ### Downstream Use [optional]
47
 
48
- <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
 
 
 
 
 
 
 
49
 
50
- [More Information Needed]
51
 
52
- ### Out-of-Scope Use
53
 
54
- <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
55
 
56
- [More Information Needed]
 
 
 
 
 
 
 
 
 
 
57
 
58
- ## Bias, Risks, and Limitations
59
 
60
- <!-- This section is meant to convey both technical and sociotechnical limitations. -->
61
-
62
- [More Information Needed]
63
-
64
- ### Recommendations
65
-
66
- <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
67
-
68
- Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
69
-
70
- ## How to Get Started with the Model
71
-
72
- Use the code below to get started with the model.
73
-
74
- [More Information Needed]
75
-
76
- ## Training Details
77
-
78
- ### Training Data
79
-
80
- <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
81
-
82
- [More Information Needed]
83
-
84
- ### Training Procedure
85
-
86
- <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
87
-
88
- #### Preprocessing [optional]
89
-
90
- [More Information Needed]
91
-
92
-
93
- #### Training Hyperparameters
94
-
95
- - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
96
-
97
- #### Speeds, Sizes, Times [optional]
98
-
99
- <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
100
-
101
- [More Information Needed]
102
-
103
- ## Evaluation
104
-
105
- <!-- This section describes the evaluation protocols and provides the results. -->
106
-
107
- ### Testing Data, Factors & Metrics
108
-
109
- #### Testing Data
110
-
111
- <!-- This should link to a Dataset Card if possible. -->
112
-
113
- [More Information Needed]
114
-
115
- #### Factors
116
-
117
- <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
118
-
119
- [More Information Needed]
120
-
121
- #### Metrics
122
-
123
- <!-- These are the evaluation metrics being used, ideally with a description of why. -->
124
-
125
- [More Information Needed]
126
-
127
- ### Results
128
-
129
- [More Information Needed]
130
-
131
- #### Summary
132
-
133
-
134
-
135
- ## Model Examination [optional]
136
-
137
- <!-- Relevant interpretability work for the model goes here -->
138
-
139
- [More Information Needed]
140
-
141
- ## Environmental Impact
142
-
143
- <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
144
-
145
- Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
146
-
147
- - **Hardware Type:** [More Information Needed]
148
- - **Hours used:** [More Information Needed]
149
- - **Cloud Provider:** [More Information Needed]
150
- - **Compute Region:** [More Information Needed]
151
- - **Carbon Emitted:** [More Information Needed]
152
-
153
- ## Technical Specifications [optional]
154
-
155
- ### Model Architecture and Objective
156
-
157
- [More Information Needed]
158
-
159
- ### Compute Infrastructure
160
-
161
- [More Information Needed]
162
-
163
- #### Hardware
164
-
165
- [More Information Needed]
166
-
167
- #### Software
168
-
169
- [More Information Needed]
170
-
171
- ## Citation [optional]
172
-
173
- <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
174
-
175
- **BibTeX:**
176
-
177
- [More Information Needed]
178
-
179
- **APA:**
180
-
181
- [More Information Needed]
182
-
183
- ## Glossary [optional]
184
-
185
- <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
186
-
187
- [More Information Needed]
188
-
189
- ## More Information [optional]
190
-
191
- [More Information Needed]
192
-
193
- ## Model Card Authors [optional]
194
-
195
- [More Information Needed]
196
-
197
- ## Model Card Contact
198
-
199
- [More Information Needed]
 
1
  ---
2
+ base_model: meta-llama/Llama-3.2-1B
3
+ library_name: peft
4
+ license: llama3.2
5
+ metrics:
6
+ - accuracy
7
+ tags:
8
+ - generated_from_trainer
9
+ model-index:
10
+ - name: code-knowledge-eval
11
+ results: []
12
  ---
13
 
14
+ <!-- This model card has been generated automatically according to the information the Trainer had access to. You
15
+ should probably proofread and complete it, then remove this comment. -->
16
 
17
+ # Llama-3.2-1B-Code-Knowledge-Value-Eval-lora
18
 
19
+ This model is a fine-tuned version of [meta-llama/Llama-3.2-1B](https://huggingface.co/meta-llama/Llama-3.2-1B) on the [kimsan0622/code-knowledge-eval](https://huggingface.co/datasets/kimsan0622/code-knowledge-eval) dataset.
20
+ It achieves the following results on the evaluation set:
21
+ - Loss: 0.9410
22
+ - Accuracy: 0.5820
23
+
24
+ ## **Model Description**
25
+ The model trained on the **Code Knowledge Value Evaluation Dataset** is designed to assess the educational and knowledge value of code snippets. It leverages patterns and contextual information from a large collection of open-source code, sourced from the `bigcode/the-stack` repository. By analyzing these code samples, the model can evaluate their utility in teaching coding concepts, solving problems, and improving developer education.
26
+
27
+ The model focuses on understanding the structure, syntax, and logic of various programming languages, enabling it to provide insights into the learning potential and technical depth of different code samples. The dataset used for training consists of 22,786 samples for training, 4,555 for validation, and 18,232 for testing, ensuring that the model is both robust and well-generalized across different coding contexts.
28
+
29
+ ## **Intended Uses & Limitations**
30
+ ### **Intended Uses**:
31
+ 1. **Automated Code Review**: The model can be applied in automated systems to assess the knowledge value of code during code review processes. It can help identify areas where code could be optimized for better readability, maintainability, and educational impact.
32
+ 2. **Educational Feedback**: For instructors and educational platforms, the model can offer feedback on the effectiveness of code samples used in teaching, helping to improve curriculum materials and select code that best conveys core programming concepts.
33
+ 3. **Curriculum Development**: The model can aid in designing coding courses or instructional materials by suggesting code examples that have higher educational value, supporting a more effective learning experience.
34
+ 4. **Technical Skill Assessment**: Organizations or platforms can use the model to assess the complexity and educational value of code submissions in coding challenges or exams.
35
+
36
+ ### **Limitations**:
37
+ 1. **Narrow Scope in Knowledge Evaluation**: The model is specialized in evaluating code from an educational standpoint, focusing primarily on learning potential rather than production-level code quality (e.g., performance optimization or security).
38
+ 2. **Language and Domain Limitations**: Since the dataset is sourced from `bigcode/the-stack`, it may not cover all programming languages or specialized domains. The model may perform less effectively in underrepresented languages or niche coding styles not well-represented in the dataset.
39
+ 3. **Not Suitable for All Educational Levels**: While the model is designed to evaluate code for educational purposes, its outputs may be better suited for certain levels (e.g., beginner or intermediate coding), and its recommendations might not fully cater to advanced or highly specialized learners.
40
+
41
+
42
+
43
+ ## How to use this model?
44
+
45
+ ```python
46
+ import torch
47
+ import numpy as np
48
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
49
+ from peft import PeftModel, PeftConfig
50
+
51
+ # Define the model name or path for loading the tokenizer and model using LoRA fine-tuning
52
+ model_name_or_path = "kimsan0622/Llama-3.2-1B-Code-Knowledge-Value-Eval-lora"
53
+
54
+ # Load the PEFT (Parameter-Efficient Fine-Tuning) configuration from the pretrained model
55
+ config = PeftConfig.from_pretrained(model_name_or_path)
56
+
57
+ # Load the base model for sequence classification, setting up for 6 possible labels
58
+ inference_model = AutoModelForSequenceClassification.from_pretrained(
59
+ config.base_model_name_or_path, # Base model path
60
+ device_map="cuda:0", # Use the first CUDA device for inference
61
+ label2id={str(k): k for k in range(6)}, # Map label names (0-5) to IDs
62
+ id2label={k: str(k) for k in range(6)}, # Map label IDs to names (0-5)
63
+ num_labels=6, # Define the number of labels for classification (0 to 5)
64
+ )
65
+
66
+ # Load the tokenizer for the base model
67
+ tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)
68
+
69
+ # Set the padding token if it is not already defined, matching it with the EOS token
70
+ if not tokenizer.pad_token_id:
71
+ tokenizer.pad_token_id = tokenizer.eos_token_id
72
+ inference_model.config.pad_token_id = inference_model.config.eos_token_id
73
+
74
+ # Load the PEFT model using the pre-trained LoRA model and the base model
75
+ model = PeftModel.from_pretrained(inference_model, model_name_or_path)
76
+
77
+ # Sample code input to evaluate
78
+ code = [
79
+ """
80
+ import torch
81
+ import numpy as np
82
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
83
+ from peft import PeftModel, PeftConfig
84
+
85
+ # Define the model name or path for loading the tokenizer and model using LoRA fine-tuning
86
+ model_name_or_path = "kimsan0622/Llama-3.2-1B-Code-Knowledge-Value-Eval-lora"
87
+
88
+ # Load the PEFT (Parameter-Efficient Fine-Tuning) configuration from the pretrained model
89
+ config = PeftConfig.from_pretrained(model_name_or_path)
90
+
91
+ # Load the base model for sequence classification, setting up for 6 possible labels
92
+ inference_model = AutoModelForSequenceClassification.from_pretrained(
93
+ config.base_model_name_or_path, # Base model path
94
+ device_map="cuda:0", # Use the first CUDA device for inference
95
+ label2id={str(k): k for k in range(6)}, # Map label names (0-5) to IDs
96
+ id2label={k: str(k) for k in range(6)}, # Map label IDs to names (0-5)
97
+ num_labels=6, # Define the number of labels for classification (0 to 5)
98
+ )
99
+
100
+ # Load the tokenizer for the base model
101
+ tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)
102
+
103
+ # Set the padding token if it is not already defined, matching it with the EOS token
104
+ if not tokenizer.pad_token_id:
105
+ tokenizer.pad_token_id = tokenizer.eos_token_id
106
+ inference_model.config.pad_token_id = inference_model.config.eos_token_id
107
+
108
+ # Load the PEFT model using the pre-trained LoRA model and the base model
109
+ model = PeftModel.from_pretrained(inference_model, model_name_or_path)
110
+
111
+ # Sample code input to evaluate
112
+ code = ["code"]
113
+
114
+ # Tokenize the input code, setting the maximum length and ensuring proper padding and truncation
115
+ batch = tokenizer(code, max_length=1024, padding=True, truncation=True, return_tensors="pt")
116
+
117
+ # Perform inference without computing gradients for faster processing
118
+ with torch.no_grad():
119
+ # Pass the input IDs and attention mask to the model for prediction
120
+ res = model(
121
+ input_ids=batch["input_ids"].to("cuda:0"),
122
+ attention_mask=batch["attention_mask"].to("cuda:0"),
123
+ )
124
+
125
+ # Move the logits to the CPU and convert them to a numpy array
126
+ preds = res.logits.cpu().numpy()
127
+
128
+ # Get the predicted label by taking the argmax of the logits
129
+ preds = np.argmax(preds, axis=1).tolist()
130
+
131
+ # Print the predicted labels
132
+ print(preds)
133
+ """
134
+ ]
135
+
136
+ # Tokenize the input code, setting the maximum length and ensuring proper padding and truncation
137
+ batch = tokenizer(code, max_length=1024, padding=True, truncation=True, return_tensors="pt")
138
+
139
+ # Perform inference without computing gradients for faster processing
140
+ with torch.no_grad():
141
+ # Pass the input IDs and attention mask to the model for prediction
142
+ res = model(
143
+ input_ids=batch["input_ids"].to("cuda:0"),
144
+ attention_mask=batch["attention_mask"].to("cuda:0"),
145
+ )
146
+
147
+ # Move the logits to the CPU and convert them to a numpy array
148
+ preds = res.logits.cpu().numpy()
149
+
150
+ # Get the predicted label by taking the argmax of the logits
151
+ preds = np.argmax(preds, axis=1).tolist()
152
+
153
+ # Print the predicted labels
154
+ print(preds)
155
+
156
+ ```
157
+
158
+ ### 8 Bit quantization
159
+
160
+ ```python
161
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification, BitsAndBytesConfig
162
+ from peft import PeftModel, PeftConfig
163
+
164
+ # Define the model name or path for loading the LoRA fine-tuned model
165
+ model_name_or_path = "kimsan0622/Llama-3.2-1B-Code-Knowledge-Value-Eval-lora"
166
+
167
+ # Configure the model to load in 8-bit precision to optimize memory usage and speed
168
+ bnb_config = BitsAndBytesConfig(load_in_8bit=True)
169
+
170
+ # Load the PEFT (Parameter-Efficient Fine-Tuning) configuration from the pre-trained model
171
+ config = PeftConfig.from_pretrained(model_path)
172
+
173
+ # Load the base model for sequence classification with 8-bit quantization and a device map to the first CUDA device
174
+ inference_model = AutoModelForSequenceClassification.from_pretrained(
175
+ config.base_model_name_or_path, # Base model path from PEFT config
176
+ quantization_config=bnb_config, # Apply 8-bit quantization for memory efficiency
177
+ device_map="cuda:0", # Map the model to the first CUDA device
178
+ label2id={str(k): k for k in range(6)}, # Map label names (0-5) to label IDs
179
+ id2label={k: str(k) for k in range(6)}, # Map label IDs to label names (0-5)
180
+ num_labels=6, # Specify the number of labels for classification
181
+ )
182
+
183
+ # Load the tokenizer associated with the base model
184
+ tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path)
185
+
186
+ # Set the padding token if it's not defined, using the EOS token as the fallback
187
+ if not tokenizer.pad_token_id:
188
+ tokenizer.pad_token_id = tokenizer.eos_token_id
189
+ inference_model.config.pad_token_id = inference_model.config.eos_token_id
190
+
191
+ # Load the PEFT model by applying LoRA (Low-Rank Adaptation) on top of the base model
192
+ model = PeftModel.from_pretrained(inference_model, model_path)
193
+ ```
194
+
195
+
196
+ ## Training and evaluation data
197
+
198
+ [kimsan0622/code-knowledge-eval](https://huggingface.co/datasets/kimsan0622/code-knowledge-eval)
199
+
200
+ ## Training procedure
201
+
202
+ ### Training hyperparameters
203
+
204
+ The following hyperparameters were used during training:
205
+ - learning_rate: 0.0001
206
+ - train_batch_size: 2
207
+ - eval_batch_size: 8
208
+ - seed: 42
209
+ - distributed_type: multi-GPU
210
+ - num_devices: 8
211
+ - gradient_accumulation_steps: 8
212
+ - total_train_batch_size: 128
213
+ - total_eval_batch_size: 64
214
+ - optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
215
+ - lr_scheduler_type: linear
216
+ - num_epochs: 5.0
217
+
218
+ ### Training results
219
+
220
+ | Training Loss | Epoch | Step | Validation Loss | Accuracy |
221
+ |:-------------:|:------:|:----:|:---------------:|:--------:|
222
+ | 1.0141 | 0.9993 | 178 | 1.0181 | 0.5374 |
223
+ | 0.9435 | 1.9986 | 356 | 0.9410 | 0.5820 |
224
+ | 0.8826 | 2.9979 | 534 | 0.9428 | 0.5978 |
225
+ | 0.7727 | 3.9972 | 712 | 0.9441 | 0.6013 |
226
+ | 0.7075 | 4.9965 | 890 | 0.9526 | 0.6020 |
227
 
228
 
229
+ ### Framework versions
230
 
231
+ - PEFT 0.11.1
232
+ - Transformers 4.44.2
233
+ - Pytorch 2.3.0
234
+ - Datasets 2.20.0
235
+ - Tokenizers 0.19.1
236
 
 
237
 
238
+ ## Test set results
239
 
240
+ ### Confusion matrix
 
 
 
 
 
 
241
 
242
+ | y_true |**pred_0**|**pred_1**|**pred_2**|**pred_3**|**pred_4**|**pred_5**|
243
+ |-------|-------|-------|-------|-------|-------|-------|
244
+ | 0 | 1104 | 151 | 84 | 35 | 2 | 1 |
245
+ | 1 | 401 | 303 | 280 | 256 | 3 | 1 |
246
+ | 2 | 151 | 213 | 366 | 982 | 49 | 13 |
247
+ | 3 | 63 | 93 | 265 | 3301 | 1115 | 88 |
248
+ | 4 | 14 | 6 | 26 | 1551 | 3482 | 1245 |
249
+ | 5 | 2 | 0 | 1 | 54 | 615 | 1916 |
250
 
 
251
 
252
+ ### Classification reports
 
 
253
 
254
+ | y_true | **precision** | **recall** | **f1-score** | **support** |
255
+ |:-------------:|:-------------:|:----------:|:------------:|:-----------:|
256
+ | 0 | 0.64 | 0.80 | 0.71 | 1377 |
257
+ | 1 | 0.40 | 0.24 | 0.30 | 1244 |
258
+ | 2 | 0.36 | 0.21 | 0.26 | 1774 |
259
+ | 3 | 0.53 | 0.67 | 0.59 | 4925 |
260
+ | 4 | 0.66 | 0.55 | 0.60 | 6324 |
261
+ | 5 | 0.58 | 0.74 | 0.65 | 2588 |
262
+ | **accuracy** | | | 0.57 | 18232 |
263
+ | **macro avg**| 0.53 | 0.53 | 0.52 | 18232 |
264
+ | **weighted avg** | 0.57 | 0.57 | 0.56 | 18232 |
265
 
 
266
 
 
267
 
268
+ ## 8 bit quantization
269
 
270
+ ### Confusion matrix
271
 
 
272
 
273
+ | y_true |**pred_0**|**pred_1**|**pred_2**|**pred_3**|**pred_4**|**pred_5**|
274
+ |-------|-------|-------|-------|-------|-------|-------|
275
+ | 0 | 1126 | 124 | 96 | 28 | 2 | 1 |
276
+ | 1 | 415 | 282 | 311 | 232 | 4 | 0 |
277
+ | 2 | 163 | 211 | 416 | 934 | 36 | 14 |
278
+ | 3 | 70 | 84 | 322 | 3331 | 1035 | 83 |
279
+ | 4 | 14 | 5 | 33 | 1630 | 3417 | 1225 |
280
+ | 5 | 2 | 0 | 1 | 62 | 623 | 1900 |
281
 
 
282
 
 
283
 
284
+ ### Classification reports
285
 
286
+ | y_true | **precision** | **recall** | **f1-score** | **support** |
287
+ |:-------------:|:-------------:|:----------:|:------------:|:-----------:|
288
+ | 0 | 0.63 | 0.82 | 0.71 | 1377 |
289
+ | 1 | 0.40 | 0.23 | 0.29 | 1244 |
290
+ | 2 | 0.35 | 0.23 | 0.28 | 1774 |
291
+ | 3 | 0.54 | 0.68 | 0.60 | 4925 |
292
+ | 4 | 0.67 | 0.54 | 0.60 | 6324 |
293
+ | 5 | 0.59 | 0.73 | 0.65 | 2588 |
294
+ | **accuracy** | | | 0.57 | 18232 |
295
+ | **macro avg**| 0.53 | 0.54 | 0.52 | 18232 |
296
+ | **weighted avg** | 0.57 | 0.57 | 0.56 | 18232 |
297
 
 
298