a-menu commited on
Commit
cb955d0
·
verified ·
1 Parent(s): 2e00505

user can now pick between two ner models

Browse files
Files changed (1) hide show
  1. app.py +58 -11
app.py CHANGED
@@ -91,7 +91,7 @@ st.sidebar.markdown("Avec ses 2200 collaborateurs, l’[Inrap](https://www.inrap
91
 
92
  st.sidebar.markdown("Financé avec le soutien du [Fonds National pour la Science Ouverte](https://www.ouvrirlascience.fr/accueil/) et réalisé en collaboration avec l’infrastructure de recherche [Métopes](http://www.metopes.fr/) ([Université de Caen Normandie](https://www.unicaen.fr/) - [CNRS](https://www.cnrs.fr/fr)), [ARCHES](https://www.inrap.fr/arches-etude-composition-et-processus-pour-une-edition-structuree-des-rapports-d-17145) vise à explorer l’amélioration de la diffusion et de l’exploitation des rapports d’opération à l’aide du format de balisage XML-TEI, permettant d’encoder tant la structuration formelle que le contenu sémantique d’un document. Dans cette optique, vingt-et-un rapports de fouilles de l’Inrap ont été annotés pour entraîner un modèle de reconnaissance des entités nommées (représentant plus de 80 000 entités annotées). Cette application vise à tester la manipulation du modèle, tant avec des fichiers XML que texte brut.")
93
 
94
- st.sidebar.markdown("Le corpus a été annoté à l'aide d'[INCEpTION](https://inception-project.github.io/), tandis que les modèles de [segmentation](https://huggingface.co/a-menu/fr_arches_sentencizer) et de [reconnaissance des entités nommées](https://huggingface.co/a-menu/fr_arches) ont été entraînés et évalués avec [spaCy](https://spacy.io/). Les modalités de [citation](https://huggingface.co/spaces/a-menu/arches_demo/blob/main/CITATION.cff) de l'application peuvent être retrouvées dans le [dépôt](https://huggingface.co/spaces/a-menu/arches_demo/tree/main) de celle-ci.")
95
 
96
  st.sidebar.write("")
97
 
@@ -135,11 +135,28 @@ def download_sentencizer():
135
  subprocess.run(["pip", "install", "https://huggingface.co/a-menu/fr_arches_sentencizer/resolve/main/fr_arches_sentencizer-any-py3-none-any.whl"])
136
 
137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  # Cached to prevent computation on every rerun
139
  @st.cache_resource
140
  def download_ner():
141
  """
142
- Downloads the fr_arches TRF NER model.
143
 
144
  :returns: None
145
  """
@@ -147,9 +164,9 @@ def download_ner():
147
  # Check if the model is already installed
148
  # If not, install it
149
  # Source : ice.nicer & Arthur, https://stackoverflow.com/a/41815890
150
- check_ner = importlib.util.find_spec("fr_arches")
151
  if check_ner is None:
152
- subprocess.run(["pip", "install", "https://huggingface.co/a-menu/fr_arches/resolve/main/fr_arches-any-py3-none-any.whl"])
153
 
154
 
155
  # Cached to prevent computation on every rerun
@@ -166,17 +183,34 @@ def load_sentencizer():
166
  return senter
167
 
168
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169
  # Cached to prevent computation on every rerun
170
  @st.cache_resource
171
  def load_ner():
172
  """
173
- Loads our custom fr_arches trf ner model.
174
 
175
  :returns: loaded fr_arches model
176
  :rtype: spacy.lang.fr.French
177
  """
178
 
179
- ner = spacy.load("fr_arches")
180
  # To try to reduce memory usage
181
  config = {"attrs": {"tensor": None}}
182
  ner.add_pipe("doc_cleaner", config=config)
@@ -545,13 +579,25 @@ st.write("")
545
 
546
  def main():
547
 
548
- # Download our models
549
- download_sentencizer()
550
- download_ner()
551
 
552
- # Load our models
 
553
  senter = load_sentencizer()
554
- ner = load_ner()
 
 
 
 
 
 
 
 
 
 
 
 
 
555
 
556
  with st.expander("Au sujet des entités nommées recherchées"):
557
  st.markdown("**Les différents types d'entités sont :** \n\n- **CHRONOLOGIE :** utilisé pour les références chronologiques (\"Antiquité\", \"XIIe siècle\", \"200 av. n. ère\", etc.). \n- **MOBILIER :** utilisé pour le mobilier (\"os\", \"pot\", \"tuile\", etc.). \n- **STRUCTURE :** utilisé pour les structures archéologiques (\"fosse\", \"mur\", \"fossé\", \"foyer\", etc.). \n- **MATERIAU :** utilisé pour les matériaux (\"bronze\", \"dolérite\", \"terre cuite\", etc.). \n- **ID :** utilisé pour les identifiants de vestiges (\"4\" pour \"le fossé 4\" par exemple). \n- **TECHNIQUE_STYLE :** utilisé pour les mentions de techniques et styles de fabrication ou construction (\"taillé\", \"glaçuré\", \"en petit appareil\", etc.). \n- **DECOR :** utilisé pour les éléments de décor. \n- **ESPECE :** utilisé pour signaler les taxons et noms vernaculaires rencontrés dans le texte. \n- **EDIFICE :** utilisé pour les édifices et monuments nommés (\"église Saint-Paul\", \"pont du Gard\", etc.). \n- **PEUPLE_CULTURE :** utilisé pour les cultures et peuples évoqués (tribus gauloises, cultures préhistoriques, etc.). \n- **PERSONNE :** utilisé pour les noms de personnes (historiques, fictives, équipe scientifique, etc.). \n- **ORG :** utilisé pour les institutions, sociétés, laboratoires, universités, musées, archives, etc. \n- **GPE :** utilisé pour les entités géopolitiques (villes, départements, États, etc.). \n- **LOC :** utilisé pour les lieux non-GPE (lieux naturels par exemple). \n- **LIEUDIT_SITE :** utilisé pour les lieux-dits et noms de sites archéologiques.")
@@ -846,6 +892,7 @@ def main():
846
  mime="text/csv",
847
  )
