全部产品
Search
文档中心

Alibaba Cloud Model Studio:Embedding

更新时间:Feb 04, 2026

Model embedding mengonversi data seperti teks, gambar, dan video menjadi vektor numerik. Vektor ini digunakan untuk berbagai tugas lanjutan, seperti pencarian semantik, rekomendasi, pengelompokan, klasifikasi, dan deteksi anomali.

Persiapan

Anda harus mendapatkan Kunci API dan menyetel Kunci API sebagai Variabel lingkungan. Jika Anda menggunakan SDK OpenAI atau SDK DashScope untuk melakukan panggilan, Anda juga harus menginstal SDK.

Mendapatkan embedding

Text embedding

Saat memanggil API, tentukan teks yang akan di-embed dan nama model dalam permintaan.

Antarmuka kompatibel dengan OpenAI

import os
from openai import OpenAI

input_text = "The quality of the clothes is excellent"

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # Jika Anda belum mengonfigurasi variabel lingkungan, ganti dengan Kunci API Anda di sini
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.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");

// Inisialisasi klien OpenAI
const openai = new OpenAI({
    // Pastikan Anda telah menyetel variabel lingkungan DASHSCOPE_API_KEY dengan benar
    apiKey: process.env.DASHSCOPE_API_KEY, // Jika Anda belum mengonfigurasi variabel lingkungan, ganti dengan Kunci API Anda di sini
    // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    baseURL: 'https://dashscope-intl.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 // Tentukan dimensi vektor (Parameter ini hanya didukung oleh text-embedding-v3 dan text-embedding-v4)
        });

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

getEmbedding();
curl --location 'https://dashscope-intl.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

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.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://dashscope-intl.aliyuncs.com/api/v1";
        // Untuk wilayah Tiongkok (Beijing), ganti dengan: https://dashscope.aliyuncs.com/api/v1
    }
     public static void main(String[] args) {
        String inputTexts = "The quality of the clothes is excellent";
        try {
            // Bangun parameter permintaan
            TextEmbeddingParam param = TextEmbeddingParam
                    .builder()
                    .model("text-embedding-v4")
                    // Teks masukan
                    .texts(Collections.singleton(inputTexts))
                    .build();

            // Buat instans model dan panggil
            TextEmbedding textEmbedding = new TextEmbedding();
            TextEmbeddingResult result = textEmbedding.call(param);

            // Cetak hasilnya
            System.out.println(result);

        } catch (NoApiKeyException e) {
            // Tangkap dan tangani pengecualian untuk Kunci API yang belum disetel
            System.err.println("Terjadi pengecualian saat memanggil API: " + e.getMessage());
            System.err.println("Periksa apakah Kunci API Anda dikonfigurasi dengan benar.");
            e.printStackTrace();
        }
    }
}
# ======= Penting =======
# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embedding
# === Hapus komentar ini sebelum eksekusi ====

curl --location 'https://dashscope-intl.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"
        ]
    }
}'

Embedding multimodal independen

Fitur embedding multimodal independen hanya tersedia melalui SDK DashScope atau API. Fitur ini tidak didukung oleh antarmuka kompatibel OpenAI atau Konsol. Fitur ini menghasilkan vektor terpisah dan independen untuk konten dari modalitas berbeda, seperti teks, gambar, dan video. Fitur ini cocok untuk skenario di mana Anda perlu memproses setiap jenis konten secara individual.

import dashscope
import json
import os
from http import HTTPStatus

dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# Di atas adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1

