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.
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
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))
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.
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.
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')]
[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