Cet article est le 23e jour du Calendrier de l'Avent MYJLab.
Bonjour. C'est marutaku de MYJLab m1. Cette fois, j'ai eu l'occasion d'utiliser une technique appelée extraction d'expressions propres, je voudrais donc vous présenter la bibliothèque que j'utilisais à l'époque.
La reconnaissance d'entités nommées est une technologie qui acquiert une nomenclature appropriée, comme les noms de société et les noms de lieux avec des étiquettes telles que les noms de société et de lieu. Par exemple,
Boeing, une grande compagnie aérienne américaine, a annoncé le 23 qu'elle démissionnerait immédiatement de son poste de PDG de Muillenberg.
Il semble qu'il ait assumé la responsabilité du problème de l'avion dernier cri "737MAX", qui a été suspendu en raison de deux accidents.
Calhoon assumera le poste de PDG le 13 janvier de l'année prochaine.
https://news.yahoo.co.jp/pickup/6346205 À ce stade, vous pouvez voir que le nom de la personne est «Mui Lenberg, Calhoon» et que le nom de l'organisation est «Boeing». De cette manière, la tâche d'extraction d'expressions appropriées est d'acquérir la nomenclature appropriée qui existe dans la phrase.
Il est organisé dans This Repository. Je pense que CoNLL 2003 et Ontonotes v5 sont les plus couramment utilisés. D'autres incluent des données médicales et des données annotées par wikipedhia. L'ensemble de données japonais n'est pas très public, mais il semble être en vente.
Les papiers d'extraction d'expressions propres récents sont très difficiles à mettre en œuvre. Comme vous pouvez le voir sur Paper With Code, vous pouvez empiler un grand nombre de modèles et les utiliser, ou vous pouvez utiliser plusieurs modèles pré-entraînés. C'est très ennuyeux car je veux utiliser l'expression verbale du modèle. «LSTM-CRF + ELMo + BERT + Flair» ou Mounani Itternokawa Karanai. À ce moment-là, je suis tombé sur une bibliothèque appelée Flair qui facilite la mise en œuvre d'un modèle qui atteint l'état de l'art du NER.
Flair est une bibliothèque de traitement du langage naturel conçue pour faciliter la mise en œuvre du modèle de pointe. Avec une multitude de modèles formés, vous pouvez rapidement incorporer les anciens modèles SoTA dans votre système. Comme mentionné dans le didacticiel, lorsque vous essayez le modèle d'extraction d'expressions propres formé dans Flair, vous pouvez le faire avec le code suivant.
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)
En plus du modèle «ner» utilisé ici, il existe différents modèles tels que le modèle «ner-fast» qui fonctionne à haute vitesse même sur un processeur.
Flair peut non seulement exécuter des modèles entraînés, mais également créer vos propres modèles. Flair facilite la gestion des représentations intégrées de modèles connus ainsi que des modèles entraînés. (https://github.com/flairNLP/flair/blob/master/resources/docs/STRUCT_4_ELMO_BERT_FLAIR_EMBEDDING.md) Un exemple de mon propre modèle est présenté ci-dessous.
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')
Le modèle ci-dessus utilise l'expression incorporée du modèle appelée «gant» à l'intérieur du modèle, mais en augmentant cette valeur, vous pouvez utiliser plusieurs expressions incorporées de mots. Je ne l'ai pas encore essayé, mais il semble qu'un réglage fin des expressions intégrées soit possible.
Cette fois, nous avons parlé de NER et de Flair. Le flair peut être appliqué à des tâches telles que le jugement négatif / positif et la classification de texte en plus du NER. Si vous souhaitez utiliser le traitement du langage naturel mais que vous le trouvez difficile, essayez-le.
Recommended Posts