3
votes

Est-il possible d'obtenir un score de confiance sur la reconnaissance des entités nommées Spacy

J'ai besoin d'obtenir un score de confiance sur les prédictions faites par Spacy NER.

Fichier CSV

Text,Amount & Nature,Prediction
"T. Rowe Price Associates, Inc.","28,223,360 (1)",ORG
100 E. Pratt Street,Not Listed,FAC
"Baltimore, MD 21202",Not Listed,CARDINAL
"BlackRock, Inc.","21,871,854 (2)",ORG
55 East 52nd Street,Not Listed,LOC
"New York, NY 10022",Not Listed,DATE
The Vanguard Group,"21,380,085 (3)",ORG
100 Vanguard Blvd.,Not Listed,FAC
"Malvern, PA 19355",Not Listed,DATE
FMR LLC,"20,784,414 (4)",ORG
245 Summer Street,Not Listed,CARDINAL
"Boston, MA 02210",Not Listed,GPE

Code

import pandas as pd
import spacy
with open('/path/table.csv') as csvfile:
    reader1 = csv.DictReader(csvfile)
    data1 =[["Text","Amount & Nature","Prediction"]]
    for row in reader1:
        AmountNature = row["Amount & Nature"]
        nlp = spacy.load('en_core_web_sm') 
        doc1 = nlp(row["Text"])

        for ent in doc1.ents:
            #output = [ent.text, ent.start_char, ent.end_char, ent.label_]
            label1 = ent.label_
            text1 = ent.text
        data1.append([str(doc1),AmountNature,label1])
my_df1 = pd.DataFrame(data1)
my_df1.columns = my_df1.iloc[0]
my_df1 = my_df1.drop(my_df1.index[[0]])
my_df1.to_csv('/path/output.csv', index=False, header=["Text","Amount & Nature","Prediction"])

CSV de sortie strong>

Text,Amount & Nature,Percent of Class
"T. Rowe Price Associates, Inc.","28,223,360 (1)",8.7% (1)
100 E. Pratt Street,Not Listed,Not Listed
"Baltimore, MD 21202",Not Listed,Not Listed
"BlackRock, Inc.","21,871,854 (2)",6.8% (2)
55 East 52nd Street,Not Listed,Not Listed
"New York, NY 10022",Not Listed,Not Listed
The Vanguard Group,"21,380,085 (3)",6.64% (3)
100 Vanguard Blvd.,Not Listed,Not Listed
"Malvern, PA 19355",Not Listed,Not Listed
FMR LLC,"20,784,414 (4)",6.459% (4)
245 Summer Street,Not Listed,Not Listed
"Boston, MA 02210",Not Listed,Not Listed

Ici, sur la sortie ci-dessus, est-il possible d'obtenir un score de confiance sur la prectiction Spacy NER. Si oui, comment puis-je y parvenir?

Quelqu'un peut-il m'aider à ce sujet?


1 commentaires

Salut, des progrès dans la recherche des scores de confiance?


3 Réponses :


2
votes

Obtenez un ensemble de données entièrement annoté ou annotez-le manuellement vous-même (étant donné que vous disposez d'un fichier CSV, cela peut être votre option préférée). De cette façon, vous pouvez distinguer la vérité terrain de ce que votre Spacy a prédit. Sur cette base, vous pouvez calculer une matrice de confusion . Je recommande d'utiliser le score F1 comme mesure de confiance.

Ici sont certains super liens traitant de divers ensembles de données et méthodes d'annotation accessibles au public (y compris CRF).


0 commentaires

2
votes

Non, il n'est pas possible d'obtenir un score de confiance pour vos modèles dans Spacy (malheureusement). Comme indiqué dans ce numéro # 881 , il est possible d'obtenir les scores si get_beam_parses est utilisé même s'il semble venir avec son propre ensemble de problèmes, comme mentionné dans le fil de discussion .

Bien que l'utilisation des scores F1 soit bonne pour une évaluation globale, je préférerais que Spacy fournisse des scores de confiance individuels pour ses prédictions, ce qu'il ne fournit pas pour le moment.


0 commentaires

0
votes

Bien qu'il n'y ait actuellement aucune API officiellement prise en charge pour cela, vous pouvez obtenir un score de confiance à partir de la recherche de faisceau en utilisant le code dans cette discussion :

text = content
doc = nlp.make_doc(text)
beams = nlp.entity.beam_parse([doc], beam_width=16, beam_density=0.0001)
for score, ents in nlp.entity.moves.get_beam_parses(beams[0]):
    print (score, ents)
    entity_scores = defaultdict(float)
    for start, end, label in ents:
        # print ("here")
        entity_scores[(start, end, label)] += score
        print ('entity_scores', entity_scores)


0 commentaires