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()