848
 
 
849
  st.markdown("# ")
850
  st.markdown("# ")
851
 
 
91
 
92
  st.sidebar.markdown("Financé avec le soutien du [Fonds National pour la Science Ouverte](https://www.ouvrirlascience.fr/accueil/) et réalisé en collaboration avec l’infrastructure de recherche [Métopes](http://www.metopes.fr/) ([Université de Caen Normandie](https://www.unicaen.fr/) - [CNRS](https://www.cnrs.fr/fr)), [ARCHES](https://www.inrap.fr/arches-etude-composition-et-processus-pour-une-edition-structuree-des-rapports-d-17145) vise à explorer l’amélioration de la diffusion et de l’exploitation des rapports d’opération à l’aide du format de balisage XML-TEI, permettant d’encoder tant la structuration formelle que le contenu sémantique d’un document. Dans cette optique, vingt-et-un rapports de fouilles de l’Inrap ont été annotés pour entraîner un modèle de reconnaissance des entités nommées (représentant plus de 80 000 entités annotées). Cette application vise à tester la manipulation du modèle, tant avec des fichiers XML que texte brut.")
93
 
94
+ st.sidebar.markdown("Le corpus a été annoté à l'aide d'[INCEpTION](https://inception-project.github.io/), tandis que les modèles de [segmentation](https://huggingface.co/a-menu/fr_arches_sentencizer) et de reconnaissance des entités nommées ([avec](https://huggingface.co/a-menu/fr_arches_ner_trf) et [sans](https://huggingface.co/a-menu/fr_arches_ner) architecture transformer) ont été entraînés et évalués avec [spaCy](https://spacy.io/). Les modalités de [citation](https://huggingface.co/spaces/a-menu/arches_demo/blob/main/CITATION.cff) de l'application peuvent être retrouvées dans le [dépôt](https://huggingface.co/spaces/a-menu/arches_demo/tree/main) de celle-ci.")
95
 
96
  st.sidebar.write("")
97
 
 
135
  subprocess.run(["pip", "install", "https://huggingface.co/a-menu/fr_arches_sentencizer/resolve/main/fr_arches_sentencizer-any-py3-none-any.whl"])
136
 
137
 
138
+ # Cached to prevent computation on every rerun
139
+ @st.cache_resource
140
+ def download_ner_trf():
141
+ """
142
+ Downloads the fr_arches_ner_trf TRF NER model.
143
+
144
+ :returns: None
145
+ """
146
+
147
+ # Check if the model is already installed
148
+ # If not, install it
149
+ # Source : ice.nicer & Arthur, https://stackoverflow.com/a/41815890
150
+ check_ner_trf = importlib.util.find_spec("fr_arches_ner_trf")
151
+ if check_ner_trf is None:
152
+ subprocess.run(["pip", "install", "https://huggingface.co/a-menu/fr_arches_ner_trf/resolve/main/fr_arches_ner_trf-any-py3-none-any.whl"])
153
+
154
+
155
  # Cached to prevent computation on every rerun
156
  @st.cache_resource
157
  def download_ner():
158
  """
159
+ Downloads the fr_arches_ner NER model.
160
 
161
  :returns: None
162
  """
 
164
  # Check if the model is already installed
165
  # If not, install it
