Model |
Dimension |
Max token |
Knowledge cutoff |
Pricing ($/1k tokens) |
MIRACL average |
MTEB average |
ada v2 |
1536 |
8191 |
September 2021 |
0.0001 |
31.4 |
61.0 |
text-embedding-3-small |
0.00002 |
44.0 |
62.3 |
text-embedding-3-large |
3072 |
0.00013 |
54.9 |
64.6 |
Modèle | dimension | Token max | Couper les connaissances | ($ / 1K Tokens) | MIRACL Moyenne | MTEB Moyenne |
Ada V2 | 1536 | 8191 | Septembre 2021 | 0.0001 | 31.4 | 61.0 |
text-embedding-3-small | 0.00002 | 44.0 | 6 2.3 |
text-embedding-3-Large | 3072 | 0.00013 | 54.9 | 64.6 |
Dimensions plus élevées dans text-embedding-3-large
(3072 vs 1536) améliorent les performances mais augmentent le coût. La sélection du modèle dépend des exigences des tâches (besoins multilingues, complexité du texte, budget). text-embedding-3-large
excelle dans les scénarios multilingues complexes, tandis que text-embedding-3-small
convient aux applications soucieuses du budget.
Applications
Les deux modèles trouvent diverses applications:
text-embedding-3-large
Applications:
Applications de Text-Embedding-3-GARD (Images générées à l'aide de GPT-4)
- Automatisation du support client multilingue (18 langues)
- Moteurs de recherche sémantique avancés
- Systèmes de recommandation de contenu inter-flingue
text-embedding-3-small
Applications:
Applications de Text-Embedding-3-Small (image générée à l'aide de GPT-4)
- Analyse des sentiments rentable
- Catégorisation de contenu évolutif
- Outils d'apprentissage des langues efficaces
Guide étape par étape: similitude du document
Ce guide utilise l'ensemble de données Cord-19 (disponible sur Kaggle) pour démontrer la similitude des documents à l'aide des trois modèles. Installez les bibliothèques nécessaires:
pip -q install tiktoken openai
Copier après la connexion
Importer des bibliothèques:
import os
import tiktoken
import numpy as np
import pandas as pd
from openai import OpenAI
from sklearn.metrics.pairwise import cosine_similarity
Copier après la connexion
Données de chargement et de prétraitement (un échantillon de 1000 documents est utilisé pour la concision):
scientific_docs = pd.read_parquet("./data/cord19_df_sample.parquet")
def concatenate_columns_with_null_handling(df, body_text_column, abstract_column, title_column, new_col_name):
df[new_col_name] = df[body_text_column].fillna('') + df[abstract_column].fillna('') + df[title_column].fillna('')
return df
new_scientific_docs = concatenate_columns_with_null_handling(scientific_docs, "body_text", "abstract", "title", "concatenated_text")
def num_tokens_from_text(text: str, encoding_name="cl100k_base"):
encoding = tiktoken.get_encoding(encoding_name)
num_tokens = len(encoding.encode(text))
return num_tokens
new_scientific_docs['num_tokens'] = new_scientific_docs["concatenated_text"].apply(lambda x: num_tokens_from_text(x))
smaller_tokens_docs = new_scientific_docs[new_scientific_docs['num_tokens'] <= 8191]
smaller_tokens_docs_reset = smaller_tokens_docs.reset_index(drop=True)
Copier après la connexion
Définissez la touche API Openai et créez un client:
os.environ["OPENAI_API_KEY"] = "YOUR KEY"
client = OpenAI()
Copier après la connexion
Générer des intégres:
def get_embedding(text_to_embbed, model_ID):
text = text_to_embbed.replace("\n", " ")
return client.embeddings.create(input=[text_to_embbed], model=model_ID).data[0].embedding
smaller_tokens_docs_reset['text-embedding-3-small'] = smaller_tokens_docs_reset["concatenated_text"].apply(lambda x: get_embedding(x, "text-embedding-3-small"))
smaller_tokens_docs_reset['text-embedding-3-large'] = smaller_tokens_docs_reset["concatenated_text"].apply(lambda x: get_embedding(x, "text-embedding-3-large"))
smaller_tokens_docs_reset['text-embedding-ada-002'] = smaller_tokens_docs_reset["concatenated_text"].apply(lambda x: get_embedding(x, "text-embedding-ada-002"))
Copier après la connexion
Trouver des documents similaires en utilisant la similitude du cosinus:
def find_top_N_similar_documents(df, chosen_index, embedding_column_name, top_N=3):
chosen_document_embedding = np.array(df.iloc[chosen_index][embedding_column_name]).reshape(1, -1)
embedding_matrix = np.vstack(df[embedding_column_name])
similarity_scores = cosine_similarity(chosen_document_embedding, embedding_matrix)[0]
df_temp = df.copy()
df_temp['similarity_to_chosen'] = similarity_scores
similar_documents = df_temp.drop(index=chosen_index).sort_values(by='similarity_to_chosen', ascending=False)
top_N_similar = similar_documents.head(top_N)
return top_N_similar[["concatenated_text", 'similarity_to_chosen']]
chosen_index = 0
top_3_similar_3_small = find_top_N_similar_documents(smaller_tokens_docs_reset, chosen_index, "text-embedding-3-small")
top_3_similar_3_large = find_top_N_similar_documents(smaller_tokens_docs_reset, chosen_index, "text-embedding-3-large")
top_3_similar_ada_002 = find_top_N_similar_documents(smaller_tokens_docs_reset, chosen_index, "text-embedding-ada-002")
print("Top 3 Similar Documents with:")
print("--> text-embedding-3-small")
print(top_3_similar_3_small)
print("\n")
print("--> text-embedding-3-large")
print(top_3_similar_3_large)
print("\n")
print("--> text-embedding-ada-002")
print(top_3_similar_ada_002)
print("\n")
Copier après la connexion
Conclusion
Les nouveaux modèles d'intégration d'Openai offrent des améliorations substantielles dans la PNL. Le choix entre text-embedding-3-large
et text-embedding-3-small
dépend des besoins spécifiques de l'application, de la précision et du coût de l'équilibre. Ce guide fournit les outils pour utiliser efficacement ces modèles puissants dans divers projets. D'autres ressources sur l'API OpenAI et un réglage fin sont disponibles.