全部产品
Search
文档中心

DashVector:Memulai

更新时间:Mar 12, 2026

DashText adalah penyandi vektor jarang yang direkomendasikan untuk DashVector. Pencarian semantik menangkap makna, tetapi dapat melewatkan kecocokan kata kunci eksak—seperti istilah spesifik domain, nama produk, atau kode kesalahan—yang sering kali luput terdeteksi. DashText menjembatani celah ini dengan mengonversi teks menjadi vektor jarang menggunakan algoritma BM25. Gabungkan vektor jarang ini dengan vektor padat di DashVector untuk menjalankan pencarian semantik yang peka kata kunci, yaitu pengambilan yang relevan secara semantik sekaligus presisi berdasarkan kata kunci.

Contoh inti

Cuplikan Python berikut menunjukkan alur minimal end-to-end: membuat koleksi, menyandikan dokumen, memasukkannya, dan menjalankan kueri hibrida.

import dashvector
from dashtext import SparseVectorEncoder
from dashvector import Doc

# Terhubung ke DashVector
client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)

# Buat koleksi dengan metrik dot product (wajib untuk vektor jarang)
client.create('hybrid_collection', dimension=4, metric='dotproduct')
collection = client.get('hybrid_collection')

# Bangun penyandi vektor jarang dan sandikan dokumen
encoder = SparseVectorEncoder.default()
doc_sparse = encoder.encode_documents("Your document text here.")

# Masukkan dokumen dengan vektor padat dan vektor jarang
collection.insert(Doc(
    id='doc1',
    vector=[0.1, 0.2, 0.3, 0.4],
    sparse_vector=doc_sparse
))

# Cari dengan vektor padat dan vektor jarang
query_sparse = encoder.encode_queries("Your search query here.")
results = collection.query(
    vector=[0.1, 0.1, 0.1, 0.1],
    sparse_vector=query_sparse
)

Bagian-bagian berikut menjelaskan setiap langkah secara rinci, dengan contoh dalam Python dan Java.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster DashVector dengan Kunci API dan titik akhir yang tersedia. Untuk informasi lebih lanjut, lihat Pengenalan vektor.

  • SDK Python atau Java terinstal (paket dashvector dan dashtext untuk Python).

Catatan

Semua contoh dalam panduan ini menggunakan vektor padat berdimensi 4 demi kesederhanaan. Di lingkungan produksi, atur dimensi agar sesuai dengan output model penyematan Anda.

Langkah 1: Buat koleksi yang mendukung vektor jarang

Vektor jarang memerlukan metrik jarak dot product. Buat koleksi dengan metric='dotproduct' untuk mengaktifkan dukungan vektor jarang.

Python

import dashvector

client = dashvector.Client(
    api_key='YOUR_API_KEY',
    endpoint='YOUR_CLUSTER_ENDPOINT'
)
assert client

# Buat koleksi dengan metrik dot product (wajib untuk vektor jarang)
ret = client.create('hybrid_collection', dimension=4, metric='dotproduct')
assert ret

collection = client.get('hybrid_collection')
assert collection

Java

import com.aliyun.dashvector.DashVectorClient;
import com.aliyun.dashvector.DashVectorCollection;
import com.aliyun.dashvector.models.requests.CreateCollectionRequest;
import com.aliyun.dashvector.models.responses.Response;
import com.aliyun.dashvector.proto.CollectionInfo;

DashVectorClient client =
  new DashVectorClient("YOUR_API_KEY", "YOUR_CLUSTER_ENDPOINT");

CreateCollectionRequest request = CreateCollectionRequest.builder()
            .name("hybrid_collection")
            .dimension(4)
            .metric(CollectionInfo.Metric.dotproduct)
            .dataType(CollectionInfo.DataType.FLOAT)
            .build();

Response<Void> response = client.create(request);
System.out.println(response);

DashVectorCollection collection = client.get("hybrid_collection");
Penting

Hanya koleksi yang menggunakan metrik dot product (metric='dotproduct') yang mendukung vektor jarang.

Ganti YOUR_API_KEY dengan Kunci API Anda dan YOUR_CLUSTER_ENDPOINT dengan titik akhir kluster Anda agar kode dapat berjalan dengan benar.

Langkah 2: Bangun penyandi vektor jarang

DashText menyediakan dua pendekatan untuk membuat SparseVectorEncoder: penyandi bawaan untuk teks tujuan umum, dan penyandi khusus yang dilatih pada korpus Anda sendiri untuk akurasi lebih tinggi pada istilah spesifik domain.

Gunakan penyandi bawaan

Penyandi bawaan telah melalui proses pre-train pada korpus Wikipedia Bahasa Tiongkok dan menggunakan Jieba untuk segmentasi teks Tiongkok. Tidak diperlukan pelatihan tambahan.