# Masukan bisa berupa video
# video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250107/lbcemt/new+video.mp4"
# input = [{'video': video}]
# Atau gambar
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
input = [{'image': image}]
resp = dashscope.MultiModalEmbedding.call(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
    # Kunci API untuk wilayah Singapura dan Tiongkok (Beijing) berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/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))
    

Embedding multimodal terpadu

Fitur embedding multimodal terpadu hanya tersedia melalui SDK DashScope atau API. Fitur ini tidak didukung oleh antarmuka kompatibel OpenAI atau Konsol. Fitur ini menggabungkan konten dari modalitas berbeda, seperti teks, gambar, dan video, menjadi satu vektor terpadu. Fitur ini cocok untuk skenario seperti pencarian teks-ke-gambar, pencarian gambar-ke-gambar, pencarian teks-ke-video, dan pengambilan lintas-modalitas.

qwen3-vl-embedding mendukung pembuatan embedding terpadu maupun independen. Saat teks, gambar, dan video ditempatkan dalam objek yang sama, vektor terpadu dihasilkan. Saat mereka merupakan elemen terpisah, vektor independen dihasilkan untuk masing-masing. qwen2.5-vl-embedding hanya mendukung embedding terpadu dan tidak mendukung embedding independen.
import dashscope
import json
import os
from http import HTTPStatus

# Embedding multimodal terpadu: Menggabungkan teks, gambar, dan video menjadi satu vektor terpadu
# Cocok untuk skenario seperti pengambilan lintas-modalitas dan pencarian gambar
text = "This is a test text for generating a fused multimodal embedding"
image = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png"
video = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250107/lbcemt/new+video.mp4"

# Masukan mencakup teks, gambar, dan video. Model akan menggabungkannya menjadi satu vektor terpadu.
input_data = [
    {
        "text": text,
        "image": image,
        "video": video
    }
]

# Gunakan qwen3-vl-embedding untuk menghasilkan vektor terpadu
resp = dashscope.MultiModalEmbedding.call(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-vl-embedding",
    input=input_data,
    # Parameter opsional: Tentukan dimensi vektor (Mendukung 2560, 2048, 1536, 1024, 768, 512, 256. Default: 2560)
    # parameters={"dimension": 1024}
)

print(json.dumps(resp.output, indent=4))

Pemilihan model

Pemilihan model yang sesuai bergantung pada jenis data masukan dan skenario aplikasi Anda.

  • Untuk teks biasa atau kode: Gunakan text-embedding-v4. Ini adalah model paling kuat yang tersedia saat ini. Model ini mendukung fitur-fitur canggih seperti instruksi dan vektor jarang, serta mencakup sebagian besar skenario pemrosesan teks.

  • Memproses konten multimodal:

    • Embedding multimodal terpadu: Untuk merepresentasikan masukan single-modal atau mixed-modal sebagai vektor terpadu dalam skenario seperti pengambilan lintas-modalitas dan pencarian gambar, gunakan qwen3-vl-embedding. Misalnya, Anda dapat memasukkan gambar kemeja dengan teks "temukan gaya serupa yang terlihat lebih muda". Model dapat menggabungkan gambar dan instruksi teks menjadi satu vektor untuk pemahaman.

    • Embedding independen: Untuk menghasilkan vektor independen untuk setiap masukan, seperti gambar dan judul teks yang sesuai, pilih tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, atau model multimodal umum multimodal-embedding-v1. Ini menghasilkan vektor terpisah untuk setiap bagian masukan (gambar, teks).

Tabel berikut menyediakan spesifikasi terperinci untuk semua model embedding yang tersedia.

Text embedding

Singapura

Nama model

Dimensi vektor

Ukuran batch

Token maks per batch (Catatan)

Harga (per 1 juta token masukan)

Bahasa yang didukung

Kuota gratis(Catatan)

text-embedding-v4

Bagian dari seri Qwen3-Embedding

2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64

10

8.192

$0,07

Lebih dari 100 bahasa utama, termasuk Mandarin, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia

1 juta token

Masa berlaku: 90 hari setelah mengaktifkan Model Studio

text-embedding-v3

1.024 (default), 768, 512

Lebih dari 50 bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan Rusia

500.000 token

Masa berlaku: 90 hari setelah mengaktifkan Model Studio

Beijing

Nama model

Dimensi vektor

Ukuran batch

Token maks per batch (Catatan)

Harga (per 1 juta token masukan)

Bahasa yang didukung

text-embedding-v4

Bagian dari seri Qwen3-Embedding

2.048, 1.536, 1.024 (default), 768, 512, 256, 128, 64

10

8.192

$0,072

100+ bahasa utama, termasuk Tiongkok, Inggris, Spanyol, Prancis, Portugis, Indonesia, Jepang, Korea, Jerman, dan beberapa bahasa pemrograman

Catatan

Ukuran batch adalah jumlah maksimum teks yang dapat diproses dalam satu panggilan API. Misalnya, ukuran batch untuk text-embedding-v4 adalah 10. Artinya, Anda dapat mengirimkan hingga 10 teks untuk di-embed dalam satu permintaan, dan setiap teks tidak boleh melebihi 8.192 token. Batasan ini berlaku untuk:

  • Masukan array string: Array dapat berisi maksimal 10 elemen.

  • Masukan file: File teks dapat berisi maksimal 10 baris teks.

Multimodal embedding

Model menghasilkan vektor kontinu berdasarkan masukan pengguna, yang dapat berupa teks, gambar, atau video. Ini cocok untuk tugas seperti klasifikasi video, klasifikasi gambar, pengambilan gambar-teks, pencarian gambar-ke-gambar, dan pencarian video-ke-teks/gambar.

Antarmuka mendukung pengunggahan satu segmen teks, satu gambar, atau satu file video. Antarmuka juga memungkinkan kombinasi jenis berbeda (seperti teks + gambar). Beberapa model mendukung beberapa masukan dari jenis yang sama (seperti beberapa gambar). Untuk informasi lebih lanjut, lihat detail batasan untuk model tertentu.

Singapura

Nama model

Dimensi vektor

Batas panjang teks

Batas ukuran gambar

Batas ukuran video

Harga (per 1 juta token masukan)

Kuota gratis(Catatan)

tongyi-embedding-vision-plus

1152, 1024, 512, 256, 128, 64

1.024 token

Satu file tidak boleh lebih besar dari 3 MB.

Ukuran file video hingga 10 MB

Gambar/Video: $0,09

Teks: $0,09

1 juta token

Masa berlaku: 90 hari setelah mengaktifkan Model Studio

tongyi-embedding-vision-flash

768, 512, 256, 128, 64

Gambar/Video: $0,03

Teks: $0,09

Beijing

Nama model

Dimensi vektor

Batas panjang teks

Batas ukuran gambar

Batas ukuran video

Harga (per 1 juta token masukan)

qwen3-vl-embedding

2560, 2048, 1536, 1024, 768, 512, 256

32.000 token

Maks 1 gambar, hingga 5 MB

Ukuran file video hingga 50 MB

Gambar/Video: $0,258

Teks: $0,1

multimodal-embedding-v1

1024

512 token

Maks 8 gambar, hingga 3 MB masing-masing

Ukuran file video hingga 10 MB

Uji coba gratis

Format masukan dan batasan bahasa:

Model embedding multimodal terpadu

Model

Teks

Gambar

Video

Elemen maks per permintaan

qwen3-vl-embedding

Mendukung 33 bahasa utama, termasuk Mandarin, Inggris, Jepang, Korea, Prancis, dan Jerman.

JPEG, PNG, WEBP, BMP, TIFF, ICO, DIB, ICNS, SGI (URL atau Base64 didukung)

MP4, AVI, MOV (hanya URL)

Total elemen konten per permintaan tidak boleh melebihi 20. Gambar, teks, dan video berbagi batas ini.

Model embedding multimodal independen

Model

Teks

Gambar

Video

Elemen maks per permintaan

tongyi-embedding-vision-plus

Tiongkok/Inggris

JPG, PNG, BMP (URL atau Base64 didukung)

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

Tidak ada batasan jumlah elemen konten. Total jumlah token tidak boleh melebihi batas token.

tongyi-embedding-vision-flash

multimodal-embedding-v1

Total elemen konten per permintaan tidak boleh melebihi 20. Maks 1 gambar, 1 video, dan 20 entri teks, berbagi batas total.

Fitur inti

Ubah dimensi vektor

text-embedding-v4, text-embedding-v3, tongyi-embedding-vision-plus, tongyi-embedding-vision-flash, qwen3-vl-embedding mendukung dimensi vektor kustom. Dimensi yang lebih tinggi mempertahankan informasi semantik yang lebih kaya tetapi juga meningkatkan biaya penyimpanan dan komputasi.

  • Skenario umum (Direkomendasikan): Dimensi 1024 menawarkan keseimbangan terbaik antara kinerja dan biaya, cocok untuk sebagian besar tugas pengambilan semantik.

  • Skenario presisi tinggi: Untuk domain yang memerlukan presisi tinggi, pilih dimensi 1536 atau 2048. Ini memberikan peningkatan presisi tertentu tetapi secara signifikan meningkatkan overhead penyimpanan dan komputasi.

  • Skenario terbatas sumber daya: Dalam skenario yang sensitif biaya, pilih dimensi 768 atau lebih rendah. Ini secara signifikan mengurangi konsumsi sumber daya tetapi mengakibatkan kehilangan informasi semantik.

Antarmuka kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

resp = client.embeddings.create(
    model="text-embedding-v4",
    input=["I like it and will buy from here again"],
    # Setel dimensi vektor ke 256
    dimensions=256
)
print(f"Dimensi vektor: {len(resp.data[0].embedding)}")

DashScope

import dashscope

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

resp = dashscope.TextEmbedding.call(
    model="text-embedding-v4",
    input=["I like it and will buy from here again"],
    # Setel dimensi vektor ke 256
    dimension=256
)

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

Bedakan antara teks kueri dan dokumen (text_type)

Parameter ini saat ini hanya dapat diaktifkan melalui SDK dan API DashScope.

Untuk mencapai hasil terbaik dalam tugas pencarian, Anda harus memproses jenis konten yang berbeda dengan vektorisasi yang ditargetkan untuk memanfaatkan sepenuhnya peran masing-masing. Parameter text_type dirancang untuk tujuan ini:

  • text_type: 'query': Gunakan untuk teks kueri yang dimasukkan pengguna. Model menghasilkan vektor "seperti judul" yang lebih terarah dan dioptimalkan untuk "bertanya" dan "menemukan".

  • text_type: 'document' (default): Gunakan untuk teks dokumen yang disimpan di database. Model menghasilkan vektor "seperti isi" yang berisi informasi lebih komprehensif dan dioptimalkan untuk diambil.

Saat menggunakan teks pendek untuk mencocokkan teks panjang, bedakan antara query dan document. Untuk tugas di mana semua teks memiliki peran yang sama, seperti pengelompokan atau klasifikasi, Anda tidak perlu menyetel parameter ini.

Gunakan instruksi untuk meningkatkan kinerja (instruct)

Parameter ini saat ini hanya dapat diaktifkan melalui SDK dan API DashScope.

Dengan memberikan instruksi bahasa Inggris yang jelas, Anda dapat membimbing model text-embedding-v4 untuk mengoptimalkan kualitas vektor bagi skenario pengambilan tertentu, sehingga secara efektif meningkatkan presisi. Saat menggunakan fitur ini, Anda harus menyetel parameter text_type ke query.

# Skenario: Saat membangun vektor dokumen untuk mesin pencari, Anda dapat menambahkan instruksi untuk mengoptimalkan kualitas vektor untuk pengambilan.
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"
)

