Cero y pocos disparos con nombre de entidad y reconocimiento de relaciones

Documentación : https://ibm.github.io/zshot
Código fuente : https://github.com/ibm/zshot
Documento : https://aclanthology.org/2023.acl-demo.34/
ZSHOT es un marco altamente personalizable para realizar cero y pocas tomas nombradas de reconocimiento de entidad.
Se puede usar para realizar:
Python 3.6+
spacy - Zshot confía en Spacy para tuberías y visualización
torch : se requiere pytorch para ejecutar modelos Pytorch.
transformers : requerido para modelos de lenguaje previamente capacitados.
evaluate - requerido para la evaluación.
datasets : requeridos para evaluar los conjuntos de datos (por ejemplo: Ontonotes).
flair : requerido si desea usar Flair Mencions Extractor y para Tars Linker y Tars Mencions Extractor.blink : requerido si desea usar Blink para vincular a las páginas de Wikipedia.gliner : requerido si desea usar Gliner Linker o Gliner Mencions Extractor. $ pip install zshot
---> 100% | Ejemplo | Computadora portátil |
|---|---|
| Instalación y visualización | |
| Extractor de conocimiento | |
| Wikificación | |
| Componentes personalizados | |
| Evaluación |
ZSHOT contiene dos componentes diferentes, el extractor de menciones y el enlazador .
El extractor de menciones detectará las posibles entidades (también conocidas como menciones), que luego se vincularán a una fuente de datos (por ejemplo: wikidata) por el enlazador .
Actualmente, hay 7 menciones diferentes de extractores compatibles, SMXM, Tars, Gliner, 2 basados en Spacy y 2 que se basan en Flair . Las dos versiones diferentes para Spacy y Flair son similares, una se basa en el reconocimiento y la clasificación de entidades nombrados (NERC) y la otra se basa en la lingüística (es decir: usando parte del etiquetado del habla (POS) y el análisis de dependencia (DP)).
El enfoque NERC utilizará modelos NERC para detectar todas las entidades que deben estar vinculadas. Este enfoque depende del modelo que se está utilizando, y las entidades en las que el modelo ha sido entrenado, por lo que dependiendo del caso de uso y las entidades objetivo no pueden ser el mejor enfoque, ya que las entidades no pueden ser reconocidas por el modelo NERC y, por lo tanto, no se vinculan.
El enfoque lingüístico se basa en la idea de que las menciones generalmente serán un sintagma o un sustantivo. Por lo tanto, este enfoque detecta los sustantivos que se incluyen en un sintagma y que actúan como objetos, sujetos, etc. Este enfoque no depende del modelo (aunque el rendimiento lo hace), pero un sustantivo en un texto siempre debe ser un sustantivo, no depende del conjunto de datos en el que el modelo haya sido capacitado.
El enlazador vinculará las entidades detectadas con un conjunto de etiquetas existentes. Sin embargo, algunos de los enlazadores son de extremo a extremo , es decir, no necesitan el extractor de menciones , ya que detectan y vinculan las entidades al mismo tiempo.
Nuevamente, actualmente hay 5 enlazadores disponibles, 3 de ellos son de extremo a extremo y 2 no lo son.
| Nombre de enlazador | de extremo a extremo | Código fuente | Papel |
|---|---|---|---|
| Parpadear | incógnita | Código fuente | Papel |
| GÉNERO | incógnita | Código fuente | Papel |
| Smxm | ✓ | Código fuente | Papel |
| Alquitrán | ✓ | Código fuente | Papel |
| Glinero | ✓ | Código fuente | Papel |
El extractor de relaciones extraerá relaciones entre diferentes entidades previamente extraídas por un enlazador .
Actualmente, es solo un extractor de relación disponible:
El extractor de conocimiento funcionará al mismo tiempo la extracción y clasificación de entidades nombradas y la extracción de relaciones entre ellos. La tubería con este componente no necesita ningún extractor , enlazador o extracto de relación para que funcione.
Actualmente, es solo un extractor de conocimiento disponible:
Knowl
pip install -r requirements.txtpython -m spacy download en_core_web_smmain.py con la configuración de la tubería y la definición de entidades ( el resumen de Wikipedia generalmente es un buen punto de partida para las descripciones ): import spacy
from zshot import PipelineConfig , displacy
from zshot . linker import LinkerRegen
from zshot . mentions_extractor import MentionsExtractorSpacy
from zshot . utils . data_models import Entity
nlp = spacy . load ( "en_core_web_sm" )
nlp_config = PipelineConfig (
mentions_extractor = MentionsExtractorSpacy (),
linker = LinkerRegen (),
entities = [
Entity ( name = "Paris" ,
description = "Paris is located in northern central France, in a north-bending arc of the river Seine" ),
Entity ( name = "IBM" ,
description = "International Business Machines Corporation (IBM) is an American multinational technology corporation headquartered in Armonk, New York" ),
Entity ( name = "New York" , description = "New York is a city in U.S. state" ),
Entity ( name = "Florida" , description = "southeasternmost U.S. state" ),
Entity ( name = "American" ,
description = "American, something of, from, or related to the United States of America, commonly known as the United States or America" ),
Entity ( name = "Chemical formula" ,
description = "In chemistry, a chemical formula is a way of presenting information about the chemical proportions of atoms that constitute a particular chemical compound or molecule" ),
Entity ( name = "Acetamide" ,
description = "Acetamide (systematic name: ethanamide) is an organic compound with the formula CH3CONH2. It is the simplest amide derived from acetic acid. It finds some use as a plasticizer and as an industrial solvent." ),
Entity ( name = "Armonk" ,
description = "Armonk is a hamlet and census-designated place (CDP) in the town of North Castle, located in Westchester County, New York, United States." ),
Entity ( name = "Acetic Acid" ,
description = "Acetic acid, systematically named ethanoic acid, is an acidic, colourless liquid and organic compound with the chemical formula CH3COOH" ),
Entity ( name = "Industrial solvent" ,
description = "Acetamide (systematic name: ethanamide) is an organic compound with the formula CH3CONH2. It is the simplest amide derived from acetic acid. It finds some use as a plasticizer and as an industrial solvent." ),
]
)
nlp . add_pipe ( "zshot" , config = nlp_config , last = True )
text = "International Business Machines Corporation (IBM) is an American multinational technology corporation"
" headquartered in Armonk, New York, with operations in over 171 countries."
doc = nlp ( text )
displacy . serve ( doc , style = "ent" )Correr con
$ python main.py
Using the 'ent' visualizer
Serving on http://0.0.0.0:5000 ...El script anotará el texto usando ZSHOT y usará la desplazamiento para visualizar las anotaciones
Abra su navegador en http://127.0.0.1:5000.
Verá la oración anotada:
Si desea implementar sus propios menciones_extractor o enlazador y usarlo con ZSHOT, puede hacerlo. Para facilitar que el usuario implementar un nuevo componente, se proporcionan algunas clases base que debe extenderse con su código.
Es tan simple como crear una nueva clase que extiende la clase base ( MentionsExtractor o Linker ). Tendrá que implementar el método Predict, que recibirá los documentos de Spacy y devolverá una lista de zshot.utils.data_models.Span para cada documento.
Este es un simple Mentions_Extractor que se extraerá como menciona todas las palabras que contienen la letra S:
from typing import Iterable
import spacy
from spacy . tokens import Doc
from zshot import PipelineConfig
from zshot . utils . data_models import Span
from zshot . mentions_extractor import MentionsExtractor
class SimpleMentionExtractor ( MentionsExtractor ):
def predict ( self , docs : Iterable [ Doc ], batch_size = None ):
spans = [[ Span ( tok . idx , tok . idx + len ( tok )) for tok in doc if "s" in tok . text ] for doc in docs ]
return spans
new_nlp = spacy . load ( "en_core_web_sm" )
config = PipelineConfig (
mentions_extractor = SimpleMentionExtractor ()
)
new_nlp . add_pipe ( "zshot" , config = config , last = True )
text_acetamide = "CH2O2 is a chemical compound similar to Acetamide used in International Business "
"Machines Corporation (IBM)."
doc = new_nlp ( text_acetamide )
print ( doc . _ . mentions )
> >> [ is , similar , used , Business , Machines , materials ]La evaluación es un proceso importante para seguir mejorando el rendimiento de los modelos, es por eso que ZSHOT permite evaluar el componente con dos conjuntos de datos predefinidos: Ontonotes y medentes, en una versión de disparo cero en la que las entidades de las divisiones de prueba y validación no aparecen en el conjunto de trenes.
La evaluation del paquete contiene todas las funcionalidades para evaluar los componentes ZSHOT. La función principal es zshot.evaluation.zshot_evaluate.evaluate , que tomará como entrada el modelo Spacy nlp y el conjunto de datos para evaluar. Devolverá un str que contiene una tabla con los resultados de la evaluación. Por ejemplo, la evaluación del enlazador TARS en ZSHOT para el conjunto de validación de Ontonotes sería:
import spacy
from zshot import PipelineConfig
from zshot . linker import LinkerTARS
from zshot . evaluation . dataset import load_ontonotes_zs
from zshot . evaluation . zshot_evaluate import evaluate , prettify_evaluate_report
from zshot . evaluation . metrics . seqeval . seqeval import Seqeval
ontonotes_zs = load_ontonotes_zs ( 'validation' )
nlp = spacy . blank ( "en" )
nlp_config = PipelineConfig (
linker = LinkerTARS (),
entities = ontonotes_zs . entities
)
nlp . add_pipe ( "zshot" , config = nlp_config , last = True )
evaluation = evaluate ( nlp , ontonotes_zs , metric = Seqeval ())
prettify_evaluate_report ( evaluation ) @inproceedings{picco-etal-2023-zshot,
title = "Zshot: An Open-source Framework for Zero-Shot Named Entity Recognition and Relation Extraction",
author = "Picco, Gabriele and
Martinez Galindo, Marcos and
Purpura, Alberto and
Fuchs, Leopold and
Lopez, Vanessa and
Hoang, Thanh Lam",
booktitle = "Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 3: System Demonstrations)",
month = jul,
year = "2023",
address = "Toronto, Canada",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.acl-demo.34",
doi = "10.18653/v1/2023.acl-demo.34",
pages = "357--368",
abstract = "The Zero-Shot Learning (ZSL) task pertains to the identification of entities or relations in texts that were not seen during training. ZSL has emerged as a critical research area due to the scarcity of labeled data in specific domains, and its applications have grown significantly in recent years. With the advent of large pretrained language models, several novel methods have been proposed, resulting in substantial improvements in ZSL performance. There is a growing demand, both in the research community and industry, for a comprehensive ZSL framework that facilitates the development and accessibility of the latest methods and pretrained models.In this study, we propose a novel ZSL framework called Zshot that aims to address the aforementioned challenges. Our primary objective is to provide a platform that allows researchers to compare different state-of-the-art ZSL methods with standard benchmark datasets. Additionally, we have designed our framework to support the industry with readily available APIs for production under the standard SpaCy NLP pipeline. Our API is extendible and evaluable, moreover, we include numerous enhancements such as boosting the accuracy with pipeline ensembling and visualization utilities available as a SpaCy extension.",
}