Este artículo describe cómo usar incrustaciones de palabras preentrenadas para medir la similitud del documento y realizar una búsqueda de similitud semántica. Primero, recibe una introducción sobre las ventajas y los diferentes casos de uso de las incrustaciones. Finalmente, le presentaré un marco que puede usar para la búsqueda de similitud semántica. Al final encontrarás un fragmento para construir tu propio consultas de búsqueda similares como en la imagen de abajo.
¿Qué son las incrustaciones?
Las incrustaciones son una técnica avanzada de PNL que supera a los métodos tradicionales como TF/IDF. Las incrustaciones de palabras son una forma de representar palabras como vectores de números en un espacio de alta dimensión. Estos vectores capturan el significado y el contexto de una palabra de una manera que les permite usarse como entrada para modelos de aprendizaje automático. La siguiente imagen muestra una representación simple de incrustaciones:
Ventajas sobre métodos tradicionales como TF-IDF:
También te puede interesarTrabajar con codificadores automáticos variacionales parte 4 (aprendizaje automático)¿Qué se puede hacer con las incrustaciones?
Cómo usar incrustaciones preentrenadas:
Hay varias fuentes de incrustaciones de palabras previamente entrenadas que puede usar en sus proyectos. Estos son algunos de los más populares:
Es importante tener en cuenta que las incrustaciones preentrenadas se entrenan en diferentes corpus y con diferentes arquitecturas, por lo que es mejor usar la que mejor se adapte a su tarea.
También te puede interesarWebGPT: mejora de la precisión fáctica de los modelos lingüísticos a través de la navegación webfrom sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('all-MiniLM-L6-v2')# Two lists of sentences
sentences1 = ['The cat sits outside',
'A man is playing guitar',
'The new movie is awesome']
sentences2 = ['The dog plays in the garden',
'A woman watches TV',
'The new movie is so great']
#Compute embedding for both lists
embeddings1 = model.encode(sentences1, convert_to_tensor=True)
embeddings2 = model.encode(sentences2, convert_to_tensor=True)
#Compute cosine-similarities
cosine_scores = util.cos_sim(embeddings1, embeddings2)
También te puede interesarTrabajar con codificadores automáticos variacionales, parte 3 (aprendizaje automático)#Output the pairs with their score
for i in range(len(sentences1)):
print("{} tt {} tt Score: {:.4f}".format(sentences1[i], sentences2[i], cosine_scores[i][i]))
Output:
The cat sits outside The dog plays in the garden Score: 0.2838
A man is playing guitar A woman watches TV Score: -0.0327
The new movie is awesome The new movie is so great Score: 0.8939
Búsqueda semántica para mostrar consultas de búsqueda similares.
from sentence_transformers import SentenceTransformer, util
import torchembedder = SentenceTransformer('all-MiniLM-L6-v2')
# Corpus with example sentences
corpus = ['is tiktok getting banned.',
'is tiktok shutting down.',
'is tiktok banned in us.',
'is tiktok getting deleted.',
'is tiktok a competitor for instagram.',
'is instagram a useful app',
'something unrelevant'
]
corpus_embeddings = embedder.encode(corpus, convert_to_tensor=True)
También te puede interesar¿Cuáles son las reglas de derechos de autor relacionadas con AI Art?# Query sentences:
queries = ['is tiktok']
# Find the closest 5 sentences of the corpus for each query sentence based on cosine similarity
top_k = min(7, len(corpus))
for query in queries:
query_embedding = embedder.encode(query, convert_to_tensor=True)
# We use cosine-similarity and torch.topk to find the highest 5 scores
cos_scores = util.cos_sim(query_embedding, corpus_embeddings)[0]
top_results = torch.topk(cos_scores, k=top_k)
print("nn======================nn")
print("Query:", query)
print("nTop 5 most similar sentences in corpus:")
for score, idx in zip(top_results[0], top_results[1]):
print(corpus[idx], "(Score: {:.4f})".format(score))
Output:Query: is tiktok
Top 5 most similar sentences in corpus:
is tiktok banned in us. (Score: 0.7735)
is tiktok getting banned. (Score: 0.7716)
is tiktok getting deleted. (Score: 0.7651)
is tiktok a competitor for instagram. (Score: 0.7560)
is tiktok shutting down. (Score: 0.7308)
is instagram a useful app (Score: 0.1481)
something unrelevant (Score: 0.0925)
Deja un comentario si tienes alguna duda, recomendación o algo que no te quede claro e intentaré responderte lo antes posible.