Vektor padat dan vektor jarang

Parameter ini saat ini hanya dapat diaktifkan melalui SDK dan API DashScope.

text-embedding-v4 dan text-embedding-v3 mendukung tiga jenis keluaran vektor untuk memenuhi kebutuhan strategi pengambilan yang berbeda.

Jenis vektor (output_type)

Keunggulan utama

Kelemahan utama

Skenario aplikasi khas

dense

Pemahaman semantik mendalam. Dapat mengidentifikasi sinonim dan konteks, menghasilkan hasil pengambilan yang lebih relevan.

Biaya komputasi dan penyimpanan lebih tinggi. Tidak dapat menjamin pencocokan kata kunci eksak.

Pencarian semantik, Chat AI, rekomendasi konten.

sparse

Efisiensi komputasi tinggi. Fokus pada pencocokan kata kunci eksak dan penyaringan cepat.

Mengorbankan pemahaman semantik. Tidak dapat menangani sinonim atau konteks.

Pengambilan log, pencarian SKU produk, penyaringan informasi tepat.

dense&sparse

Menggabungkan semantik dan kata kunci untuk hasil pencarian terbaik. Biaya pembuatan sama. Overhead panggilan API identik dengan mode vektor tunggal.

Kebutuhan penyimpanan besar. Arsitektur sistem dan logika pengambilan lebih kompleks.