Python

from dashtext import SparseVectorEncoder

encoder = SparseVectorEncoder.default()

Java

import com.aliyun.dashtext.encoder.SparseVectorEncoder;

SparseVectorEncoder encoder = SparseVectorEncoder.getDefaultInstance();

Latih penyandi khusus pada korpus Anda sendiri

Untuk data yang mengandung banyak istilah spesifik domain, latih penyandi pada seluruh korpus Anda guna meningkatkan akurasi. Untuk informasi lebih lanjut, lihat penggunaan lanjutan.

Python

from dashtext import SparseVectorEncoder

encoder = SparseVectorEncoder()

# Korpus Anda sendiri
corpus = [
    "向量检索服务DashVector基于阿里云自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务",
    "DashVector将其强大的向量管理、向量查询等多样化能力,通过简洁易用的SDK/API接口透出,方便被上层AI应用迅速集成",
    "从而为包括大模型生态、多模态AI搜索、分子结构分析在内的多种应用场景,提供所需的高效向量检索能力",
    "简单灵活、开箱即用的SDK,使用极简代码即可实现向量管理",
    "自研向量相似性比对算法,快速高效稳定服务",
    "Schema-free设计,通过Schema实现任意条件下的组合过滤查询"
]

# Latih penyandi pada seluruh korpus
encoder.train(corpus)

Java

import com.aliyun.dashtext.encoder.SparseVectorEncoder;
import java.util.*;

SparseVectorEncoder encoder = new SparseVectorEncoder();

// Korpus Anda sendiri
List<String> corpus = Arrays.asList(
  "向量检索服务DashVector基于阿里云自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务",
  "DashVector将其强大的向量管理、向量查询等多样化能力,通过简洁易用的SDK/API接口透出,方便被上层AI应用迅速集成",
  "从而为包括大模型生态、多模态AI搜索、分子结构分析在内的多种应用场景,提供所需的高效向量检索能力",
  "简单灵活、开箱即用的SDK,使用极简代码即可实现向量管理",
  "自研向量相似性比对算法,快速高效稳定服务",
  "Schema-free设计,通过Schema实现任意条件下的组合过滤查询"
);

// Latih penyandi pada seluruh korpus
encoder.train(corpus);

Pilih penyandi yang tepat

PenyandiKeunggulanKeterbatasanPaling cocok untuk
BawaanSiap pakai, generalisasi baikAkurasi lebih rendah pada istilah khususTeks tujuan umum, prototipe cepat
Korpus kustomAkurasi lebih tinggi untuk kosakata khususMemerlukan pelatihan di muka pada seluruh korpusData spesifik domain dengan istilah bidang tertentu

Pilih penyandi berdasarkan kebutuhan bisnis Anda. Kami merekomendasikan Anda membuat penyandi berdasarkan korpus Anda sendiri jika bisnis Anda melibatkan banyak istilah yang spesifik pada bidang tertentu.

Langkah 3: Sandikan dan masukkan dokumen

Sandikan teks dokumen menjadi vektor jarang dengan encode_documents, lalu masukkan bersama vektor padat ke dalam koleksi.

Python

from dashvector import Doc

document = "向量检索服务DashVector基于阿里云自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务。"
doc_sparse_vector = encoder.encode_documents(document)

print(doc_sparse_vector)
# Output berdasarkan penyandi bawaan:
# {380823393: 0.7262431704356519, 414191989: 0.7262431704356519, 565176162: 0.7262431704356519, 904594806: 0.7262431704356519, 1005505802: 0.7262431704356519, 1169440797: 0.8883757984694465, 1240922502: 0.7262431704356519, 1313971048: 0.7262431704356519, 1317077351: 0.7262431704356519, 1490140460: 0.7262431704356519, 1574737055: 0.7262431704356519, 1760434515: 0.7262431704356519, 2045788977: 0.8414146776926797, 2141666983: 0.7262431704356519, 2509543087: 0.7262431704356519, 3180265193: 0.7262431704356519, 3845702398: 0.7262431704356519, 4106887295: 0.7262431704356519}

collection.insert(Doc(
    id='A',
    vector=[0.1, 0.2, 0.3, 0.4],
    sparse_vector=doc_sparse_vector
))

Java

String document = "向量检索服务DashVector基于达摩院自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务。";
Map<Long, Float> sparseVector = encoder.encodeDocuments(document);

