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?
3 Réponses :
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).
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.
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)
Salut, des progrès dans la recherche des scores de confiance?