Mesin pencari hibrida berkualitas tinggi untuk lingkungan produksi.

Contoh aplikasi

Kode berikut hanya untuk tujuan demonstrasi. Di lingkungan produksi, Anda harus menghitung vektor terlebih dahulu dan menyimpannya di database vektor. Selama pengambilan, Anda hanya perlu menghitung vektor kueri.

Pencarian semantik

Anda dapat mencapai pencocokan semantik yang tepat dengan menghitung kesamaan vektor antara kueri dan dokumen.

import dashscope
import numpy as np
from dashscope import TextEmbedding

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Hitung kesamaan cosinus"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def semantic_search(query, documents, top_k=5):
    """Lakukan pencarian semantik"""
    # Hasilkan vektor kueri
    query_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=query,
        dimension=1024
    )
    query_embedding = query_resp.output['embeddings'][0]['embedding']

    # Hasilkan vektor dokumen
    doc_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=documents,
        dimension=1024
    )

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

    # Urutkan dan kembalikan hasil top_k
    similarities.sort(key=lambda x: x[1], reverse=True)
    return [(documents[i], sim) for i, sim in similarities[:top_k]]

# Contoh penggunaan
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"Kesamaan: {sim:.3f}, Dokumen: {doc}")

Sistem rekomendasi

Anda dapat menemukan minat pengguna dan merekomendasikan item serupa dengan menganalisis vektor dari perilaku historis mereka.

