Peut-on utiliser tiktoken à la place de text-embedding-ada-002 pour générer des embeddings textuels pour Azure AI Search ?

Je tokenise actuellement des documents avec text-embedding-ada-002 sur Azure. Le contenu des documents et leurs tokens sont téléversés vers Azure AI Search. Nous utilisons ensuite un déploiement gpt-35-turbo-16k pour effectuer des recherches dans ces documents (avec cette API : https://learn.microsoft.com/en-us/azure/ai-services/openai/reference?WT.mc_id=AZ-MVP-5004796#example-request-3).

Pour réduire les coûts opérationnels et contourner les problèmes de limitation de débit, pouvons-nous utiliser tiktoken à la place de text-embedding-ada-002 pour générer les embeddings textuels ? Les vecteurs seront-ils suffisamment similaires pour être utilisés de manière interchangeable, ou les vecteurs produits sont-ils fondamentalement incompatibles avec notre usage, à savoir Azure AI Search ?

Les documents que nous téléversons sont en texte brut, si cela a de l’importance.


Source : Stack Overflow.)

Excellente question ! J’ai essayé en écrivant du code et j’ai généré les tokens en utilisant à la fois Tiktoken et le SDK Azure OpenAI. Malheureusement, les résultats sont différents, donc la réponse est non. Vous ne pouvez pas utiliser Tiktoken pour générer les embeddings.

Voici mon code d’exemple :

using Azure;
using Azure.AI.OpenAI;
using Tiktoken;

var stringToEncode =
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

var encoder = Tiktoken.Encoding.TryForModel("text-embedding-ada-002");
var data1 = encoder!.Encode(stringToEncode);//produced a 96 element array.

var openAIClient = new OpenAIClient(new Uri("https://xyz.openai.azure.com/"), new AzureKeyCredential("my-azure-openai-key"));
var embeddings = openAIClient.GetEmbeddings(new EmbeddingsOptions()
{
    DeploymentName = "text-embedding-ada-002",
    Input = { stringToEncode }
});
var data2 = embeddings.Value.Data[0].Embedding;//produced a 1536 element array.
Console.WriteLine($"Data 1 length: {data1.Count}; Data 2 length: {data2.Length}");