Tous les produits
Search
Centre de documentation

Alibaba Cloud Model Studio:Embedding

Dernière mise à jour :Sep 07, 2026

Les modèles d'embedding transforment des données telles que du texte, des images et des vidéos en vecteurs. Ces vecteurs alimentent ensuite diverses tâches comme la recherche sémantique, la recommandation, le clustering, la classification ou la détection d'anomalies.

Prérequis

Obtenir une clé API et exporter cette clé API dans une variable d'environnement. Si vous utilisez le SDK OpenAI ou le SDK DashScope pour effectuer vos appels, installez le SDK.

Obtenir des embeddings

Embedding de texte

Pour envoyer une requête API, spécifiez le texte à transformer en embedding ainsi que le modèle à utiliser.

API compatible OpenAI

import os
from openai import OpenAI

input_text = "The quality of the clothes is excellent"

client = OpenAI(
    # API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # If you have not set an environment variable, replace this with your API key.
    # This is the URL for the Singapore region. Replace {WorkspaceId} with your workspace ID.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.embeddings.create(
    model="text-embedding-v4",
    input=input_text
)

print(completion.model_dump_json())
const OpenAI = require("openai");

// Initialize the OpenAI client.
const openai = new OpenAI({
    // If you have not set an environment variable, replace this with your API key.
    // API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
    apiKey: process.env.DASHSCOPE_API_KEY,
    // This is the URL for the Singapore region. Replace {WorkspaceId} with your workspace ID.
    baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1'
});

async function getEmbedding() {
    try {
        const inputTexts = "The quality of the clothes is excellent";
        const completion = await openai.embeddings.create({
            model: "text-embedding-v4",
            input: inputTexts,
            dimensions: 1024 // Specify the vector dimension. This parameter is only supported by text-embedding-v3 and text-embedding-v4.
        });

        console.log(JSON.stringify(completion, null, 2));
    } catch (error) {
        console.error('Error:', error);
    }
}

getEmbedding();
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/embeddings' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v4",
    "input": "The quality of the clothes is excellent"
}'

DashScope

import dashscope
from http import HTTPStatus

# If you use a model in the China (Beijing) region, replace base_url with: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

input_text = "The quality of the clothes is excellent"
resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input=input_text,
)

if resp.status_code == HTTPStatus.OK:
    print(resp)
import com.alibaba.dashscope.embeddings.TextEmbedding;
import com.alibaba.dashscope.embeddings.TextEmbeddingParam;
import com.alibaba.dashscope.embeddings.TextEmbeddingResult;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;

import java.util.Collections;
public class Main {
    static {
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // If you are using the China (Beijing) region, replace the URL with: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
    }
     public static void main(String[] args) {
        String inputTexts = "The quality of the clothes is excellent";
        try {
            // Build the request parameters.
            TextEmbeddingParam param = TextEmbeddingParam
                    .builder()
                    .model("text-embedding-v4")
                    // Input text.
                    .texts(Collections.singleton(inputTexts))
                    .build();

            // Create a model instance and make a call.
            TextEmbedding textEmbedding = new TextEmbedding();
            TextEmbeddingResult result = textEmbedding.call(param);

            // Print the result.
            System.out.println(result);

        } catch (NoApiKeyException e) {
            // Catch and handle the exception for a missing API key.
            System.err.println("An exception occurred during the API call: " + e.getMessage());
            System.err.println("Please check if your API key is configured correctly.");
            e.printStackTrace();
        }
    }
}
# ======= Important =======
# If you use a model in the China (Beijing) region, replace base_url with: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding
# === Remove this comment before running ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "text-embedding-v4",
    "input": {
        "texts": [
        "The quality of the clothes is excellent"
        ]
    }
}'

Vecteurs multimodaux indépendants

Vous pouvez générer des vecteurs distincts pour différents types de contenu, tels que du texte, des images ou des vidéos. Cette approche facilite le traitement individuel de chaque type de contenu.

Pour produire des vecteurs multimodaux indépendants, utilisez le SDK DashScope ou appelez directement l'API. Cette fonctionnalité n'est disponible ni via l'API compatible OpenAI, ni dans la console.

import dashscope
import json
import os
from http import HTTPStatus

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# The URL above is for the Singapore region. If you use a model in the Beijing region, replace base_url with: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1

