ZZ-MedEmbedding-v1
什么是嵌入?
ZZ-MedEmbedding 的文本嵌入衡量文本字符串的相关性,尤其是在医学文本上有较强的细节理解能力。这些嵌入通常用于:
-
Search 搜索(结果按与查询字符串的相关性排序)
-
Clustering 聚类(文本字符串按相似性分组)
-
Recommendations 推荐(推荐具有相关文本字符串的条目)
-
Anomaly detection 异常检测(识别出相关性很小的异常值)
-
Diversity measurement 多样性测量(分析相似性分布)
-
Classification 分类(其中文本字符串按其最相似的标签分类)
嵌入是浮点数的向量(列表)。两个向量之间的距离衡量它们的相关性。小距离表示高相关性,大距离表示低相关性。
访问我们的定价页面以了解嵌入定价。
如何获得嵌入
要获得嵌入,请将您的文本字符串连同选择的嵌入模型 ID(例如,ZZ-MedEmbedding-v1)一起发送到嵌入 API 端点。响应将包含一个嵌入,您可以提取、保存和使用它。
通过OpenAI SDK调用
要求
-
安装Python环境。
-
在您的Python环境中安装最新版OpenAI SDK。
# 如果下述命令报错,请将pip替换为pip3
pip install -U openai
-
获得智诊开放平台的API-KEY:获取API Key。
-
我们建议您通过环境变量来存储 API-KEY,而不是直接写在代码中,这样可以更好地保护您的密钥安全。
# 临时设置
export ZHIZHEN_API_KEY="your_api_key_here"
# 永久设置 (添加到 ~/.bashrc 或 ~/.zshrc)
echo 'export API_KEY="your_api_key_here"' >> ~/.bashrc
source ~/.bashrc
# 临时设置
set ZHIZHEN_API_KEY=your_api_key_here
# 永久设置
setx ZHIZHEN_API_KEY "your_api_key_here"
使用:
import os
api_key = os.getenv("ZHIZHEN_API_KEY")
利用OpenAI进行请求
import openai
client = openai.Client(
api_key="",
base_url="https://api.wisediag.com/v1"
)
res = client.embeddings.create(
model="ZZ-MedEmbedding-v1",
input=["What is the capital of China?"]
)
print(res.model_dump_json())
输出示例:
{
"data": [
{
"embedding": [
0.0023064255,
-0.009327292,
....
-0.0028842222,
],
"index": 0,
"object": "embedding"
}
],
"model":"ZZ-MedEmbedding-v1",
"object":"list",
"usage":{"prompt_tokens":23,"total_tokens":23},
"id":"f62c2ae7-0906-9758-ab34-47c5764f07e2"
}
通过HTTP接口调用
curl https://api.wisediag.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
"input": "请问高热三天,反复呕吐是什么情况?",
"model": "ZZ-MedEmbedding-v1"
}'
输出示例:
{
"data": [
{
"embedding": [
0.0023064255,
-0.009327292,
....
-0.0028842222,
],
"index": 0,
"object": "embedding"
}
],
"model":"ZZ-MedEmbedding-v1",
"object":"list",
"usage":{"prompt_tokens":26,"total_tokens":26},
"id":"f62c2ae7-0906-9758-ab34-47c5764f07e3"
}
使用方法
-
对Embedding进行正则化
-
点积计算向量相似度
import numpy as np
from typing import List
def compute_similarity(query_embeddings: List, doc_embeddings: List) -> np.ndarray:
"""
计算查询向量和文档向量之间的余弦相似度
参数:
query_embeddings: List, 包含查询向量的列表,每个向量也是一个列表
doc_embeddings: List, 包含文档向量的列表,每个向量也是一个列表
返回:
similarities: numpy array, 形状为 (batch_size, n_docs),包含每个查询向量与所有文档向量的相似度
"""
# 将输入列表转换为numpy数组
query_embeddings = np.array(query_embeddings, dtype=np.float32)
doc_embeddings = np.array(doc_embeddings, dtype=np.float32)
# 确保输入是二维数组
if len(query_embeddings.shape) == 1:
query_embeddings = query_embeddings.reshape(1, -1)
# 计算L2范数
query_norm = np.linalg.norm(query_embeddings, axis=1, keepdims=True)
doc_norm = np.linalg.norm(doc_embeddings, axis=1, keepdims=True)
# 避免除以0
query_norm = np.maximum(query_norm, 1e-12)
doc_norm = np.maximum(doc_norm, 1e-12)
# 归一化向量
query_embeddings_normalized = query_embeddings / query_norm
doc_embeddings_normalized = doc_embeddings / doc_norm
# 计算余弦相似度 (dot product of normalized vectors)
similarities = np.dot(query_embeddings_normalized, doc_embeddings_normalized.T)
return similarities