ollama嵌入应用

使用 ollama.embeddings 生成的向量(通常是一个高维浮点数数组)可以应用于多种自然语言处理(NLP)任务。以下是具体的使用方法和场景:


1. 理解向量含义

生成的向量是输入文本(如 '黄瓜的价格是五磅十五便士')在模型语义空间中的数学表示。每个维度代表模型学到的抽象特征(如语义、语法、上下文等),但具体含义不可直接解读。


2. 常见应用场景

(1) 语义相似度计算

  • 用途:比较两段文本的语义相似性(如问答匹配、重复检测)。
  • 方法:计算两个向量的余弦相似度或欧氏距离。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      import ollama
    import numpy as np
    from sklearn.metrics.pairwise import cosine_similarity

    # 生成嵌入向量(提取.data字段)
    response1 = ollama.embeddings(model='qwen2.5:0.5b', prompt='黄瓜的价格是五磅十五便士')
    a = response1.embedding # 假设返回对象有.data字段

    response2 = ollama.embeddings(model='qwen2.5:0.5b', prompt='黄瓜的价格是五磅十五便士')
    embedding2 = response2.embedding

    # 计算余弦相似度
    similarity = cosine_similarity([a], [embedding2])[0][0]
    print(f"相似度: {similarity:.4f}")

(2) 文本分类

  • 用途:将文本归类到预定义类别(如情感分析、主题分类)。
  • 方法:用嵌入向量训练分类模型(如SVM、逻辑回归)。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from sklearn.svm import SVC

    # 假设已有标签数据
    X_train = [embedding1, embedding2, ...] # 训练集嵌入向量
    y_train = [0, 1, ...] # 对应标签

    clf = SVC()
    clf.fit(X_train, y_train)

    # 预测新文本
    new_embedding = ollama.embeddings(model='qwen2.5:0.5b', prompt='新文本')
    predicted_label = clf.predict([new_embedding])

(3) 聚类分析

  • 用途:发现文本中的潜在主题或群体。
  • 方法:使用K-Means等聚类算法。
    1
    2
    3
    4
    5
    6
    from sklearn.cluster import KMeans

    embeddings = [embedding1, embedding2, ...] # 多个文本的嵌入向量
    kmeans = KMeans(n_clusters=3)
    kmeans.fit(embeddings)
    print(kmeans.labels_) # 输出每个文本的聚类标签

(4) 信息检索

  • 用途:构建搜索引擎或推荐系统。
  • 方法:将查询文本和文档库的嵌入向量存入向量数据库(如FAISS、Pinecone),进行最近邻搜索。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import faiss

    # 假设有文档库的嵌入向量
    embeddings = np.array([embedding1, embedding2, ...]).astype('float32')
    dim = embeddings.shape[1]
    index = faiss.IndexFlatL2(dim) # 创建L2距离的索引
    index.add(embeddings)

    # 查询相似文档
    query_embedding = ollama.embeddings(model='qwen2.5:0.5b', prompt='查询文本')
    D, I = index.search(np.array([query_embedding]), k=5) # 返回最相似的5个文档

(5) 作为特征输入其他模型

  • 用途:将嵌入向量作为下游任务(如机器翻译、摘要生成)的附加特征。

3. 注意事项

  1. 模型一致性:确保比较的向量来自同一模型(如 qwen2.5:0.5b),不同模型的嵌入空间可能不兼容。
  2. 归一化:计算相似度前,可对向量做L2归一化(vector /= np.linalg.norm(vector)),使余弦相似度更稳定。
  3. 性能优化:大规模应用时需使用高效向量数据库(如Milvus、Weaviate)。

4. 示例代码(完整流程)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import ollama
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# 生成嵌入向量
embedding1 = ollama.embeddings(model='qwen2.5:0.5b', prompt='黄瓜的价格是五磅十五便士')
embedding2 = ollama.embeddings(model='qwen2.5:0.5b', prompt='西瓜售价十英镑')

# 计算相似度
sim = cosine_similarity([embedding1], [embedding2])[0][0]
print(f"语义相似度: {sim:.4f}")

# 输出示例(假设结果)
# 语义相似度: 0.8723

通过以上方法,你可以将生成的向量转化为实际业务价值,如智能客服、推荐系统或内容分析。

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2025 John Doe
  • Visitors: | Views:

请我喝杯茶吧~

支付宝
微信