SLIMER-🇮🇹-PARALLEL

SLIMER-IT 🇮🇹 è un LLM specificamente istruito per il task di zero-shot NER in italiano 🇮🇹

Trainato su un numero ridotto di classi (PER, ORG, LOC), è progettato per annotare entità mai viste prima sfruttando un'istruzione arricchita con una DEFINIZIONE e LINEE GUIDA per l'entità denominata da estrarre.

Rispetto expertai/LLaMAntino-3-SLIMER-IT, questa versione permette di estrarre più tipi di entità in parallelo, con un conseguente minor costo computazionale, seppur con qualche drop a livello di prestazioni (-10 % MultiNERd).

GitHub repository: https://github.com/andrewzamai/SLIMER_IT/tree/parallel

Instruction Tuning Prompt
SLIMER-3-PARALLEL prompt

<|start_header_id|>user<|end_header_id|>

Ti viene fornito un input di testo (delimitato da tre virgolette) e un'istruzione.
Leggi il testo e rispondi all'istruzione alla fine.

"""
{input text}
"""

Instruction: Estrai le entità di tipo [lista_classi] dal testo che hai letto. Tieni conto che non tutte queste entità sono necessariamente presenti. Non estrarre quindi entità che non esistono nel testo, restituisci invece un elenco vuoto per quella classe. Assicurati che ogni entità sia assegnata ad una e una sola classe appropriata

Per aiutarti, ti vengono forniti una definizione e delle linee guida per ogni tipo di entità.

{

{"NE_type_1": {"Definition": "", "Guidelines": ""}

...

{"NE_type_N": {"Definition": "", "Guidelines": ""}

}

Restituisci solo un JSON. Il JSON deve seguire rigorosamente questo formato:{"NE_type_1": [], ..., "NE_type_N":[]}. Non restituire nient'altro, solo il JSON.

<|eot_id|><|start_header_id|>assistant<|end_header_id|>

from vllm import LLM, SamplingParams
from src.SLIMER_Prompter import SLIMER_PARALLEL_instruction_prompter
from src.SFT_finetuning.commons.prompter import Prompter

vllm_model = LLM(model="expertai/LLaMAntino-3-SLIMER-IT-PARALLEL")
tokenizer = vllm_model.get_tokenizer()

# suggested temperature 0, max_tokens hyperparam
cutoff_len = 4096
sampling_params = SamplingParams(temperature=0, max_tokens=1000, stop=tokenizer.eos_token)

# given list of NE types and dictionary of Def and Guidelines for each --> returns instruction
slimer_prompter = SLIMER_PARALLEL_instruction_prompter("SLIMER_PARALLEL_instruction_it", './src/templates')

# create a dictionary of dictionaries, each NE_type as key should have a {Definition: str, Guidelines: str} value
ne_types_list = ['ORGANIZZAZIONE', 'UNIVERSITÀ', 'LOCALITÀ', 'PERSONA', 'CONFERENZA']
def_guidelines_per_NE_dict = {
    'ORGANIZZAZIONE': {
        'Definizione': "'organizzazione' si riferisce a gruppi strutturati, istituzioni, aziende o associazioni.",
        'Linee Guida': "Evitare di etichettare termini generici come 'squadra' o 'gruppo'. Prestare attenzione a entità ambigue come 'Apple' (azienda vs. frutto) e 'Manchester United' (squadra sportiva vs. club di tifosi)."
    },
    'UNIVERSITÀ': {
        'Definizione': "UNIVERSITÀ rappresenta istituzioni educative che offrono programmi di istruzione superiore e ricerca accademica.",
        'Linee Guida': "Evitare di etichettare concetti generali come 'educazione' o 'accademia' come UNIVERSITÀ. Prestare attenzione a termini ambigui come 'Cambridge' (può riferirsi a diverse istituzioni) e 'Harvard' (può riferirsi a una persona)."
    },
    'LOCALITÀ': {
        'Definizione': "LOCALITÀ si riferisce a entità geografiche specifiche come luoghi, strutture e istituzioni che rappresentano luoghi fisici con indirizzi o funzioni distintive.",
        'Linee Guida': "Prestare attenzione a termini ambigui, ad esempio 'Amazon' (azienda, fiume e regione) e 'Cambridge' (città negli USA, città nel Regno Unito e università). Considerare il contesto e la specificità per classificare correttamente le località."
    },
    'PERSONA': {
        'Definizione': "PERSONA si riferisce a individui, inclusi personaggi pubblici, celebrità e personalità di rilievo.",
        'Linee Guida': "Se una persona sta lavorando in ambito di ricerca (incluso professore, dottorando, ricercatore in aziende, ecc.), evitare di etichettarla come entità PERSONA."
    },
    'CONFERENZA': {
        'Definizione': "CONFERENZA si riferisce a eventi o raduni specifici in cui esperti, ricercatori e professionisti si riuniscono per presentare e discutere il loro lavoro in un particolare campo o disciplina.",
        'Linee Guida': "Prestare attenzione quando si etichettano entità che potrebbero riferirsi a istituzioni, organizzazioni o associazioni piuttosto che a eventi specifici. Fare attenzione a termini ambigui come 'International Journal of Computer Vision', che potrebbe riferirsi a una pubblicazione piuttosto che a una conferenza."
    }
}

instruction = slimer_prompter.generate_prompt(
  ne_tags=", ".join(ne_types_list),
  def_and_guidelines=json.dumps(def_guidelines_per_NE_dict, indent=2),
  expected_json_format=json.dumps({k: [] for k in def_guidelines_per_NE_dict.keys()}, indent=2)
)

input_text = 'Gli approcci tipici dei modelli generativi includono classificatori naive Bayes, modelli a mescolanza gaussiana, autoencoder variazionali e altri.'

# this promper formats the input text to analize with SLIMER instruction
input_instruction_prompter = Prompter('LLaMA3-chat-NOheaders', template_path='./src/SFT_finetuning/templates')

system_message = "Sei un utile assistente per il riconoscimento di entità nel testo, istruito per restituire JSON."
conversation = [
    {"role": "system", "content": system_message},
    {"role": "user", "content": input_instruction_prompter.generate_prompt(input=input_text, instruction=instruction)},  # the input_text + instruction
]
prompt = tokenizer.apply_chat_template(conversation, tokenize=False, truncation=True, max_length=cutoff_len, add_generation_prompt=True)

responses = vllm_model.generate(prompt, sampling_params)
Downloads last month
20
Safetensors
Model size
8.03B params
Tensor type
BF16
·
Inference Examples
Unable to determine this model's library. Check the docs .

Model tree for expertai/LLaMAntino-3-SLIMER-IT-PARALLEL

Collection including expertai/LLaMAntino-3-SLIMER-IT-PARALLEL