# The input can be a video.
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4"
# input = [{'video': video}]
# Or an image.
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
input = [{'image': image}]
resp = dashscope.MultiModalEmbedding.call(
    # If you have not set an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
    # API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="tongyi-embedding-vision-plus",
    input=input
)

print(json.dumps(resp.output, indent=4))
import com.alibaba.dashscope.embeddings.MultiModalEmbedding;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemImage;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemVideo;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingParam;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

import java.util.Collections;

public class Main {
    static {
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        // If you are using the China (Beijing) region, replace the URL with: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
    }
    public static void main(String[] args) {
        try {
            MultiModalEmbedding embedding = new MultiModalEmbedding();
            // The input can be a video.
            // MultiModalEmbeddingItemVideo video = new MultiModalEmbeddingItemVideo(
            //     "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4");
            // Or an image.
            MultiModalEmbeddingItemImage image = new MultiModalEmbeddingItemImage(
                "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png");

            MultiModalEmbeddingParam param = MultiModalEmbeddingParam.builder()
                // If you have not set an environment variable, add your Model Studio API key by using .apiKey("sk-xxx")
                .model("tongyi-embedding-vision-plus")
                .contents(Collections.singletonList(image))
                .build();

            MultiModalEmbeddingResult result = embedding.call(param);
            System.out.println(result);

        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.err.println("An exception occurred during the API call: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Vecteurs multimodaux fusionnés

Vous pouvez combiner plusieurs modalités (texte, image, vidéo) au sein d'un unique vecteur fusionné. Cela permet des applications telles que la recherche d'image par texte, la recherche d'image par image, la recherche de vidéo par texte ou la récupération intermodale.

La génération de vecteurs multimodaux fusionnés nécessite le SDK Python DashScope ou un appel direct à l'API. Ni l'API compatible OpenAI, ni le SDK Java DashScope, ni la console ne prennent en charge cette fonctionnalité.

  • qwen3-vl-embedding : permet de générer aussi bien des vecteurs fusionnés qu'indépendants. Pour obtenir un vecteur fusionné, définissez le paramètre booléen enable_fusion sur true.
  • qwen2.5-vl-embedding : prend uniquement en charge les embeddings fusionnés, à l'exclusion des embeddings indépendants.
import dashscope
import json
import os
from http import HTTPStatus
# The following configuration is for the China (Beijing) region. When making the call, replace {WorkspaceId} with your actual workspace ID. Configurations are region-specific.
dashscope.base_http_api_url = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1"

# Multimodal fused vector: Combines text, images, and videos into a single fused vector.
# Suitable for use cases like cross-modal retrieval and image search.
text = "This is a test text for generating a multimodal fused vector"
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4"

# The input contains text, an image, and a video. A fused vector is generated by setting the enable_fusion parameter.
input_data = [
    {"text": text},
    {"image": image},
    {"video": video}
]

# Use qwen3-vl-embedding to generate a fused vector.
resp = dashscope.MultiModalEmbedding.call(
    # If you have not set an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-vl-embedding",
    input=input_data,
    enable_fusion=True,
    # Optional parameter: Specifies the vector dimension. Supported values: 2560, 2048, 1536, 1024, 768, 512, and 256. Default: 2560.
    # dimension = 1024
)

print(json.dumps(resp.output, indent=4))
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        // If you have not set an environment variable, replace the following line with your Model Studio API key: String apiKey = "sk-xxx";
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        // Use enable_fusion to combine text, an image, and a video into a single fused vector.
        String requestBody = "{"
                + "\"model\": \"qwen3-vl-embedding\","
                + "\"input\": {"
                + "  \"contents\": ["
                + "    {\"text\": \"This is a test text for generating a multimodal fused vector\"},"
                + "    {\"image\": \"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png\"},"
                + "    {\"video\": \"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20250107/lbcemt/new+video.mp4\"}"
                + "  ]"
                + "},"
                + "\"parameters\": {"
                + "  \"enable_fusion\": true"
                + "}"
                + "}";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/embeddings/multimodal-embedding/multimodal-embedding"))
                .header("Authorization", "Bearer " + apiKey)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

Choix du modèle

Sélectionnez le modèle approprié selon le type de données d'entrée et votre cas d'usage.

  • Traitement de texte brut ou de code : privilégiez text-embedding-v4. Ce modèle offre les meilleures performances et intègre des fonctionnalités avancées telles que les instructions de tâche et les vecteurs creux, couvrant ainsi la majorité des besoins en traitement de texte.

  • Traitement de contenu multimodal :

    • Embedding fusionné : pour représenter des entrées unimodales ou mixtes sous forme d'embedding unique, utile notamment pour la récupération intermodale et la recherche d'image, optez pour qwen3-vl-embedding. Par exemple, vous pouvez soumettre l'image d'une chemise accompagnée de la consigne « trouver un style similaire mais plus jeune », et le modèle fusionnera l'image avec l'instruction en un seul embedding pour le traitement.
    • Embedding indépendant : lorsque chaque partie de l'entrée (par exemple une image et sa légende textuelle) doit produire son propre embedding, utilisez tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, ou le modèle multimodal généraliste multimodal-embedding-v1.
  • Traitement de données à grande échelle : pour traiter d'importants volumes de textes hors temps réel, combinez text-embedding-v4 avec l'API batch compatible OpenAI afin de réduire considérablement les coûts.

Le tableau suivant détaille les spécifications de tous les modèles d'embedding disponibles.

Embedding de texte

Pékin

Nom du modèleDimensions de l'embeddingTaille du lot

Tokens max par lot (Note)

Prix / 1 M tokensLangue

text-embedding-v4

Fait partie de la série Qwen3-Embedding

2 048, 1 536, 1 024 (par défaut), 768, 512, 256, 128, 64

10

8 192

0,072 $

Plus de 100 langues majeures, dont le chinois, l'anglais, l'espagnol, le français, le portugais, l'indonésien, le japonais, le coréen, l'allemand, le russe et plusieurs langages de programmation

Hong Kong

Nom du modèleDimensions de l'embeddingTaille du lot

Tokens max par lot (Note)

Prix / 1 M tokensLangue

text-embedding-v4

Fait partie de la série Qwen3-Embedding

2 048, 1 536, 1 024 (par défaut), 768, 512, 256, 128, 64

10

8 192

0,07 $

Plus de 100 langues majeures, dont le chinois, l'anglais, l'espagnol, le français, le portugais, l'indonésien, le japonais, le coréen, l'allemand, le russe et plusieurs langages de programmation

Singapour

Nom du modèleDimensions de l'embeddingTaille du lot

Tokens max par lot (Note)

Prix / 1 M tokensLangue

Quota gratuit(Note)

text-embedding-v4

Fait partie de la série Qwen3-Embedding

2 048, 1 536, 1 024 (par défaut), 768, 512, 256, 128, 64

10

8 192

0,07 $

Plus de 100 langues majeures, dont le chinois, l'anglais, l'espagnol, le français, le portugais, l'indonésien, le japonais, le coréen, l'allemand, le russe et plusieurs langages de programmation

1 million de tokens

Valable 90 jours à compter de la date d'activation de Model Studio, de la publication du modèle ou de l'approbation de la demande, selon la date la plus tardive

text-embedding-v3

1 024 (par défaut), 768, 512

Plus de 50 langues majeures, dont le chinois, l'anglais, l'espagnol, le français, le portugais, l'indonésien, le japonais, le coréen, l'allemand et le russe

500 000 tokens

Valable 90 jours à compter de la date d'activation de Model Studio, de la publication du modèle ou de l'approbation de la demande, selon la date la plus tardive

RemarqueLa taille du lot correspond au nombre maximal de textes pouvant être traités par appel API. Par exemple, text-embedding-v4 admet une taille de lot de 10, ce qui signifie qu'une seule requête peut contenir jusqu'à 10 textes à vectoriser, chacun étant limité à 8 192 tokens. Cette limite s'applique aux cas suivants :

  • Entrée sous forme de tableau de chaînes : le tableau peut comporter jusqu'à 10 éléments.
  • Entrée sous forme de fichier : le fichier texte peut contenir jusqu'à 10 lignes.

Embedding multimodal

Ce modèle produit des embeddings à partir de textes, d'images ou de vidéos. Ces embeddings servent notamment à la classification d'images et de vidéos, à la récupération image-texte, ainsi qu'à la recherche d'image ou de vidéo par texte.

L'API accepte aussi bien des entrées uniques (texte, image ou vidéo) que des combinaisons telles que texte et image. Certains modèles autorisent plusieurs entrées du même type, par exemple plusieurs images. Consultez les limitations spécifiques à chaque modèle pour plus de détails.

Singapour

Modèle

Dimensions de l'embedding

Limite de longueur du texte

Limite de taille d'image

Limite de taille vidéo

Prix (pour 1 M tokens)

Quota gratuit(Note)

tongyi-embedding-vision-plus

1 152

1 024 tokens

Jusqu'à 3 Mo par image. Prise en charge de 8 images au maximum.

Jusqu'à 10 Mo par fichier vidéo

Image/Vidéo : 0,09 $

Texte : 0,09 $

1 million de tokens

Ce quota gratuit est valable 90 jours à compter de la date d'activation de Model Studio, de la publication du modèle ou de l'approbation de la demande, selon la date la plus tardive.

tongyi-embedding-vision-flash

768

Image/Vidéo : 0,03 $

Texte : 0,09 $

Chine (Pékin)

Modèle

Dimensions de l'embedding

Limite de longueur du texte

Limite de taille d'image

Limite de taille vidéo

Prix (pour 1 M tokens)

qwen3-vl-embedding

2 560 (par défaut), 2 048, 1 536, 1 024, 768, 512, 256

32 000 tokens

Jusqu'à 1 image d'une taille maximale de 5 Mo

Jusqu'à 50 Mo par fichier vidéo

Image/Vidéo : 0,258 $

Texte : 0,1 $

multimodal-embedding-v1

1 024

512 tokens

Jusqu'à 8 images, avec une taille maximale de 3 Mo chacune.

Jusqu'à 10 Mo par fichier vidéo

Essai gratuit

Restrictions d'entrée et de langue

Modèle multimodal fusionné
ModèleTexteImageVidéoLimite par requête

qwen3-vl-embedding

Prend en charge 33 langues majeures, telles que le chinois, l'anglais, le japonais, le coréen, le français et l'allemand.

Toutes les langues prises en charge

Chinois, japonais, coréen, indonésien, vietnamien, thaï, anglais, français, allemand, russe, portugais, espagnol, italien, suédois, danois, tchèque, norvégien, néerlandais, finnois, turc, polonais, swahili, roumain, serbe, grec, kazakh, ouzbek, cebuano, arabe, ourdou, persan, hindi/devanagari et hébreu.

JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS et SGI (URL ou Base64 pris en charge)

MP4, AVI et MOV (URL uniquement)

Le nombre total d'éléments de contenu dans une requête unique ne peut excéder 20. Le nombre d'images ne peut dépasser 5. Images, textes et vidéos partagent cette limite.

Modèle multimodal indépendant
ModèleTexteImageVidéoLimite par requête

tongyi-embedding-vision-plus

Chinois/Anglais

JPG, PNG et BMP (URL ou Base64 pris en charge)

MP4, MPEG, AVI, MOV, MPG, WEBM, FLV et MKV (URL uniquement)

Aucune limite quant au nombre d'éléments de contenu. Le nombre total de tokens d'entrée ne doit pas dépasser la limite de tokens.

tongyi-embedding-vision-flash

multimodal-embedding-v1

Le nombre total d'éléments de contenu dans une requête unique ne peut excéder 20. Une requête peut contenir au maximum 1 image, 1 vidéo et 20 entrées textuelles. Ces éléments partagent la limite globale.

Fonctionnalités principales

Personnalisation des dimensions vectorielles

Les modèles text-embedding-v4, text-embedding-v3, tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, qwen3-vl-embedding permettent de personnaliser les dimensions des vecteurs. Des dimensions plus élevées conservent davantage d'informations sémantiques, mais augmentent les coûts de stockage et de calcul.

  • Cas d'usage généraux (recommandé) : une dimension de 1 024 offre un compromis optimal entre performance et coût, ce qui convient à la plupart des tâches de recherche sémantique.
  • Scénarios exigeant une haute précision : pour les applications nécessitant une grande exactitude, choisissez une dimension de 1 536 ou 2 048. La précision s'en trouve améliorée, mais cela accroît sensiblement la consommation de ressources de stockage et de calcul.
  • Environnements à ressources limitées : dans les contextes sensibles au coût, optez pour une dimension de 768 ou moins. Cela réduit notablement la consommation de ressources, au prix d'une perte partielle d'informations sémantiques.
import os
from openai import OpenAI

client = OpenAI(
    # API Keys are region-specific. To get an API Key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # This is the base URL for the Singapore region. Replace {WorkspaceId} with your Workspace ID. URLs are region-specific.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

resp = client.embeddings.create(
    model="text-embedding-v4",
    input=["I like it and will buy from here again"],
    # Set the vector dimension to 256
    dimensions=256
)
print(f"Vector dimension: {len(resp.data[0].embedding)}")
import dashscope

# If you use a model in the China (Beijing) region, replace base_http_api_url with: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input=["I like it and will buy from here again"],
    # Set the vector dimension to 256
    dimension=256
)

print(f"Vector dimension: {len(resp.output['embeddings'][0]['embedding'])}")

Texte de requête vs texte de document (text_type)

Ce paramètre est exclusivement disponible via le SDK DashScope et l'API.

Pour optimiser les résultats de recherche, il convient de vectoriser le contenu différemment selon son rôle. Le paramètre text_type répond précisément à ce besoin :

  • text_type: 'query' : à utiliser pour le texte de requête fourni par l'utilisateur. Le modèle génère alors un vecteur de type « titre », plus directionnel et optimisé pour la récupération d'information.
  • text_type: 'document' (par défaut) : destiné au texte de document stocké dans votre base de connaissances. Le modèle produit un vecteur de type « corps de texte », riche en informations et optimisé pour la mise en correspondance.

Lorsque vous comparez un texte court à un texte long, distinguez clairement query et document. En revanche, pour des tâches comme le clustering ou la classification où tous les textes jouent le même rôle, ce paramètre n'est pas nécessaire.

Instructions de tâche (instruct)

Ce paramètre est exclusivement disponible via le SDK DashScope et l'API.

Vous pouvez fournir une instruction de tâche claire en anglais afin de guider le modèle text-embedding-v4 dans l'optimisation de la qualité vectorielle pour des scénarios de récupération spécifiques, améliorant ainsi la précision. Lors de l'utilisation de cette fonctionnalité, le paramètre text_type doit impérativement être défini sur query.

# Example: Add an instruction to optimize retrieval quality when building document vectors.
resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input="Research papers on machine learning",
    text_type="query",
    instruct="Given a research paper query, retrieve relevant research paper"
)

Vecteurs denses et creux

Ce paramètre est exclusivement disponible via le SDK DashScope et l'API.

Les modèles text-embedding-v4 et text-embedding-v3 proposent trois types de sortie vectorielle afin de s'adapter à différentes stratégies de récupération.

Type de vecteur (output_type)

Avantages

Limitations

Cas d'usage

dense

Compréhension sémantique approfondie identifiant synonymes et contexte pour des résultats plus pertinents.

Coûts de calcul et de stockage plus élevés. Ne garantit pas une correspondance exacte des mots-clés.

Recherche sémantique, Q&R assistée par IA, recommandation de contenu.

sparse

Haute efficacité computationnelle, axée sur la correspondance exacte des mots-clés et permettant un filtrage rapide.

Absence de compréhension sémantique, incapable de traiter les synonymes ou le contexte.

Récupération de journaux, recherche de SKU produits, filtrage précis d'informations.

dense&sparse

Allie correspondance sémantique et recherche par mots-clés pour des résultats optimaux. Le coût de génération reste inchangé et la surcharge d'appel API est identique au mode vecteur unique.

Nécessite davantage de stockage ; l'architecture système et la logique de récupération sont plus complexes.

Moteur de recherche hybride de qualité production.

Cas d'usage

Le code ci-dessous est fourni à titre illustratif uniquement. En environnement de production, précalculez les embeddings et stockez-les dans une base de données vectorielle. Ainsi, seul l'embedding de requête devra être généré lors de la récupération.

Recherche sémantique

Effectuez une mise en correspondance sémantique précise en calculant la similarité entre l'embedding de la requête et ceux des documents.

import dashscope
import numpy as np
from dashscope import TextEmbedding

# To use a model from the China (Beijing) region, change base_http_api_url to: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Calculate cosine similarity."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def semantic_search(query, documents, top_k=5):
    """Perform semantic search."""
    # Generate the query embedding.
    query_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=query,
        dimension=1024
    )
    query_embedding = query_resp.output['embeddings'][0]['embedding']

    # Generate the document embeddings.
    doc_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=documents,
        dimension=1024
    )

