With intencionality

This commit is contained in:
Mario Gil 2023-10-06 00:42:06 -05:00
parent 3ddeacd83f
commit 1245cb22fe
3 changed files with 432 additions and 39 deletions

View File

@ -1,8 +1,7 @@
import gradio as gr import gradio as gr
from faiss import write_index, read_index from faiss import write_index, read_index
from typing import List
from langchain import PromptTemplate #from langchain import PromptTemplate
from langchain.chains import LLMChain
from langchain.document_loaders import TextLoader from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS from langchain.vectorstores import FAISS
@ -11,28 +10,85 @@ from langchain.document_loaders import UnstructuredFileLoader
from langchain.document_loaders.recursive_url_loader import RecursiveUrlLoader from langchain.document_loaders.recursive_url_loader import RecursiveUrlLoader
from langchain.document_loaders import UnstructuredURLLoader from langchain.document_loaders import UnstructuredURLLoader
from langchain.document_loaders.csv_loader import CSVLoader from langchain.document_loaders.csv_loader import CSVLoader
from langchain import LLMChain #from langchain import LLMChain
from langchain.llms import GPT4All from langchain.pydantic_v1 import BaseModel
from langchain.embeddings import GPT4AllEmbeddings from langchain.schema.embeddings import Embeddings
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.callbacks.base import BaseCallbackManager
from langchain.document_loaders import DataFrameLoader from langchain.document_loaders import DataFrameLoader
from langchain.embeddings import HuggingFaceEmbeddings from langchain.embeddings import HuggingFaceEmbeddings
import pandas as pd import pandas as pd
import sqlite3 import sqlite3
from sentence_transformers import SentenceTransformer from sentence_transformers import SentenceTransformer
from fastapi import FastAPI from fastapi import FastAPI
from unidecode import unidecode
from nltk.corpus import stopwords
#from cleantext import clean #from cleantext import clean
import re import re
model_name = 'hiiamsid/sentence_similarity_spanish_es'
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
hf = HuggingFaceEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs,
encode_kwargs=encode_kwargs
)
def loadmodelEmb(model_name = "embeddings/all-mpnet-base-v2",model_kwargs = {'device': 'cpu'}):
hf = HuggingFaceEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs
)
return hf
def remove_emoji(string):
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
u"\U00002702-\U000027B0"
u"\U000024C2-\U0001F251"
"]+", flags=re.UNICODE)
return emoji_pattern.sub(r' ', string)
def remove_unwanted(document,stopOk=False):
# remove user mentions
document = re.sub("@[A-Za-z0-9_]+"," ", document)
# remove URLS
document = re.sub(r'http\S+', ' ', document)
# remove hashtags
document = re.sub("#[A-Za-z0-9_]+","", document)
# remove emoji's
document = remove_emoji(document)
# remove punctuation
for sig in [".",",","!","¿","?","=","(",")"]:
document=document.replace(sig," ")
#document = re.sub("[^0-9A-Za-z ]", "" , document)
# remove double spaces
#print(document)
document=unidecode(document)
words=document.split(" ")
if stopOk:
stop_words = set(stopwords.words('spanish'))
words = [w for w in words if not w in stop_words]
document=" ".join(words)
document = document.replace(' ',"")
#print(document)
return document.strip().lower()
class CustomEmbedding(Embeddings, BaseModel):
"""embedding model with preprocessing"""
size=20
def _get_embedding(self,text) -> List[float]:
#print(text,"text")
text=remove_unwanted(text)
Sal=emb.embed_query(text)
return Sal
def embed_documents(self, texts: List[str]) -> List[List[float]]:
Sal=[]
for text in texts:
Sal.append(self._get_embedding(text))
return Sal
def embed_query(self, text: str) -> List[float]:
return self._get_embedding(text)
emb=loadmodelEmb()
CUSTOM_PATH = "/angela" CUSTOM_PATH = "/angela"
app = FastAPI() app = FastAPI()
@ -40,24 +96,15 @@ app = FastAPI()
def read_main(): def read_main():
return {"message": "This is your main app"} return {"message": "This is your main app"}
def loadModels():
#model = GPT4All("orca-mini-3b.ggmlv3.q4_0.bin")
callback_manager = BaseCallbackManager([StreamingStdOutCallbackHandler()])
llm = GPT4All(model="orca-mini-3b.ggmlv3.q4_0.bin",temp=0.1,streaming=True)#callback_manager=callback_manager, verbose=True,repeat_last_n=0
embeddings = GPT4AllEmbeddings()
return llm, embeddings
def loadCopysAndData(pathsqlite="motor.sqlite"): def loadCopysAndData(pathsqlite="motor.sqlite"):
con = sqlite3.connect(pathsqlite) con = sqlite3.connect(pathsqlite)
copies_df = pd.read_sql_query("SELECT * from copies", con) copies_df = pd.read_sql_query("SELECT * from copies", con)
copiesT = copies_df[copies_df.copy_start =="T"] copiesT = copies_df[copies_df.copy_start =="T"]
copiesT=copiesT[["copy_message","id","name"]] copiesT=copiesT[["copy_message","id","name","intencionality"]]
data = copiesT data = copiesT
print(data)
B=DataFrameLoader(data,page_content_column="copy_message") B=DataFrameLoader(data,page_content_column="copy_message")
B2=DataFrameLoader(data,page_content_column="name") B2=DataFrameLoader(data,page_content_column="intencionality")
documents=B.load() documents=B.load()
documents2=B2.load() documents2=B2.load()
return documents,documents2 return documents,documents2
@ -71,17 +118,20 @@ def makeFaissdb(documents,folder_path,embedding):
FAISS.save_local(db,folder_path=folder_path) FAISS.save_local(db,folder_path=folder_path)
return db return db
llm,emb=loadModels() #llm,emb=loadModels()
model="embeddings/all-mpnet-base-v2"
documents,documents2=loadCopysAndData() documents,documents2=loadCopysAndData()
emb=loadmodelEmb(model_name = model)
db=makeFaissdb(documents,"Copies",emb) emb2=CustomEmbedding()
db2=makeFaissdb(documents2,"names",emb) db=makeFaissdb(documents,"Copies3",emb2)
db3=makeFaissdb(documents2,"nameshf",hf) db2=makeFaissdb(documents2,"Intencionality3",emb2)
#db3=makeFaissdb(documents2,"nameshf",hf)
def FinderDbs(query,dbs,filtred=False,th=1.2): def FinderDbs(query,dbs,filtred=False,th=1.2):
AllData={} AllData={}
for dbt in dbs: for dbt in dbs:
Sal = dbt.similarity_search_with_score(query,4) Sal = dbt.similarity_search_with_score(query,4)
print(Sal)
for output in Sal: for output in Sal:
if output[0].metadata["id"] in AllData.keys(): if output[0].metadata["id"] in AllData.keys():
AllData[output[0].metadata["id"]]["d"]=min([AllData[output[0].metadata["id"]]["d"]-0.1,output[1]-0.1]) AllData[output[0].metadata["id"]]["d"]=min([AllData[output[0].metadata["id"]]["d"]-0.1,output[1]-0.1])

