Views
No views yet
FrancescoPeriti/LlamaDictionary-it_ML38BI is a fine-tuned version of the meta-llama/Meta-Llama-3-8B-Instruct.
Thus, to use it, visit the AI at Meta website, accept the Meta License, and submit the form.[HF-TOKEN], in the following).1import torch
2import argparse
3from peft import PeftModel
4from transformers import pipeline
5from datasets import load_dataset
6from huggingface_hub import login
7from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
8from datasets import Dataset
9
10
11def load_model(args):
12 login(args.hugginface_token)
13 settings = dict(pretrained_model_name_or_path=args.pretrained_model_name_or_path,
14 device_map='auto')
15
16 model = AutoModelForCausalLM.from_pretrained(**settings)
17 model.eval()
18
19 peft_model = PeftModel.from_pretrained(model, args.peft_model_name_or_path)
20 peft_model.eval()
21
22 return peft_model.merge_and_unload()
23
24def load_tokenizer(args):
25 login(args.hugginface_token)
26
27 tokenizer = AutoTokenizer.from_pretrained(args.pretrained_model_name_or_path,
28 padding_side="left",
29 add_eos_token=True,
30 add_bos_token=True)
31 tokenizer.pad_token = tokenizer.eos_token
32
33 return tokenizer
34
35
36def formatting_func_factory(tokenizer, args):
37 system_message = dict()
38 system_message['nl'] = "Je bent een lexicograaf die vertrouwd is met het geven van beknopte definities van woordbetekenissen."
39 system_message['it'] = "Sei un lessicografo esperto nel fornire definizioni concise dei significati delle parole."
40 system_message['sv'] = "Du är en lexikograf som är van vid att ge kortfattade definitioner av ordens betydelser."
41 system_message['no'] = "Du er en leksikograf som er kjent med å gi presise definisjoner av ords betydning."
42 system_message['es'] = "Eres un lexicógrafo familiarizado con proporcionar definiciones concisas de los significados de las palabras."
43 system_message['ja'] = "あなたは、単語の意味の簡潔な定義を提供することに熟練した辞書編纂者です。"
44 system_message['de'] = "Du bist ein Lexikograf, der mit der Bereitstellung prägnanter Definitionen von Wortbedeutungen vertraut ist."
45 system_message['pt'] = "Você é um lexicógrafo familiarizado com a fornecimento de definições concisas dos significados das palavras."
46 system_message['en'] = "You are a lexicographer familiar with providing concise definitions of word meanings."
47 system_message['tr'] = "Sen, kelime anlamlarının özlü tanımlarını sağlamaya aşina bir sözlük yazarsısın."
48 system_message['mg'] = "Ianao dia lexicographer mahazatra amin'ny fanomezana fanazavana fohy momba ny dikan'ny teny."
49 system_message['da'] = "Du er en leksikograf, der er vant til at give præcise definitioner af ords betydninger."
50 system_message['ca'] = "Ets un lexicògraf familiaritzat amb la creació de definicions concises dels significats de les paraules."
51 system_message['fr'] = "Vous êtes un lexicographe habitué à fournir des définitions concises des significations des mots."
52 system_message['lt'] = "Jūs esate leksikografas, kuris gerai susipažinęs su trumpų žodžių reikšmių apibrėžimų pateikimu."
53 system_message['la'] = "Es lexicographus peritus, qui breves definitiones significatuum verborum praebet."
54 system_message['id'] = "Anda adalah seorang leksikograf yang terbiasa memberikan definisi singkat dari makna kata-kata."
55 system_message['pl'] = "Jesteś leksykografem, który zna się na podawaniu zwięzłych definicji znaczeń słów."
56 system_message['ku'] = "Hûn lexicographer in ku bi dayîna şîroveyên kurt ên maneya peyvên nasnamekî ne."
57 system_message['el'] = "Είστε ένας λεξικογράφος εξοικειωμένος με την παροχή συνοπτικών ορισμών των εννοιών των λέξεων."
58 system_message['zh'] = "你是一位熟悉提供简明单词含义定义的词典编纂者。"
59 system_message['fi'] = "Olet sanakirjantekijä, joka tuntee sanan merkitysten ytimekkäiden määritelmien antamisen."
60 system_message['ru'] = "Вы — лексикограф, знакомый с составлением кратких определений значений слов."
61
62 user_message = dict()
63 user_message['nl'] = 'Geef alstublieft een beknopte definitie van de betekenis van het woord "{}" in de volgende zin: {}'
64 user_message['it'] = 'Si prega di fornire una definizione concisa per il significato della parola "{}" nella seguente frase: {}'
65 user_message['sv'] = 'Vänligen ge en kortfattad definition av betydelsen av ordet "{}" i följande mening: {}'
66 user_message['es'] = 'Por favor, proporcione una definición concisa para el significado de la palabra "{}" en la siguiente oración: {}'
67 user_message['no'] = 'Vennligst gi en kortfattet definisjon av betydningen av ordet "{}" i den følgende setningen: {}'
68 user_message['ja'] = '次の文での「{}」という単語の意味に対する簡潔な定義を提供してください: {}'
69 user_message['de'] = 'Bitte geben Sie eine prägnante Definition für die Bedeutung des Wortes "{}" im folgenden Satz an: {}'
70 user_message['pt'] = 'Por favor, forneça uma definição concisa para o significado da palavra "{}" na seguinte frase: {}'
71 user_message['en'] = 'Please provide a concise definition for the meaning of the word "{}" in the following sentence: {}'
72 user_message['tr'] = 'Lütfen aşağıdaki cümledeki "{}" kelimesinin anlamı için özlü bir tanım sağlayın: {}'
73 user_message['mg'] = 'Azafady, omeo fanazavana fohy momba ny dikan\'ny teny "{}" ao amin\'ity fehezanteny manaraka ity: {}'
74 user_message['da'] = 'Venligst giv en kortfattet definition af betydningen af ordet "{}" i den følgende sætning: {}'
75 user_message['ca'] = 'Si us plau, proporcioneu una definició concisa del significat de la paraula "{}" en la següent frase: {}'
76 user_message['fr'] = 'Veuillez fournir une définition concise du sens du mot "{}" dans la phrase suivante : {}'
77 user_message['lt'] = 'Prašome pateikti trumpą žodžio "{}" reikšmės apibrėžimą šioje sakinyje: {}'
78 user_message['la'] = 'Quaeso, praebe brevem definitionem significatuum verbi "{}" in sequenti sententia: {}'
79 user_message['id'] = 'Tolong berikan definisi singkat untuk makna kata "{}" dalam kalimat berikut: {}'
80 user_message['pl'] = 'Proszę podać zwięzłą definicję znaczenia słowa "{}" w następującym zdaniu: {}'
81 user_message['ku'] = 'Ji kerema xwe, daxuyaniya kurt ji bo maneya peyva "{}" di gotarê jêrîn de pêşkêş bikin: {}'
82 user_message['el'] = 'Παρακαλώ παρέχετε έναν συνοπτικό ορισμό για τη σημασία της λέξης "{}" στην παρακάτω πρόταση: {}'
83 user_message['zh'] = '请提供单词"{}"在以下句子中的简洁定义:{}'
84 user_message['fi'] = 'Ole hyvä ja anna lyhyt määritelmä sanan "{}" merkitykselle seuraavassa lauseessa: {}'
85 user_message['ru'] = 'Пожалуйста, предоставьте краткое определение значения слова "{}" в следующем предложении: {}'
86
87 def formatting_func(record):
88 language = record['language'] # args.language
89 return tokenizer.apply_chat_template([{'role': 'system', 'content': system_message[language]},
90 {'role': 'user',
91 'content': user_message[language].format(record['target'],
92 record['example'])}],
93 tokenize=False, add_generation_prompt=True)
94
95 return formatting_func
96
97
98def generation(pipe, dataset, args):
99 formatting_func = formatting_func_factory(pipe.tokenizer, args)
100 prompts = [formatting_func(row) for row in dataset]
101
102 tokens = ['.', ' .']
103 eos_tokens = [pipe.tokenizer.eos_token_id] + [pipe.tokenizer.encode(token, add_special_tokens=False)[0]
104 for token in tokens]
105
106 outputs = list()
107 for out in pipe(prompts,
108 forced_eos_token_id=eos_tokens,
109 max_time=args.max_time * args.batch_size,
110 eos_token_id=eos_tokens,
111 max_new_tokens=args.max_new_tokens,
112 truncation=True,
113 batch_size=args.batch_size,
114 repetition_penalty=args.repetition_penalty,
115 temperature=0.001,
116 pad_token_id=pipe.tokenizer.eos_token_id):
117 outputs.append(format_output(out))
118 print('# inputs:', len(outputs))
119 return outputs
120
121
122def format_output(text):
123 text = " ".join(text[0]["generated_text"].split()).strip() + '\n'
124 return text.split('assistant<|end_header_id|>')[1].strip()
125
126
127if __name__ == '__main__':
128 parser = argparse.ArgumentParser(prog='Generation')
129 parser.add_argument('--pretrained_model_name_or_path', type=str, default='meta-llama/Meta-Llama-3-8B-Instruct')
130 parser.add_argument('--peft_model_name_or_path', type=str, default="FrancescoPeriti/LlamaDictionary-it_ML38BI")
131 parser.add_argument('--quantization', action='store_true')
132 parser.add_argument('--hugginface_token', type=str, default='[HF-TOKEN]')
133 parser.add_argument('--max_time', type=float, default=7)
134 parser.add_argument('--max_new_tokens', type=int, default=256)
135 parser.add_argument('--repetition_penalty', type=float, default=1.2)
136 parser.add_argument('--batch_size', type=int, default=512)
137 args = parser.parse_args()
138
139 print('CUDA:', torch.cuda.is_available())
140 tokenizer = load_tokenizer(args)
141 model = load_model(args, tokenizer)
142 pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, device_map="auto")
143
144 # Your data
145 data = [
146 {
147 "target": "carbonara",
148 "example": "Mi serve una bella passeggiata per smaltire questa carbonara",
149 "language": "it"
150 },
151 ]
152
153 # Create a Dataset
154 dataset = Dataset.from_list(data)
155 output = generation(pipe, dataset, args)
156 print(output)@inproceedings{periti2025definition,
title = {{Definition Generation for Word Meaning Modeling: Monolingual, Multilingual, and Cross-Lingual Perspectives}},
author = "Periti, Francesco and Goworek, Roksana and Dubossarsky, Haim and Tahmasebi, Nina",
booktitle = "Proceedings of the 2025 Conference on Empirical Methods in Natural Language Processing",
year = "2025",
address = "Suzhou, China",
publisher = "Association for Computational Linguistics",
note = {{TO APPEAR; reach out for more information}}}
}