File size: 3,969 Bytes
178c5c2 5bc7c1a d28eaca 5bc7c1a 57c6317 5bc7c1a 0e95eb5 178c5c2 678fb1e e8b6316 678fb1e e8b6316 fe4bf72 678fb1e fe4bf72 178c5c2 d28eaca 678fb1e 5bc7c1a fe4bf72 478d286 e8b6316 478d286 e8b6316 8c4d64a e8b6316 8f841a8 e8b6316 0d72985 e8b6316 478d286 5bc7c1a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
import gradio as gr
import torch
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
peft_model_id = "hackathon-somos-nlp-2023/bertin-gpt-j-6b-ner-es"
config = PeftConfig.from_pretrained(peft_model_id)
model = AutoModelForCausalLM.from_pretrained(
"DavidFM43/bertin-gpt-j-6b-half-sharded",
return_dict=True,
load_in_8bit=True,
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained(peft_model_id)
# load the Lora model
model = PeftModel.from_pretrained(model, peft_model_id)
model.eval()
def gen_entities(text):
"""Does Named Entity Recognition in the given text."""
text = f"<SP> text: {text}\n\n entities:"
batch = tokenizer(text, return_tensors="pt")
batch["input_ids"] = batch["input_ids"].to("cuda")
with torch.cuda.amp.autocast():
output_tokens = model.generate(**batch, max_new_tokens=256, eos_token_id=50258)
response = tokenizer.batch_decode(output_tokens.detach().cpu().numpy(), skip_special_tokens=False)[0]
return response[response.find("entities") : response.find("<EP>")]
iface = gr.Interface(
fn=gen_entities,
inputs="text",
outputs="text",
title="Podcast Named Entity Recognition",
description="Introduce un texto corto para que el modelo identifique las identidades presentes en el mismo.",
theme="gradio/monochrome",
examples=[
"Yo hoy voy a hablar de mujeres en el mundo del arte, porque me ha "
"leído un libro fantástico que se llama Historia del arte sin hombres, "
"de Katie Hesel.",
"Victoria del Reino Unido (Alxandrina Victoria; Londres, 24 de mayo "
"de 1819-isla de Wight, 22 de enero de 1901) fue la reina del Reino Unido.",
"El viaje de Chihiro es una película de animación japonesa estrenada "
" el 20 de julio de 2001. Fue dirigida por Hayao Miyazaki y producida en el Studio Ghibli",
],
article="""
## Motivación
Los podcasts son una increíble fuente de información e inspiración. Los escuchamos de camino al trabajo, mientras practicamos deportes o cocinando nuestra receta favorita. No obstante, puede ser complicado retener ciertos hechos específicos, fechas o personajes que mencionan en ellos. El objetivo de este proyecto ha sido explorar cómo podemos capturar toda esta información usando ‘named-entity recognition’.
En vez de usar un modelo de lenguaje fine-tuned con una head específica para NER, hemos replanteado el problema como una tarea de generación de texto a partir de un prompt del tipo:
```
text: Yo hoy voy a hablar de mujeres en el mundo del arte, porque he leído un libro fantástico que se llama Historia del arte sin hombres, de Katie Hesel.\nentities: (people, Katie Hesel), (books, Historia del arte sin hombres)
```
Al hacer fine-tuning a un LLM con este prompt, hemos podido capturar las entidades mencionadas en el podcast. Hicimos fine-tuning al modelo [bertin-gpt-j-6B](https://huggingface.co/bertin-project/bertin-gpt-j-6B) siguiendo esta estrategia.
## Model
Este modelo es una vesion fine-tuned para la tarea de named-entity recognition del LLM fundacional en español [bertin-project/bertin-gpt-j-6B](https://huggingface.co/bertin-project/bertin-gpt-j-6B) checkpoint. Este modelo fue desarrollado durante la Hackathon de 2023 organizada por SomosNLP con las GPUs RTX 3090 provisionadas por Q Blocks.
Link del modelo: [hackathon-somos-nlp-2023/bertin-gpt-j-6b-ner-es](https://huggingface.co/hackathon-somos-nlp-2023/bertin-gpt-j-6b-ner-es)
## Dataset
Link del dataset: [hackathon-somos-nlp-2023/podcasts-ner-es](https://huggingface.co/datasets/hackathon-somos-nlp-2023/podcasts-ner-es)
## Team members
[David Mora](https://huggingface.co/DavidFM43)
[Sergio Perez](https://huggingface.co/sergiopperez)
[Albeto Fernandez](https://huggingface.co/AlbertoFH98)
""",
)
iface.launch()
|