166
  # Source : ice.nicer & Arthur, https://stackoverflow.com/a/41815890
167
+ check_ner = importlib.util.find_spec("fr_arches_ner")
168
  if check_ner is None:
169
+ subprocess.run(["pip", "install", "https://huggingface.co/a-menu/fr_arches_ner/resolve/main/fr_arches_ner-any-py3-none-any.whl"])
170
 
171
 
172
  # Cached to prevent computation on every rerun
 
183
  return senter
184
 
185
 
186
+ # Cached to prevent computation on every rerun
187
+ @st.cache_resource
188
+ def load_ner_trf():
189
+ """
190
+ Loads our custom fr_arches_ner_trf trf ner model.
191
+
192
+ :returns: loaded fr_arches model
193
+ :rtype: spacy.lang.fr.French
194
+ """
195
+
196
+ ner = spacy.load("fr_arches_ner_trf")
197
+ # To try to reduce memory usage
198
+ config = {"attrs": {"tensor": None}}
199
+ ner.add_pipe("doc_cleaner", config=config)
200
+ return ner
201
+
202
+
203
  # Cached to prevent computation on every rerun
204
  @st.cache_resource
205
  def load_ner():
206
  """
207
+ Loads our custom fr_arches_ner ner model.
208
 
209
  :returns: loaded fr_arches model
210
  :rtype: spacy.lang.fr.French
211
  """
212
 
213
+ ner = spacy.load("fr_arches_ner")
214
  # To try to reduce memory usage
215
  config = {"attrs": {"tensor": None}}
216
  ner.add_pipe("doc_cleaner", config=config)
 
579
 
580
  def main():
581
 
582
+ # Download and load our models
 
 
583
 
584
+ # Sentencizer
585
+ download_sentencizer()
586
  senter = load_sentencizer()
587
+
588
+ # NER
589
+ # Choose which NER model you want
590
+ pick_model = st.radio("Quel modèle de reconnaissance d'entités nommmées souhaitez-vous utiliser ?", ("fr_arches_ner (plus léger en ressources mais moins efficace)", "fr_arches_ner_trf (plus lourd en ressources mais plus efficace, GPU conseillé)"))
591
+
592
+ st.write("")
593
+ st.write("")
594
+
595
+ if pick_model == "fr_arches_ner (plus léger en ressources mais moins efficace)":
596
+ download_ner()
597
+ ner = load_ner()
598
+ if pick_model == "fr_arches_ner_trf (plus lourd en ressources mais plus efficace, GPU conseillé)":
599
+ download_ner_trf()
600
+ ner = load_ner_trf()
601
 
602
  with st.expander("Au sujet des entités nommées recherchées"):
603
  st.markdown("**Les différents types d'entités sont :** \n\n- **CHRONOLOGIE :** utilisé pour les références chronologiques (\"Antiquité\", \"XIIe siècle\", \"200 av. n. ère\", etc.). \n- **MOBILIER :** utilisé pour le mobilier (\"os\", \"pot\", \"tuile\", etc.). \n- **STRUCTURE :** utilisé pour les structures archéologiques (\"fosse\", \"mur\", \"fossé\", \"foyer\", etc.). \n- **MATERIAU :** utilisé pour les matériaux (\"bronze\", \"dolérite\", \"terre cuite\", etc.). \n- **ID :** utilisé pour les identifiants de vestiges (\"4\" pour \"le fossé 4\" par exemple). \n- **TECHNIQUE_STYLE :** utilisé pour les mentions de techniques et styles de fabrication ou construction (\"taillé\", \"glaçuré\", \"en petit appareil\", etc.). \n- **DECOR :** utilisé pour les éléments de décor. \n- **ESPECE :** utilisé pour signaler les taxons et noms vernaculaires rencontrés dans le texte. \n- **EDIFICE :** utilisé pour les édifices et monuments nommés (\"église Saint-Paul\", \"pont du Gard\", etc.). \n- **PEUPLE_CULTURE :** utilisé pour les cultures et peuples évoqués (tribus gauloises, cultures préhistoriques, etc.). \n- **PERSONNE :** utilisé pour les noms de personnes (historiques, fictives, équipe scientifique, etc.). \n- **ORG :** utilisé pour les institutions, sociétés, laboratoires, universités, musées, archives, etc. \n- **GPE :** utilisé pour les entités géopolitiques (villes, départements, États, etc.). \n- **LOC :** utilisé pour les lieux non-GPE (lieux naturels par exemple). \n- **LIEUDIT_SITE :** utilisé pour les lieux-dits et noms de sites archéologiques.")
 
892
  mime="text/csv",
893
  )
894
 
895
+ # Add a "footer"
896
  st.markdown("# ")
897
  st.markdown("# ")
898