    # Calculate similarities.
    similarities = []
    for i, doc_emb in enumerate(doc_resp.output['embeddings']):
        similarity = cosine_similarity(query_embedding, doc_emb['embedding'])
        similarities.append((i, similarity))

    # Sort and return the top-k results.
    similarities.sort(key=lambda x: x[1], reverse=True)
    return [(documents[i], sim) for i, sim in similarities[:top_k]]

# Example usage
documents = [
    "Artificial intelligence is a branch of computer science",
    "Machine learning is an important method for achieving artificial intelligence",
    "Deep learning is a subfield of machine learning"
]
query = "What is AI?"
results = semantic_search(query, documents, top_k=2)
for doc, sim in results:
    print(f"Similarity: {sim:.3f}, Document: {doc}")

Système de recommandation

Analysez les embeddings de l'historique comportemental d'un utilisateur afin d'identifier ses centres d'intérêt et de lui recommander des éléments similaires.

import dashscope
import numpy as np
from dashscope import TextEmbedding

# To use a model from the China (Beijing) region, change base_http_api_url to: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Calculate cosine similarity."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def build_recommendation_system(user_history, all_items, top_k=10):
    """Build a recommendation system."""
    # Generate user history embeddings.
    history_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=user_history,
        dimension=1024
    )

    # Calculate the user preference embedding by averaging.
    user_embedding = np.mean([
        emb['embedding'] for emb in history_resp.output['embeddings']
    ], axis=0)

    # Generate all item embeddings.
    items_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=all_items,
        dimension=1024
    )

    # Calculate recommendation scores.
    recommendations = []
    for i, item_emb in enumerate(items_resp.output['embeddings']):
        score = cosine_similarity(user_embedding, item_emb['embedding'])
        recommendations.append((all_items[i], score))

    # Sort and return the recommendation results.
    recommendations.sort(key=lambda x: x[1], reverse=True)
    return recommendations[:top_k]