System.out.println(sparseVector);
// Output berdasarkan penyandi bawaan:
// {380823393: 0.7262431704356519, 414191989: 0.7262431704356519, 565176162: 0.7262431704356519, 904594806: 0.7262431704356519, 1005505802: 0.7262431704356519, 1169440797: 0.8883757984694465, 1240922502: 0.7262431704356519, 1313971048: 0.7262431704356519, 1317077351: 0.7262431704356519, 1490140460: 0.7262431704356519, 1574737055: 0.7262431704356519, 1760434515: 0.7262431704356519, 2045788977: 0.8414146776926797, 2141666983: 0.7262431704356519, 2509543087: 0.7262431704356519, 3180265193: 0.7262431704356519, 3845702398: 0.7262431704356519, 4106887295: 0.7262431704356519}

Vector vector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();

// Bangun Doc dengan vektor padat dan vektor jarang
Doc doc = Doc.builder()
  .id("28")
  .sparseVector(sparseVector)
  .vector(vector)
  .build();

// Masukkan dokumen
Response<Void> response = collection.insert(InsertDocRequest.builder().doc(doc).build());

Setiap vektor jarang merupakan peta dari ID hash token ke bobot BM25. Bobot yang lebih tinggi menunjukkan istilah yang lebih khas dalam dokumen tersebut.

Langkah 4: Jalankan pencarian semantik yang peka kata kunci

Sandikan kueri pencarian menjadi vektor jarang dengan encode_queries, lalu berikan vektor padat dan vektor jarang ke query.

Python

query = "什么是向量检索服务?"
sparse_vector = encoder.encode_queries(query)

print(sparse_vector)
# Output berdasarkan penyandi bawaan:
# {1169440797: 0.2947158712590364, 2045788977: 0.7052841287409635}

docs = collection.query(
    vector=[0.1, 0.1, 0.1, 0.1],
    sparse_vector=sparse_vector
)

Java

String query = "Apa itu layanan pencarian vektor?";

Map<Long, Float> sparseVector = encoder.encodeQueries(query);

System.out.println(sparseVector);
// Keluaran berdasarkan penyandi bawaan:
// {1169440797: 0.2947158712590364, 2045788977: 0.7052841287409635}

Vector vector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();

// Membuat kueri dengan vektor padat dan vektor jarang
QueryDocRequest request = QueryDocRequest.builder()
  .vector(vector)
  .sparse_ector(sparseVector)
  .topk(100)
  .includeVector(true)
  .build();

Response<List<Doc>> response = collection.query(request);
System.out.println(response);

Langkah 5: Sesuaikan hasil dengan vektor berbobot

Kendalikan keseimbangan antara kemiripan semantik (vektor padat) dan kecocokan kata kunci (vektor jarang) menggunakan parameter alpha:

Nilai AlphaPerilaku
0.0Hanya vektor jarang yang digunakan untuk pengukuran jarak (pencarian kata kunci murni)
1.0Hanya vektor padat yang digunakan untuk pengukuran jarak (pencarian semantik murni)

Terapkan combine_dense_and_sparse untuk menskalakan kedua vektor sebelum melakukan kueri:

Python

from dashtext import combine_dense_and_sparse

query = "什么是向量检索服务?"
sparse_vector = encoder.encode_queries(query)

# Atur alpha untuk mengontrol keseimbangan: 0.0 = hanya kata kunci, 1.0 = hanya semantik
alpha = 0.7
dense_vector = [0.1, 0.1, 0.1, 0.1]
scaled_dense_vector, scaled_sparse_vector = combine_dense_and_sparse(dense_vector, sparse_vector, alpha)

docs = collection.query(
    vector=scaled_dense_vector,
    sparse_vector=scaled_sparse_vector
)

Java

String query = "什么是向量检索服务?";

Map<Long, Float> sparseVector = encoder.encodeQueries(query);

System.out.println(sparseVector);
// Output berdasarkan penyandi bawaan:
// {1169440797: 0.2947158712590364, 2045788977: 0.7052841287409635}

Vector denseVector = Vector.builder().value(Arrays.asList(0.1f, 0.2f, 0.3f, 0.4f)).build();

// Skalakan vektor padat dan vektor jarang berdasarkan faktor bobot alpha
float alpha = 0.1f;
sparseVector.forEach((key, value) -> sparseVector.put(key, value * alpha));
denseVector = Vector.builder().value(
            denseVector.getValue().stream().map(number -> number.floatValue() * alpha).collect(Collectors.toList())
    ).build();

// Kueri dengan vektor berbobot
QueryDocRequest request = QueryDocRequest.builder()
  .vector(denseVector)
  .sparse_ector(sparseVector)
  .topk(100)
  .includeVector(true)
  .build();

Response<List<Doc>> response = collection.query(request);
System.out.println(response);

Referensi API

Untuk referensi lengkap API DashText, lihat DashText SDK untuk Python.