vonewman commited on
Commit
18ca43a
·
1 Parent(s): 1971c04

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -33
app.py CHANGED
@@ -28,28 +28,29 @@ def load_model():
28
 
29
  def align_word_ids(texts):
30
 
31
- trainer, model, tokenizer = load_model()
32
-
33
- # Utilisez le tokenizer pour obtenir les tokens de chaque mot
34
- tokenized_inputs = tokenizer(texts, padding='max_length', max_length=218, truncation=True, return_tensors="pt")
35
- input_ids = tokenized_inputs["input_ids"][0]
36
 
37
- # Créez une liste pour stocker les IDs correspondant à chaque mot
38
- word_ids = []
39
-
40
- for i, input_id in enumerate(input_ids):
41
- # Si le token est un token de début de mot, ajoutez son ID à la liste
42
- if tokenizer.decode(input_id) == tokenizer.decode(tokenizer.encode(tokenizer.decode(input_id), add_special_tokens=False)):
43
- word_ids.append(i)
44
 
 
45
  label_ids = []
46
 
47
- # Parcourez les word_ids pour étiqueter les tokens de début de mot comme 1
48
- for i in range(len(input_ids)):
49
- if i in word_ids:
50
- label_ids.append(1)
 
 
 
 
 
 
51
  else:
52
- label_ids.append(-100) # -100 pour les tokens qui ne sont pas le début d'un mot
 
 
 
 
53
 
54
  return label_ids
55
 
@@ -78,26 +79,14 @@ id2tag = {0: 'O', 1: 'B-LOC', 2: 'B-PER', 3: 'I-PER', 4: 'B-ORG', 5: 'I-DATE', 6
78
 
79
 
80
  def tag_sentence(text):
 
81
  trainer, model, tokenizer = load_model()
82
 
83
  # Utilisez votre modèle pour prédire les tags
84
  predictions = predict_ner_labels(model, tokenizer, text)
85
 
86
- # Obtenez les probabilités associées aux prédictions
87
- inputs = tokenizer(text, truncation=True, return_tensors="pt")
88
- outputs = model(**inputs)
89
- probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
90
-
91
- # Calcul des probabilités que le tag prédit soit correct
92
- word_tags = []
93
- for i, tag in enumerate(predictions):
94
- tag_id = id2tag.get(tag, -1) # Vérifiez si la clé existe, sinon utilisez -1 comme indice
95
- if tag_id != -1:
96
- prob = np.round(probs[0, i, tag_id].item() * 100, 2)
97
- word_tags.append((tokenizer.decode(inputs['input_ids'][0][i].item()), tag, prob))
98
-
99
- # Créez un DataFrame avec les colonnes dans l'ordre spécifié
100
- df = pd.DataFrame(word_tags, columns=['word', 'tag', 'probability'])
101
 
102
  return df
103
 
@@ -136,7 +125,7 @@ if submit_button:
136
  c1, c2, c3 = st.columns([1, 3, 1])
137
 
138
  with c2:
139
- st.table(results.style.background_gradient(subset=['probability']).format(precision=2))
140
 
141
  st.header("")
142
  st.header("")
 
28
 
29
  def align_word_ids(texts):
30
 
31
+ tokenized_inputs = tokenizer(texts, padding='max_length', max_length=218, truncation=True)
 
 
 
 
32
 
33
+ word_ids = tokenized_inputs.word_ids()
 
 
 
 
 
 
34
 
35
+ previous_word_idx = None
36
  label_ids = []
37
 
38
+ for word_idx in word_ids:
39
+
40
+ if word_idx is None:
41
+ label_ids.append(-100)
42
+
43
+ elif word_idx != previous_word_idx:
44
+ try:
45
+ label_ids.append(1)
46
+ except:
47
+ label_ids.append(-100)
48
  else:
49
+ try:
50
+ label_ids.append(1 if label_all_tokens else -100)
51
+ except:
52
+ label_ids.append(-100)
53
+ previous_word_idx = word_idx
54
 
55
  return label_ids
56
 
 
79
 
80
 
81
  def tag_sentence(text):
82
+
83
  trainer, model, tokenizer = load_model()
84
 
85
  # Utilisez votre modèle pour prédire les tags
86
  predictions = predict_ner_labels(model, tokenizer, text)
87
 
88
+ # Créez un DataFrame avec les colonnes "word" et "tag"
89
+ df = pd.DataFrame({'word': text.split(), 'tag': predictions})
 
 
 
 
 
 
 
 
 
 
 
 
 
90
 
91
  return df
92
 
 
125
  c1, c2, c3 = st.columns([1, 3, 1])
126
 
127
  with c2:
128
+ st.table(results.style.background_gradient(subset=['tag']).format(precision=2))
129
 
130
  st.header("")
131
  st.header("")