# Example usage
user_history = ["Science Fiction", "Action", "Suspense"]
all_movies = ["Future World", "Space Adventure", "Ancient War", "Romantic Journey", "Superhero"]
recommendations = build_recommendation_system(user_history, all_movies)
for movie, score in recommendations:
    print(f"Recommendation Score: {score:.3f}, Movie: {movie}")

Clustering de textes

Regroupez des textes similaires en analysant les distances entre leurs embeddings respectifs.

# scikit-learn is required: pip install scikit-learn
import dashscope
import numpy as np
from sklearn.cluster import KMeans

# To use a model from the China (Beijing) region, change base_http_api_url to: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cluster_texts(texts, n_clusters=2):
    """Cluster a set of texts."""
    # 1. Get the embeddings for all texts.
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=texts,
        dimension=1024
    )
    embeddings = np.array([item['embedding'] for item in resp.output['embeddings']])

    # 2. Use the KMeans algorithm for clustering.
    kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto').fit(embeddings)

    # 3. Organize and return the results.
    clusters = {i: [] for i in range(n_clusters)}
    for i, label in enumerate(kmeans.labels_):
        clusters[label].append(texts[i])
    return clusters

# Example usage
documents_to_cluster = [
    "Mobile phone company A releases a new phone",
    "Search engine company B launches a new system",
    "World Cup final: Argentina vs. France",
    "China wins another gold medal at the Olympics",
    "A company releases its latest AI chip",
    "European Cup match report"
]
clusters = cluster_texts(documents_to_cluster, n_clusters=2)
for cluster_id, docs in clusters.items():
    print(f"--- Cluster {cluster_id} ---")
    for doc in docs:
        print(f"- {doc}")