import dashscope
import numpy as np
from dashscope import TextEmbedding

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Hitung kesamaan cosinus"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
def build_recommendation_system(user_history, all_items, top_k=10):
    """Bangun sistem rekomendasi"""
    # Hasilkan vektor riwayat pengguna
    history_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=user_history,
        dimension=1024
    )

    # Hitung vektor preferensi pengguna (dengan merata-ratakan)
    user_embedding = np.mean([
        emb['embedding'] for emb in history_resp.output['embeddings']
    ], axis=0)

    # Hasilkan semua vektor item
    items_resp = TextEmbedding.call(
        model="text-embedding-v4",
        input=all_items,
        dimension=1024
    )

    # Hitung skor rekomendasi
    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))

    # Urutkan dan kembalikan hasil rekomendasi
    recommendations.sort(key=lambda x: x[1], reverse=True)
    return recommendations[:top_k]

# Contoh penggunaan
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"Skor Rekomendasi: {score:.3f}, Film: {movie}")

Pengelompokan teks

Anda dapat mengelompokkan teks serupa secara otomatis dengan menganalisis jarak antara vektor-vektornya.

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

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cluster_texts(texts, n_clusters=2):
    """Kelompokkan sekumpulan teks"""
    # 1. Dapatkan vektor untuk semua teks
    resp = dashscope.TextEmbedding.call(
        model="text-embedding-v4",
        input=texts,
        dimension=1024
    )
    embeddings = np.array([item['embedding'] for item in resp.output['embeddings']])

    # 2. Gunakan algoritma KMeans untuk pengelompokan
    kmeans = KMeans(n_clusters=n_clusters, random_state=0, n_init='auto').fit(embeddings)

    # 3. Atur dan kembalikan hasilnya
    clusters = {i: [] for i in range(n_clusters)}
    for i, label in enumerate(kmeans.labels_):
        clusters[label].append(texts[i])
    return clusters


# Contoh penggunaan
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}")

Klasifikasi teks

Anda dapat mengenali dan mengklasifikasikan kategori baru tanpa contoh berlabel sebelumnya dengan menghitung kesamaan vektor antara teks masukan dan label yang telah ditentukan.

