[PYTHON] Entraînez Stanford NER Tagger avec vos propres données

NER est une abréviation de Named Entity Recognition, et est l'une des tâches du traitement du langage naturel appelé reconnaissance d'expression propre. Stanford NER Tagger est un outil pour résoudre cette tâche. Cette fois, je vais m'entraîner moi-même.

Préparation préalable

Tout d'abord, téléchargez un exemple de données d'entraînement. https://github.com/synalp/NER/blob/master/corpus/CoNLL-2003/eng.train

Ensuite, téléchargez Stanford NER Tagger. https://nlp.stanford.edu/software/CRF-NER.shtml#Download

Ensuite, installez jdk.

apt install default-jdk

Préparation des données d'entraînement

Formatez le moteur de formation téléchargé.

out = []
with open("eng.train", "r") as f:
    for line in f:
        line = line.split()
        if len(line) > 2:
            out.append(str(line[0])+"\t"+str(line[-1]).replace("I-","").replace("B-","")+"\n")
        else:
            out.append("\n")

with open("train.tsv") as f:
    f.write(''.join(out))

Entraînement

Préparation à la formation

  1. Décompressez le tagger stanford ner et entrez dans le répertoire décompressé.
  2. Mettez train.tsv dans ce répertoire.

Créer un fichier de propriétés

train.prop


trainFile = train.tsv
serializeTo = ner-model.ser.gz
map = word=0,answer=1

useClassFeature=true
useWord=true
useNGrams=true
noMidNGrams=true
maxNGramLeng=6
usePrev=true
useNext=true
useSequences=true
usePrevSequences=true
maxLeft=1
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
wordShape=chris2useLC
useDisjunctive=true

Enregistrez-le sous le nom de fichier train.prop.

Exécution de la formation

java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop train.prop

Ensuite, le modèle sera créé sous la forme d'un fichier nommé ner-model.ser.gz.

Utilisez le modèle de python

Avec le wrapper Stanford NER Tagger de nltk, vous pouvez utiliser votre modèle à partir de python.


import nltk
from nltk.tag.stanford import StanfordNERTagger
sent = "Balack Obama kills people by AK47"
model = "./ner-model.ser.gz"
jar = "./stanford-ner.jar"
tagger = StanfordNERTagger(model, jar, encoding='utf-8')
print(tagger.tag(sent.split()))

[production]

[('Balack', 'PER'),
 ('Obama', 'PER'),
 ('kills', 'O'),
 ('people', 'O'),
 ('by', 'O'),
 ('AK47', 'O')]

référence

[0] https://nlp.stanford.edu/software/crf-faq.html#a [1] https://blog.sicara.com/train-ner-model-with-nltk-stanford-tagger-english-french-german-6d90573a9486

Recommended Posts

Entraînez Stanford NER Tagger avec vos propres données
Entraînez UGATIT avec votre propre jeu de données
Annotez vos propres données pour entraîner Mask R-CNN
Résolvez votre propre labyrinthe avec Q Learning
Gérez vos données avec AWS RDS
Résolvez votre propre labyrinthe avec DQN
[Renforcer l'apprentissage] DQN avec votre propre bibliothèque
Créez votre propre serveur DNS avec Twisted
Mettez vos propres données d'image dans Deep Learning et jouez avec
Créez votre propre valeur composite avec SQLAlchemy
Pour importer votre propre module avec jupyter
Publiez votre propre bibliothèque Python sur Homebrew
[Apprentissage automatique] Créez un modèle d'apprentissage automatique en effectuant un apprentissage par transfert avec votre propre ensemble de données
Essayez de créer votre propre AWS-SDK avec bash
Créez rapidement votre propre module avec setuptools (python)
Divisez les données en unités de type projet avec Django
Créez votre propre lecteur de musique avec Bottle0.13 + jPlayer2.5!
Étapes pour installer votre propre bibliothèque avec pip
Importez vos propres fonctions avec AWS Glue
Écraser les données dans RDS avec AWS Glue
Flux de création de votre propre package avec setup.py avec python
Mémo pour créer votre propre Box avec le Python de Pepper
Appelez votre propre bibliothèque de langage C avec Go en utilisant cgo
Créez votre propre Big Data en Python pour validation
Entraînez les données MNIST avec PyTorch en utilisant un réseau neuronal
Écrivez votre propre fonction d'activation avec Pytorch (sigmoïde dur)
Appelons votre propre bibliothèque C ++ avec Python (Préférences)
Définissez votre propre fonction de distance avec k-means de scikit-learn