Classification de textes

Réalisez une classification de textes sans apprentissage préalable (zero-shot) en calculant la similarité entre l'embedding d'un texte d'entrée et les embeddings d'étiquettes prédéfinies. Cette méthode classe le texte dans de nouvelles catégories sans nécessiter d'exemples préétiquetés.

import dashscope
import numpy as np

# To use a model from the China (Beijing) region, change base_http_api_url to: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Calculate cosine similarity."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def classify_text_zero_shot(text, labels):
    """Perform zero-shot text classification."""
    # 1. Get the embeddings for the input text and all labels.
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=[text] + labels,
        dimension=1024
    )
    embeddings = resp.output['embeddings']
    text_embedding = embeddings[0]['embedding']
    label_embeddings = [emb['embedding'] for emb in embeddings[1:]]

    # 2. Calculate the similarity with each label.
    scores = [cosine_similarity(text_embedding, label_emb) for label_emb in label_embeddings]

    # 3. Return the label with the highest similarity.
    best_match_index = np.argmax(scores)
    return labels[best_match_index], scores[best_match_index]

# Example usage
text_to_classify = "The fabric of this dress is comfortable, and the style is nice too"
possible_labels = ["Digital Products", "Apparel & Accessories", "Food & Beverage", "Home & Living"]

label, score = classify_text_zero_shot(text_to_classify, possible_labels)
print(f"Input text: '{text_to_classify}'")
print(f"Best matching category: '{label}' (Similarity: {score:.3f})")