View File

@ -1,9 +1,290 @@
from langchain.document_loaders import DataFrameLoader
from langchain.embeddings import HuggingFaceEmbeddings from langchain.embeddings import HuggingFaceEmbeddings
df=HuggingFaceEmbeddings( from langchain.vectorstores import FAISS
model_name="embeddings/all-MiniLM-L6-v2" from langchain.pydantic_v1 import BaseModel
) from langchain.schema.embeddings import Embeddings
text = "This is a test document." from scipy.spatial import distance
from typing import List
import sqlite3
import pandas as pd
import shutil
import re
import numpy as np
import inspect
import time
from unidecode import unidecode
from nltk.corpus import stopwords
class CustomEmbedding(Embeddings, BaseModel):
"""embedding model with preprocessing"""
size=20
def _get_embedding(self,text) -> List[float]:
#print(text,"text")
text=remove_unwanted(text)
Sal=emb.embed_query(text)
return Sal
def embed_documents(self, texts: List[str]) -> List[List[float]]:
Sal=[]
for text in texts:
Sal.append(self._get_embedding(text))
query_result = df.embed_query(text) return Sal
print(query_result) def embed_query(self, text: str) -> List[float]:
return self._get_embedding(text)
def remove_emoji(string):
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
u"\U00002702-\U000027B0"
u"\U000024C2-\U0001F251"
"]+", flags=re.UNICODE)
return emoji_pattern.sub(r' ', string)
def remove_unwanted(document,stopOk=False):
# remove user mentions
document = re.sub("@[A-Za-z0-9_]+"," ", document)
# remove URLS
document = re.sub(r'http\S+', ' ', document)
# remove hashtags
document = re.sub("#[A-Za-z0-9_]+","", document)
# remove emoji's
document = remove_emoji(document)
# remove punctuation
for sig in [".",",","!","¿","?","=","(",")"]:
document=document.replace(sig," ")
#document = re.sub("[^0-9A-Za-z ]", "" , document)
# remove double spaces
#print(document)
document=unidecode(document)
words=document.split(" ")
if stopOk:
stop_words = set(stopwords.words('spanish'))
words = [w for w in words if not w in stop_words]
document=" ".join(words)
document = document.replace(' ',"")
#print(document)
return document.strip().lower()
def loadmodelEmb(model_name = "embeddings/all-MiniLM-L6-v2",model_kwargs = {'device': 'cpu'}):
hf = HuggingFaceEmbeddings(
model_name=model_name,
model_kwargs=model_kwargs
)
return hf
def loadCopysAndData(pathsqlite="motor.sqlite"):
con = sqlite3.connect(pathsqlite)
copies_df = pd.read_sql_query("SELECT * from copies", con)
copiesT = copies_df[copies_df.copy_start =="T"]
copiesT=copiesT[["copy_message","id","name"]]
data = copiesT
B=DataFrameLoader(data,page_content_column="copy_message")
B2=DataFrameLoader(data,page_content_column="name")
documents=B.load()
documents2=B2.load()
return documents,documents2
def makeFaissdb(documents,folder_path,embedding):
try:
shutil.rmtree(folder_path)
except:
pass
db = FAISS.from_documents(documents, embedding)
FAISS.save_local(db,folder_path=folder_path)
return [db,folder_path]
def FinderDbs(query,dbs,filtred=False,th=1.2):
AllData={}
for dbt in dbs:
Sal = dbt.similarity_search_with_score(query,4)
for output in Sal:
if output[0].metadata["id"] in AllData.keys():
AllData[output[0].metadata["id"]]["d"]=min([AllData[output[0].metadata["id"]]["d"]-0.1,output[1]-0.1])
else:
AllData[output[0].metadata["id"]]={"d":output[1],"page_content":output[0].page_content}
#for item in AllData.items():
# print(item)
if filtred:
filtredData={}
for row in AllData.keys():
if AllData[row]["d"]<1.2:
filtredData[row]=AllData[row]
filtredData=dict(sorted(filtredData.items(), key=lambda item: item[1]["d"]))
return filtredData,filtredData.keys()
else:
AllData=dict(sorted(AllData.items(), key=lambda item: item[1]["d"]))
return AllData,AllData.keys()
models=["all-MiniLM-L12-v2","paraphrase-MiniLM-L3-v2" , "all-MiniLM-L6-v2","all-mpnet-base-v2","multi-qa-mpnet-base-dot-v1"]
queries=["Quiero reportar un bacheo",
"reportar un bache en mi comunidad",
"¿Como reporto un bacheo en mi comunidad?",
"Quiero informar sobre un hoyo en la calle cerca de mi hogar.",
"Necesito reportar un bache en la vía cercana a mi residencia.",
"Estoy preocupado por un hueco en la carretera que está cerca de donde vivo.",
"Me gustaría notificar sobre un desnivel en la carretera en las inmediaciones de mi domicilio.",
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi casa.",
"Estoy interesado en denunciar una irregularidad en la calle cercana a mi vivienda.",
"Necesito dar aviso sobre un problema en la carretera próxima a mi residencia.",
"Estoy observando un inconveniente en la carretera cerca de donde vivo y quisiera reportarlo.",
"Me gustaría informar sobre un obstáculo en la vía que está cerca de mi casa.",
"Quiero señalar un desperfecto en la carretera cercana a mi hogar.",
"Necesito poner en conocimiento de las autoridades un bache en la calle adyacente a mi domicilio.",
"Estoy solicitando la atención de las autoridades viales para solucionar un problema en la vía cerca de mi vivienda.",
"Me gustaría expresar mi preocupación acerca de un bache en la carretera que está cerca de donde resido.",
"Quiero dejar constancia de un deterioro en la calle cercana a mi casa.",
"Estoy interesado en informar sobre un desperfecto vial en la carretera cercana a mi hogar.",
"Necesito notificar sobre un agujero en la carretera que conduce a mi residencia.",
"Me gustaría alertar sobre un bache en la vía cerca de mi hogar.",
"Quiero dar aviso sobre un desnivel en la calle próxima a mi vivienda.",
"Estoy buscando reportar un problema vial en la carretera cercana a mi casa.",
"Necesito informar sobre un obstáculo en la vía que está cerca de mi domicilio.",
"Me gustaría señalar una irregularidad en la carretera adyacente a mi residencia.",
"Quiero presentar una queja sobre un desperfecto en la calle cercana a mi hogar.",
"Estoy interesado en denunciar un socavón en la vía que conduce a mi casa.",
"Necesito notificar sobre un inconveniente en la carretera próxima a mi residencia.",
"Me gustaría informar sobre un deterioro en la carretera cerca de donde vivo.",
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi casa.",
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia."
]
# for model in models:
# emb=loadmodelEmb(model_name = model)
# emb2=CustomEmbedding()
# #print(inspect.getsource(HuggingFaceEmbeddings))
# documents,documents2=loadCopysAndData()
# db=makeFaissdb(documents,"TCopies",emb2)
# db2=makeFaissdb(documents2,"Tnames",emb2)
# for Fdb in [db,db2]:
# for query in queries:
# point=0
# AllData=FinderDbs(query,[Fdb[0]])
# print(model)
# print(Fdb[1])
# if 32 in AllData[1]:
# point+=1
# if 32 == list(AllData[1])[0]:
# point+=9
# print(AllData[1],point)
copies_text=["Saber sobre actividades culturales.",
"Saber sobre talleres.",
"Información sobre talleres de literatura.",
"Información sobre talleres de formación artistica.",
"Obtener la certificación de uso de suelos.",
"Reportar un bacheo.",
"Saber dónde pago un parquímetro.",
]
for model in models:
print(model)
print("""
""")
t=time.time()
for copy_text in copies_text:
emb=loadmodelEmb(model_name = model)
emb2=CustomEmbedding()
sal=[]
for query in queries:
sal.append(distance.cosine(emb2.embed_query(query),emb2.embed_query(copy_text)))
print(model,",",copy_text,",",np.mean(sal),",",np.std(sal),",",(time.time()-t)/len(queries))
{
"formas_de_reportar_bache": [
"Quiero informar sobre un hoyo en la calle cerca de mi hogar.",
"Necesito reportar un bache en la vía cercana a mi residencia.",
"Estoy preocupado por un hueco en la carretera que está cerca de donde vivo.",
"Me gustaría notificar sobre un desnivel en la carretera en las inmediaciones de mi domicilio.",
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi casa.",
"Estoy interesado en denunciar una irregularidad en la calle cercana a mi vivienda.",
"Necesito dar aviso sobre un problema en la carretera próxima a mi residencia.",
"Estoy observando un inconveniente en la carretera cerca de donde vivo y quisiera reportarlo.",
"Me gustaría informar sobre un obstáculo en la vía que está cerca de mi casa.",
"Quiero señalar un desperfecto en la carretera cercana a mi hogar.",
"Necesito poner en conocimiento de las autoridades un bache en la calle adyacente a mi domicilio.",
"Estoy solicitando la atención de las autoridades viales para solucionar un problema en la vía cerca de mi vivienda.",
"Me gustaría expresar mi preocupación acerca de un bache en la carretera que está cerca de donde resido.",
"Quiero dejar constancia de un deterioro en la calle cercana a mi casa.",
"Estoy interesado en informar sobre un desperfecto vial en la carretera cercana a mi hogar.",
"Necesito notificar sobre un agujero en la carretera que conduce a mi residencia.",
"Me gustaría alertar sobre un bache en la vía cerca de mi hogar.",
"Quiero dar aviso sobre un desnivel en la calle próxima a mi vivienda.",
"Estoy buscando reportar un problema vial en la carretera cercana a mi casa.",
"Necesito informar sobre un obstáculo en la vía que está cerca de mi domicilio.",
"Me gustaría señalar una irregularidad en la carretera adyacente a mi residencia.",
"Quiero presentar una queja sobre un desperfecto en la calle cercana a mi hogar.",
"Estoy interesado en denunciar un socavón en la vía que conduce a mi casa.",
"Necesito notificar sobre un inconveniente en la carretera próxima a mi residencia.",
"Me gustaría informar sobre un deterioro en la carretera cerca de donde vivo.",
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi casa.",
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia.",
"Me gustaría alertar sobre un agujero en la carretera cerca de mi hogar.",
"Quiero notificar sobre un desnivel en la calle adyacente a mi domicilio.",
"Estoy buscando reportar un desperfecto en la carretera que está cerca de mi casa.",
"Necesito dar aviso sobre un obstáculo en la vía próxima a mi hogar.",
"Me gustaría señalar una irregularidad en la carretera cercana a mi residencia.",
"Quiero presentar una queja sobre un socavón en la vía que conduce a mi residencia.",
"Estoy interesado en denunciar un inconveniente en la carretera próxima a mi casa.",
"Necesito informar sobre un deterioro en la carretera cerca de donde vivo.",
"Quiero expresar mi preocupación acerca de un bache en la calle que está cerca de mi domicilio.",
"Estoy solicitando la atención de las autoridades para solucionar un problema vial en las inmediaciones de mi vivienda.",
"Necesito poner en conocimiento de las autoridades competentes un bache en la vía cercana a mi residencia."
]
}

