Spaces:
Sleeping
Sleeping
Alexander CARNET commited on
Commit ·
3a4bca3
1
Parent(s): a90d223
ajout d'une nouvelle api qui rends plusieurs vecteur en fonction d'etiquettes données et d'une phrase
Browse files- app.py +33 -5
- requirements.txt +2 -1
app.py
CHANGED
|
@@ -1,18 +1,46 @@
|
|
| 1 |
from fastapi import FastAPI
|
| 2 |
from sentence_transformers import SentenceTransformer
|
|
|
|
| 3 |
from pydantic import BaseModel
|
|
|
|
| 4 |
import uvicorn
|
| 5 |
|
| 6 |
app = FastAPI()
|
| 7 |
|
| 8 |
class TextRequest(BaseModel):
|
| 9 |
-
text
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
@app.post("/vecteur")
|
| 15 |
def creat_vector(data: TextRequest):
|
| 16 |
-
vecteur =
|
| 17 |
print(f"Taille vecteur envoyé : {len(vecteur)}")
|
| 18 |
-
return {"vecteur":vecteur}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
from fastapi import FastAPI
|
| 2 |
from sentence_transformers import SentenceTransformer
|
| 3 |
+
from gliner import GLiNER
|
| 4 |
from pydantic import BaseModel
|
| 5 |
+
from typing import List
|
| 6 |
import uvicorn
|
| 7 |
|
| 8 |
app = FastAPI()
|
| 9 |
|
| 10 |
class TextRequest(BaseModel):
|
| 11 |
+
text: str
|
| 12 |
|
| 13 |
+
class TextRequestAvecEtiquettes(BaseModel):
|
| 14 |
+
text: str
|
| 15 |
+
etiquettes: List[str]
|
| 16 |
+
|
| 17 |
+
# Chargement des modèles IA
|
| 18 |
+
modele_sbert = SentenceTransformer('dangvantuan/sentence-camembert-base')
|
| 19 |
+
modele_gliner = GLiNER.from_pretrained("urchade/gliner_medium-v2.1")
|
| 20 |
|
| 21 |
@app.post("/vecteur")
|
| 22 |
def creat_vector(data: TextRequest):
|
| 23 |
+
vecteur = modele_sbert.encode(data.text).tolist()
|
| 24 |
print(f"Taille vecteur envoyé : {len(vecteur)}")
|
| 25 |
+
return {"vecteur": vecteur}
|
| 26 |
+
|
| 27 |
+
@app.post("/vecteurs")
|
| 28 |
+
def creat_vectors(data: TextRequestAvecEtiquettes):
|
| 29 |
+
# Extraction des entités par étiquette via GLiNER
|
| 30 |
+
entites = modele_gliner.predict_entities(data.text, data.etiquettes)
|
| 31 |
+
|
| 32 |
+
# Regroupement des textes extraits par étiquette
|
| 33 |
+
entites_par_etiquette: dict[str, List[str]] = {}
|
| 34 |
+
for entite in entites:
|
| 35 |
+
label = entite["label"]
|
| 36 |
+
texte = entite["text"]
|
| 37 |
+
entites_par_etiquette.setdefault(label, []).append(texte)
|
| 38 |
+
|
| 39 |
+
# Génération d'un vecteur SBERT par étiquette
|
| 40 |
+
resultat = {}
|
| 41 |
+
for label, textes in entites_par_etiquette.items():
|
| 42 |
+
vecteur = modele_sbert.encode(" ".join(textes)).tolist()
|
| 43 |
+
resultat[label] = vecteur
|
| 44 |
+
print(f"Étiquette '{label}' : {len(textes)} entité(s), taille vecteur : {len(vecteur)}")
|
| 45 |
+
|
| 46 |
+
return resultat
|
requirements.txt
CHANGED
|
@@ -1,4 +1,5 @@
|
|
| 1 |
fastapi
|
| 2 |
uvicorn
|
| 3 |
sentence-transformers
|
| 4 |
-
pydantic
|
|
|
|
|
|
| 1 |
fastapi
|
| 2 |
uvicorn
|
| 3 |
sentence-transformers
|
| 4 |
+
pydantic
|
| 5 |
+
gliner
|