Détection d'anomalies

Identifiez les données anormales en calculant la similarité entre l'embedding d'un texte et l'embedding central des échantillons normaux. Toute donnée s'écartant significativement de ce schéma est considérée comme une anomalie.

Le threshold utilisé dans l'exemple est fourni à titre indicatif. La valeur idéale dépend du contenu et de la distribution des données ; il vous appartient donc de la calibrer à l'aide de votre propre jeu de données.

import dashscope
import numpy as np

# To use a model from the China (Beijing) region, change base_http_api_url to: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"

def cosine_similarity(a, b):
    """Calculate cosine similarity."""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def detect_anomaly(new_comment, normal_comments, threshold=0.6):
    # 1. Generate embeddings for all normal comments and the new comment.
    all_texts = normal_comments + [new_comment]
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=all_texts,
        dimension=1024
    )
    embeddings = [item['embedding'] for item in resp.output['embeddings']]

    # 2. Calculate the center embedding (average) of the normal comments.
    normal_embeddings = np.array(embeddings[:-1])
    normal_center_vector = np.mean(normal_embeddings, axis=0)

    # 3. Calculate the similarity between the new comment's embedding and the center embedding.
    new_comment_embedding = np.array(embeddings[-1])
    similarity = cosine_similarity(new_comment_embedding, normal_center_vector)

    # 4. Determine if it is an anomaly.
    is_anomaly = similarity < threshold
    return is_anomaly, similarity

