Null- und wenige Schuss -Entität & Beziehungen Erkennung

Dokumentation : https://ibm.github.io/zshot
Quellcode : https://github.com/ibm/zshot
Papier : https://aclanthology.org/2023.acl-demo.34/
ZSHOT ist ein sehr anpassbares Framework für die Durchführung von Null- und wenigen Schuss -Entitätserkennung.
Kann verwendet werden, um durchzuführen:
Python 3.6+
spacy - ZSHOT stützt sich auf Spacy für Pipelining und Visualisierung
torch - Pytorch ist erforderlich, um Pytorch -Modelle auszuführen.
transformers - für vorgeborene Sprachmodelle erforderlich.
evaluate - Für die Bewertung erforderlich.
datasets - erforderlich, um über Datensätze (z. B. Ontonotes) zu bewerten.
flair - Erforderlich, wenn Sie Flair Erwähnungenextraktoren und für Tars Linker und TARS -Erwähnungen verwenden möchten.blink - Erforderlich, wenn Sie Blink zum Verknüpfen mit Wikipedia -Seiten verwenden möchten.gliner - Erforderlich, wenn Sie den Gliner -Linker oder Gliner -Erwähnungsrückzug verwenden möchten. $ pip install zshot
---> 100% | Beispiel | Notizbuch |
|---|---|
| Installation und Visualisierung | |
| Wissensextraktor | |
| Wikifikation | |
| Benutzerdefinierte Komponenten | |
| Auswertung |
ZSHOT enthält zwei verschiedene Komponenten, den Erwähnungsextraktor und den Linker .
Der Erwähnungsextraktor erkennt die möglichen Entitäten (auch bekannt als Erwähnungen), die dann vom Linker mit einer Datenquelle (z. B. Wikidata) verknüpft werden.
Derzeit gibt es 7 verschiedene erwähnte Extraktoren, die unterstützt werden, SMXM, Tars, Gliner, 2, basierend auf Spacy , und 2, die auf Flair basieren. Die beiden verschiedenen Versionen für Spacy und Flair sind ähnlich, einer basiert auf der Erkennung und Klassifizierung der Entität (NERC) und der andere basiert auf der Linguistik (dh unter Verwendung eines Teils des Sprach -Tagging (POS) und der Abhängigkeitsanalyse (DP)).
Der NERC -Ansatz verwendet NERC -Modelle, um alle Einheiten zu erkennen, die verknüpft werden müssen. Dieser Ansatz hängt von dem Modell ab, das verwendet wird, und von den Entitäten, auf denen das Modell geschult wurde. Abhängig vom Anwendungsfall und der Zieleinheiten ist es möglicherweise nicht der beste Ansatz, da die Entitäten möglicherweise nicht vom NERC -Modell erkannt werden und daher nicht verknüpft werden.
Der sprachliche Ansatz beruht auf der Idee, dass Erwähnungen normalerweise eine Syntagma oder ein Substantiv sein werden. Daher erkennt dieser Ansatz Substantive, die in einer Syntagma enthalten sind und die wie Objekte, Probanden usw. wirken. Dieser Ansatz hängt nicht vom Modell ab (obwohl die Leistung der Fall ist), aber ein Substantiv in einem Text sollte immer ein Substantiv sein, es hängt nicht vom Datensatz des Modells ab, auf dem geschult wurde.
Der Linker verknüpft die erkannten Entitäten mit vorhandenen Etiketten. Einige der Linker sind jedoch von End-to-End , dh sie benötigen den Erwähnungsabzug nicht, da sie die Entitäten gleichzeitig erkennen und verknüpfen.
Auch hier sind derzeit 5 Linker verfügbar, 3 davon sind End-to-End und 2 nicht.
| Linkername | End-to-End | Quellcode | Papier |
|---|---|---|---|
| Blinken | X | Quellcode | Papier |
| GENRE | X | Quellcode | Papier |
| Smxm | ✓ | Quellcode | Papier |
| Tars | ✓ | Quellcode | Papier |
| Gliner | ✓ | Quellcode | Papier |
Der Relations -Extraktor extrahiert die Beziehungen zwischen verschiedenen Entitäten, die zuvor von einem Linker extrahiert wurden.
Derzeit ist der IS nur eine Relation Extractor verfügbar:
Der Wissensextraktor wird gleichzeitig die Extraktion und Klassifizierung benannter Entitäten und die Extraktion der Beziehungen zwischen ihnen durchführen. Die Pipeline mit dieser Komponente benötigt keine Erwähnungen , Linker oder Beziehungsextraktor für die Arbeit.
Derzeit ist nur ein Wissensextraktor verfügbar:
Knowgl
pip install -r requirements.txtpython -m spacy download en_core_web_smmain.py mit der Definition der Pipeline -Konfiguration und der Entitäten ( Wikipedia Abstract sind normalerweise ein guter Ausgangspunkt für Beschreibungen ): 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" )Rennen mit
$ python main.py
Using the 'ent' visualizer
Serving on http://0.0.0.0:5000 ...Das Skript kommentiert den Text mit ZSHOT und verwendet Unschaltstoff zur Visualisierung der Anmerkungen
Öffnen Sie Ihren Browser unter http://127.0.0.1:5000.
Sie werden den kommentierten Satz sehen:
Wenn Sie Ihren eigenen mtextractor oder Linker implementieren und mit ZSHOT verwenden möchten, können Sie dies tun. Um es dem Benutzer zu erleichtern, eine neue Komponente zu implementieren, werden einige Basisklassen bereitgestellt, die Sie mit Ihrem Code erweitern müssen.
Es ist so einfach wie eine neue Klasse zu erstellen, die die Basisklasse erweitert ( MentionsExtractor oder Linker ). Sie müssen die Vorhersagemethode implementieren, die die Spacy -Dokumente empfängt und für jedes Dokument eine Liste von zshot.utils.data_models.Span zurückgibt.
Dies ist ein einfacher Erwähnungen_Extraktor, der alle Wörter erwähnt, die den Buchstaben S enthalten:
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 ]Die Bewertung ist ein wichtiger Prozess, um die Leistung der Modelle weiter zu verbessern. Deshalb ermöglicht ZSHOT die Komponente mit zwei vordefinierten Datensätzen: Ontonotes und Meditionen in einer Null-Shot-Version, in der die Entitäten des Tests und der Validierung nicht im Zugsatz erscheinen.
Die evaluation enthält alle Funktionen, um die ZSHOT -Komponenten zu bewerten. Die Hauptfunktion ist zshot.evaluation.zshot_evaluate.evaluate , die als Eingabe des Spacy nlp -Modells und des Datensatzes zur Bewertung angesehen wird. Es wird eine str zurückgegeben, die eine Tabelle mit den Ergebnissen der Bewertung enthält. Beispielsweise wäre die Bewertung des TARS -Linker in ZSHOT für den Validierungssatz von Ontonotes :
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.",
}