import dashscope
import numpy as np

# Jika Anda menggunakan model di wilayah Tiongkok (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def cosine_similarity(a, b):
    """Hitung kesamaan cosinus"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))


def classify_text_zero_shot(text, labels):
    """Lakukan klasifikasi teks zero-shot"""
    # 1. Dapatkan vektor untuk teks masukan dan semua label
    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. Hitung kesamaan dengan setiap label
    scores = [cosine_similarity(text_embedding, label_emb) for label_emb in label_embeddings]

    # 3. Kembalikan label dengan kesamaan tertinggi
    best_match_index = np.argmax(scores)
    return labels[best_match_index], scores[best_match_index]


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

label, score = classify_text_zero_shot(text_to_classify, possible_labels)
print(f"Teks masukan: '{text_to_classify}'")
print(f"Kategori yang paling cocok: '{label}' (Kesamaan: {score:.3f})")

Deteksi anomali

Anda dapat mengidentifikasi data anomali yang berbeda secara signifikan dari pola normal dengan menghitung kesamaan vektor antara vektor teks dan pusat vektor sampel normal.

Ambang batas dalam kode contoh hanya untuk tujuan demonstrasi. Dalam skenario bisnis dunia nyata, nilai kesamaan spesifik bervariasi tergantung pada konten dan distribusi data. Tidak ada ambang batas tetap. Kalibrasi nilai ini berdasarkan dataset Anda sendiri.
import dashscope
import numpy as np


def cosine_similarity(a, b):
    """Hitung kesamaan cosinus"""
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))


def detect_anomaly(new_comment, normal_comments, threshold=0.6):
    # 1. Vektorisasi semua komentar normal dan komentar baru
    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. Hitung vektor pusat (nilai rata-rata) komentar normal
    normal_embeddings = np.array(embeddings[:-1])
    normal_center_vector = np.mean(normal_embeddings, axis=0)

    # 3. Hitung kesamaan antara komentar baru dan vektor pusat
    new_comment_embedding = np.array(embeddings[-1])
    similarity = cosine_similarity(new_comment_embedding, normal_center_vector)

    # 4. Tentukan apakah ini anomali
    is_anomaly = similarity < threshold
    return is_anomaly, similarity


# Contoh penggunaan
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("--- Contoh Deteksi Anomali ---")
for desc, comment in test_comments.items():
    is_anomaly, score = detect_anomaly(comment, normal_user_comments)
    result = "Ya" if is_anomaly else "Tidak"
    print(f"Komentar: '{comment}'")
    print(f"Apakah anomali: {result} (Kesamaan dengan sampel normal: {score:.3f})\n")

Referensi API

Kode error

Jika panggilan gagal, lihat Pesan error untuk troubleshooting.

Pembatasan kecepatan

Untuk informasi tentang kondisi pembatasan kecepatan model, lihat Pembatasan kecepatan.

Kinerja model (MTEB/CMTEB)

Tolok ukur evaluasi

  • MTEB: Massive Text Embedding Benchmark, evaluasi komprehensif kemampuan tujuan umum untuk tugas seperti klasifikasi, pengelompokan, dan pengambilan.

  • CMTEB: Chinese Massive Text Embedding Benchmark, evaluasi khusus untuk teks Tiongkok.

  • Skor berkisar dari 0 hingga 100. Nilai yang lebih tinggi menunjukkan kinerja yang lebih baik.

Model

MTEB

MTEB (Tugas Pengambilan)

CMTEB

CMTEB (Tugas Pengambilan)

text-embedding-v3 (512 dimensi)

62,11

54,30

66,81

71,88

text-embedding-v3 (768 dimensi)

62,43

54,74

67,90

72,29

text-embedding-v3 (1024 dimensi)

63,39

55,41

68,92

73,23

text-embedding-v4 (512 dimensi)

64,73

56,34

68,79

73,33

text-embedding-v4 (1024 dimensi)

68,36

59,30

70,14

73,98

text-embedding-v4 (2048 dimensi)

71,58

61,97

71,99

75,01