View File

@ -11,3 +11,65 @@ for model in models:
# Save the model # Save the model
modelST.save(save_path) modelST.save(save_path)
# all-MiniLM-L12-v2
# all-MiniLM-L12-v2 Saber sobre actividades culturales. 0.6535751457769086 0.05863175772626888 0.12278595510518776
# all-MiniLM-L12-v2 Saber sobre talleres. 0.751629503845477 0.05310761464124975 0.1831973003891279
# all-MiniLM-L12-v2 Información sobre talleres de literatura. 0.7224854452006415 0.05215076573219591 0.2247900827875677
# all-MiniLM-L12-v2 Información sobre talleres de formación artistica. 0.7008979606232822 0.03950918605037314 0.2588270430294973
# all-MiniLM-L12-v2 Obtener la certificación de uso de suelos. 0.6363654116990891 0.06126748264989437 0.2990496653430867
# all-MiniLM-L12-v2 Reportar un bacheo. 0.5974184966305134 0.14056650047761457 0.33133007445425355
# all-MiniLM-L12-v2 Saber dónde pago un parquímetro. 0.7286070458224445 0.04967551271473011 0.36476032688932597
# paraphrase-MiniLM-L3-v2
# paraphrase-MiniLM-L3-v2 Saber sobre actividades culturales. 0.7366279968758482 0.08893400433814432 0.011976916834993183
# paraphrase-MiniLM-L3-v2 Saber sobre talleres. 0.8040920436803051 0.07181478379134668 0.02360300747853405
# paraphrase-MiniLM-L3-v2 Información sobre talleres de literatura. 0.7437334052301269 0.04553266191552214 0.036959598649222894
# paraphrase-MiniLM-L3-v2 Información sobre talleres de formación artistica. 0.743870036748493 0.06526662723048463 0.05061841460893739
# paraphrase-MiniLM-L3-v2 Obtener la certificación de uso de suelos. 0.7717547355774438 0.06484008413761407 0.062440363865978316
# paraphrase-MiniLM-L3-v2 Reportar un bacheo. 0.6655234266285941 0.12495720849140243 0.0751793069659539
# paraphrase-MiniLM-L3-v2 Saber dónde pago un parquímetro. 0.7348896817507707 0.04065274263873351 0.09146604897840968
# all-MiniLM-L6-v2
# all-MiniLM-L6-v2 Saber sobre actividades culturales. 0.5873976949286881 0.054536409831093556 0.02166009399126161
# all-MiniLM-L6-v2 Saber sobre talleres. 0.705393021384429 0.06415187629245482 0.040732748103591634
# all-MiniLM-L6-v2 Información sobre talleres de literatura. 0.602608386747181 0.054022995767296696 0.06001406345727309
# all-MiniLM-L6-v2 Información sobre talleres de formación artistica. 0.6445745034623189 0.05229467148751577 0.07957683869127957
# all-MiniLM-L6-v2 Obtener la certificación de uso de suelos. 0.5708618561256799 0.0394827821548067 0.09872836436865465
# all-MiniLM-L6-v2 Reportar un bacheo. 0.5741872079555271 0.13503311454160494 0.11794944529263478
# all-MiniLM-L6-v2 Saber dónde pago un parquímetro. 0.6594361733956011 0.056983523732601314 0.13696542775855874
# all-mpnet-base-v2
# all-mpnet-base-v2 Saber sobre actividades culturales. 0.5534035540829121 0.06890411125329764 0.08799683372929411
# all-mpnet-base-v2 Saber sobre talleres. 0.6346356305674484 0.05816374415416716 0.2692093669243579
# all-mpnet-base-v2 Información sobre talleres de literatura. 0.733400957902919 0.062002638662933096 0.4069641581121481
# all-mpnet-base-v2 Información sobre talleres de formación artistica. 0.7403190712146518 0.06573001180535122 0.5049155163315108
# all-mpnet-base-v2 Obtener la certificación de uso de suelos. 0.5057200806006308 0.040962860644441684 0.5848623266759908
# all-mpnet-base-v2 Reportar un bacheo. 0.4282261685120943 0.1256224113877856 0.6733528038240829
# all-mpnet-base-v2 Saber dónde pago un parquímetro. 0.5096540066521769 0.06542826690229307 0.7576164344571671
# multi-qa-mpnet-base-dot-v1
# multi-qa-mpnet-base-dot-v1 Saber sobre actividades culturales. 0.5412514848207511 0.049426306929690425 0.08471853328201007
# multi-qa-mpnet-base-dot-v1 Saber sobre talleres. 0.6004619942650676 0.04068730180147856 0.19998745198519724
# multi-qa-mpnet-base-dot-v1 Información sobre talleres de literatura. 0.5422846411740877 0.035149354259768846 0.3127848022388962
# multi-qa-mpnet-base-dot-v1 Información sobre talleres de formación artistica. 0.5810213727598411 0.033041479673933366 0.3915549134308437
# multi-qa-mpnet-base-dot-v1 Obtener la certificación de uso de suelos. 0.5171735715348054 0.029578046799246076 0.4764851579126322
# multi-qa-mpnet-base-dot-v1 Reportar un bacheo. 0.4249011819077356 0.12119208621320086 0.559126246650264
# multi-qa-mpnet-base-dot-v1 Saber dónde pago un parquímetro. 0.49335939772807463 0.047415340138656205 0.65184190138331