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"
}

使用方法

  1. 对Embedding进行正则化

  2. 点积计算向量相似度

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

这个页面有帮助吗?