Downloads · 30 days
21
2% of all-time downloads
Mxode/Pythia-70m-C-Language-KnowledgeExtract
Pythia-70m-C-Language-KnowledgeExtract is a text generation model from Mxode. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
A model that can extract the knowledge points from the given C language code.
Downloads · 30 days
21
2% of all-time downloads
All-time downloads
1.1K
Public
Repo size
282 MB
Likes
0
Public
Click a slice to open those files.
.bin141 MB · 99%
From the Hugging Face model README
A model that can extract the knowledge points from the given C language code.
The base model is pythia-70m. This model was fine-tuned with 10 epochs using Q-Lora method on my own training set.
A usage example is as follows, first import the model and prepare the code:
from transformers import GPTNeoXForCausalLM, AutoTokenizer
model_name_or_path = 'Mxode/Pythia-70m-C-Language-KnowledgeExtract'
device = 'cuda'
model = GPTNeoXForCausalLM.from_pretrained(model_name_or_path).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
# instruction template
instruction = '[Summarize the knowledge points in the code below]\n'
# any c-lang pieces you like, could be partial functions or statements
input_content = '''```c
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
```'''
text = instruction + input_content
Then generate:
inputs = tokenizer(text, return_tensors="pt").to(device)
tokens = model.generate(
**inputs,
pad_token_id=tokenizer.eos_token_id,
max_new_tokens=32,
)
# deduplicate inputs
response = tokenizer.decode(tokens[0]).split('```')[-1].split('<')[0]
However, in practical use, in order to achieve more diverse representations, it's recommended to do multiple inferences. Don't worry, it's really small so the inferences don't take much time, as follows:
ans_dict = {}
def increment_insert(key):
ans_dict[key] = ans_dict.get(key, 0) + 1
for i in range(30): # maybe 20 times or less enough too
inputs = tokenizer(text, return_tensors="pt").to(device)
tokens = model.generate(
**inputs,
pad_token_id=tokenizer.eos_token_id,
max_new_tokens=32,
do_sample=True,
temperature=2.0, # high temperature for diversity
top_p=0.95,
top_k=30,
)
response = tokenizer.decode(tokens[0]).split('```')[-1].split('<')[0]
increment_insert(response)
print(ans_dict)
### output as below, could take high-freq answers
### {
### 'Backtracking': 1,
### 'Heap': 1,
### 'Quick sort': 25,
### 'Recurrence': 2,
### 'Queue': 1
### }