Spaces:
Sleeping
Sleeping
user can now pick between two ner models
Browse files
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
|
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
|
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("
|
151 |
if check_ner is None:
|
152 |
-
subprocess.run(["pip", "install", "https://huggingface.co/a-menu/
|
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
|
174 |
|
175 |
:returns: loaded fr_arches model
|
176 |
:rtype: spacy.lang.fr.French
|
177 |
"""
|
178 |
|
179 |
-
ner = spacy.load("
|
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 |
-
#
|
|
|
553 |
senter = load_sentencizer()
|
554 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|