Dieser Artikel ist der 23. Tag von MYJLab Adventskalender.
Hallo. Dies ist Marutaku von MYJLab m1. Dieses Mal hatte ich die Möglichkeit, eine Technik namens Eigenexpressionsextraktion zu verwenden, daher möchte ich die Bibliothek vorstellen, die ich damals verwendet habe.
Named Entity Recognition ist eine Technologie, die die richtige Nomenklatur wie Firmennamen und Ortsnamen mit Bezeichnungen wie Firmen- und Ortsnamen erhält. Als Beispiel,
Boeing, ein großes US-amerikanisches Flugzeugunternehmen, gab am 23. seinen sofortigen Rücktritt als CEO von Muillenberg bekannt.
Es scheint, dass er die Verantwortung für das Problem des hochmodernen Flugzeugs "737MAX" übernommen hat, das aufgrund von zwei Abstürzen ausgesetzt wurde.
Calhoon wird am 13. Januar nächsten Jahres das Amt des CEO übernehmen.
https://news.yahoo.co.jp/pickup/6346205 Zu diesem Zeitpunkt können Sie sehen, dass der Name der Person "Mui Lenberg, Calhoon" und der Name der Organisation "Boeing" ist. Auf diese Weise besteht die Aufgabe des Extrahierens geeigneter Ausdrücke darin, die richtige Nomenklatur zu erhalten, die im Satz vorhanden ist.
Es ist in This Repository organisiert. Ich denke, dass CoNLL 2003 und Ontonotes v5 am häufigsten verwendet werden. Andere enthalten medizinische Daten und mit Wikipedhia kommentierte Daten. Der japanische Datensatz ist nicht sehr öffentlich, scheint aber zum Verkauf zu stehen.
Neuere Eigenexpressionsextraktionspapiere sind sehr schwer zu implementieren. Wie Sie unter Papier mit Code sehen können, können Sie eine große Anzahl von Modellen stapeln und verwenden oder mehrere vorab trainierte Modelle verwenden. Es ist sehr ärgerlich, weil ich den Wortausdruck des Modells verwenden möchte. LSTM-CRF + ELMo + BERT + Flair
oder Mounani Itternokawa Karanai.
Zu dieser Zeit stieß ich auf eine Bibliothek namens Flair, die es einfach macht, ein Modell zu implementieren, das den Stand der Technik von NER erreicht.
Flair ist eine Bibliothek für die Verarbeitung natürlicher Sprache, die die Implementierung des State-of-the-Art-Modells vereinfacht. Mit einer Vielzahl trainierter Modelle können Sie frühere SoTA-Modelle schnell in Ihr System integrieren. Wie im Tutorial erwähnt, können Sie das in Flair trainierte Eigenexpressions-Extraktionsmodell nur mit dem folgenden Code ausführen.
from flair.data import Sentence
from flair.models import SequenceTagger
# make a sentence
sentence = Sentence('I love Berlin .')
# load the NER tagger
tagger = SequenceTagger.load('ner')
# run NER over sentence
tagger.predict(sentence)
Neben dem hier verwendeten "ner" -Modell gibt es verschiedene Modelle, wie beispielsweise das "ner-fast" -Modell, das auch auf einer CPU mit hoher Geschwindigkeit arbeitet.
Flair kann nicht nur trainierte Modelle ausführen, sondern auch eigene Modelle erstellen. Flair erleichtert die Handhabung eingebetteter Darstellungen bekannter und trainierter Modelle. (https://github.com/flairNLP/flair/blob/master/resources/docs/STRUCT_4_ELMO_BERT_FLAIR_EMBEDDING.md) Ein Beispiel für mein eigenes Modell ist unten dargestellt.
from flair.data import Corpus
from flair.datasets import WNUT_17
from flair.embeddings import TokenEmbeddings, WordEmbeddings, StackedEmbeddings
from typing import List
# 1. get the corpus
corpus: Corpus = WNUT_17().downsample(0.1)
print(corpus)
# 2. what tag do we want to predict?
tag_type = 'ner'
# 3. make the tag dictionary from the corpus
tag_dictionary = corpus.make_tag_dictionary(tag_type=tag_type)
print(tag_dictionary.idx2item)
# 4. initialize embeddings
embedding_types: List[TokenEmbeddings] = [
WordEmbeddings('glove'),
# comment in this line to use character embeddings
# CharacterEmbeddings(),
# comment in these lines to use flair embeddings
# FlairEmbeddings('news-forward'),
# FlairEmbeddings('news-backward'),
]
embeddings: StackedEmbeddings = StackedEmbeddings(embeddings=embedding_types)
# 5. initialize sequence tagger
from flair.models import SequenceTagger
tagger: SequenceTagger = SequenceTagger(hidden_size=256,
embeddings=embeddings,
tag_dictionary=tag_dictionary,
tag_type=tag_type,
use_crf=True)
# 6. initialize trainer
from flair.trainers import ModelTrainer
trainer: ModelTrainer = ModelTrainer(tagger, corpus)
# 7. start training
trainer.train('resources/taggers/example-ner',
learning_rate=0.1,
mini_batch_size=32,
max_epochs=150)
# 8. plot weight traces (optional)
from flair.visual.training_curves import Plotter
plotter = Plotter()
plotter.plot_weights('resources/taggers/example-ner/weights.txt')
Das obige Modell verwendet den eingebetteten Ausdruck des Modells "Handschuh" im Modell. Wenn Sie diesen Wert erhöhen, können Sie jedoch mehrere eingebettete Wortausdrücke verwenden. Ich habe es noch nicht ausprobiert, aber es scheint, dass eine Feinabstimmung eingebetteter Ausdrücke möglich ist.
Diesmal haben wir über NER und Flair gesprochen. Flair kann zusätzlich zu NER auf Aufgaben wie negatives / positives Urteilsvermögen und Textklassifizierung angewendet werden. Wenn Sie die Verarbeitung natürlicher Sprache verwenden möchten, es aber schwierig finden, versuchen Sie es bitte.
Recommended Posts