# Example usage
normal_user_comments = [
    "Today's meeting was productive",
    "The project is progressing smoothly",
    "The new version will be released next week",
    "User feedback is positive"
]

test_comments = {
    "Normal comment": "The feature works as expected",
    "Anomaly - meaningless garbled text": "asdfghjkl zxcvbnm"
}

print("--- Anomaly Detection Example ---")
for desc, comment in test_comments.items():
    is_anomaly, score = detect_anomaly(comment, normal_user_comments)
    result = "Yes" if is_anomaly else "No"
    print(f"Comment: '{comment}'")
    print(f"Is anomaly: {result} (Similarity to normal samples: {score:.3f})\n")

Référence API

Codes d'erreur

Si l'appel au modèle échoue et renvoie un message d'erreur, consultez la rubrique Codes d'erreur pour obtenir des solutions.

Limitation du débit

Pour connaître les conditions de limitation du débit applicables au modèle, reportez-vous à la rubrique Limitation du débit.

Performances des modèles (MTEB/CMTEB)

Benchmarks d'évaluation

  • MTEB (Massive Text Embedding Benchmark) : benchmark complet évaluant les performances générales des embeddings de texte sur des tâches telles que la classification, le clustering et la récupération.
  • CMTEB (Chinese Massive Text Embedding Benchmark) : benchmark à grande échelle dédié à l'évaluation des embeddings de texte en chinois.
  • Les scores s'échelonnent de 0 à 100. Un score élevé indique de meilleures performances.

Modèle

MTEB

MTEB (tâche de récupération)

CMTEB

CMTEB (tâche de récupération)

text-embedding-v3 (512 dimensions)

62,11

54,30

66,81

71,88

text-embedding-v3 (768 dimensions)

62,43

54,74

67,90

72,29

text-embedding-v3 (1 024 dimensions)

63,39

55,41

68,92

73,23

text-embedding-v4 (512 dimensions)

64,73

56,34

68,79

73,33

text-embedding-v4 (1 024 dimensions)

68,36

59,30

70,14

73,98

text-embedding-v4 (2 048 dimensions)

71,58

61,97

71,99

75,01