NER ist eine Abkürzung für Named Entity Recognition und eine der Aufgaben der Verarbeitung natürlicher Sprache, die als Eigenexpressionserkennung bezeichnet wird. Stanford NER Tagger ist ein Werkzeug, um diese Aufgabe zu lösen. Dieses Mal werde ich das selbst trainieren.
Laden Sie zunächst ein Beispiel für Trainingsdaten herunter. https://github.com/synalp/NER/blob/master/corpus/CoNLL-2003/eng.train
Dann laden Sie Stanford NER Tagger herunter. https://nlp.stanford.edu/software/CRF-NER.shtml#Download
Dann installieren Sie jdk.
apt install default-jdk
Formatieren Sie den heruntergeladenen eng.train.
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
Speichern Sie dies mit dem Dateinamen train.prop.
java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -prop train.prop
Anschließend wird das Modell als Datei mit dem Namen ner-model.ser.gz erstellt.
Mit dem Stanford NER Tagger-Wrapper von nltk können Sie Ihr Modell aus Python verwenden.
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()))
[Ausgabe]
[('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