2017-06-29 34 views
1

spacy libを使用して作成した訓練されたNERモデルを評価しようとしています。 通常、この種の問題には、f1スコア(精度とリコールの比率)を使用できます。私は訓練されたNERモデルの精度関数をドキュメントで見つけることができませんでした。Spacy NERモデルの評価

私はその正しい場合はわからないが、私は以下の方法(例)でそれをやろうとしているとsklearnからf1_scoreを使用しています:

from sklearn.metrics import f1_score 
import spacy 
from spacy.gold import GoldParse 


nlp = spacy.load("en") #load NER model 
test_text = "my name is John" # text to test accuracy 
doc_to_test = nlp(test_text) # transform the text to spacy doc format 

# we create a golden doc where we know the tagged entity for the text to be tested 
doc_gold_text= nlp.make_doc(test_text) 
entity_offsets_of_gold_text = [(11, 15,"PERSON")] 
gold = GoldParse(doc_gold_text, entities=entity_offsets_of_gold_text) 

# bring the data in a format acceptable for sklearn f1 function 
y_true = ["PERSON" if "PERSON" in x else 'O' for x in gold.ner] 
y_predicted = [x.ent_type_ if x.ent_type_ !='' else 'O' for x in doc_to_test] 
f1_score(y_true, y_predicted, average='macro')`[1] 
> 1.0 

任意の考えはあるか洞察が便利です。次のリンクで同じ質問を有するものについては1

答えて

3

:fscore、リコールと精度:

spaCy/scorer.py

あなたはなど、さまざまな指標を見つけることができます。 scorerを使用した例:

input_テキスト(例: "私の名前はジョンです"。)と annotは注釈(EXで[(11,16、 "人")]

ある
from spacy.gold import GoldParse 

def evaluate(ner_model, examples): 
    scorer = Scorer() 
    for input_, annot in examples: 
     doc_gold_text = ner_model.make_doc(input_) 
     gold = GoldParse(doc_gold_text, entities=annot) 
     pred_value = ner_model(input_) 
     scorer.score(pred_value, gold) 
    return scorer.scores 

scorer.scoresは、複数のスコアを返します。例はspaCy example in githubから取られている(リンクはもう動作しません)

+0

1.あなたはgithubのリンクは、この文脈では自己とは何 2.壊れているだ?どこでself.make_goldを見つけることができますか? – farlee2121

+0

@ farlee2121私は次のように答えを更新しました。より明確。 –

関連する問題