使用 Embedding 模型

本文档介绍使用DashScopeEmbedding服务来在LlamaIndex中构建向量索引服务的使用方法。

前提条件

  • 您已开通百炼服务并获得API-KEY, 请参考获取API Key

  • 已导入 API-KEY,请参考配置API Key到环境变量

  • 安装 LlamaIndex 核心组件、DashScopeEmbedding 以及相关依赖。

    pip install llama-index-core
    pip install llama-index-embeddings-dashscope
    pip install llama-index-readers-file
    pip install docx2txt

支持的模型

MTEB、CMTEB是 Embedding模型的通用评估指标,数值越大,模型效果越好。

模型

MTEB

MTEB(Retrieval task)

CMTEB

CMTEB (Retrieval task)

text-embedding-v1

58.30

45.47

59.84

56.59

text-embedding-v2

60.13

49.49

62.17

62.78

text-embedding-v3

63.39

55.41

68.92

73.23

修改全局设置(可选)

from llama_index.core import Settings
from llama_index.embeddings.dashscope import DashScopeEmbedding

# LlamaIndex默认使用的Embedding模型被替换为百炼的Embedding模型
Settings.embedder = DashScopeEmbedding(
    model_name="text-embedding-v2"
)

模型调用示例

from llama_index.embeddings.dashscope import DashScopeEmbedding

# 初始化 Embedding 模型
embedder = DashScopeEmbedding(
    model_name="text-embedding-v2"
)
text_to_embedding = ["风急天高猿啸哀", "渚清沙白鸟飞回", "无边落木萧萧下", "不尽长江滚滚来"]
# 调用 Embedding 模型
result_embeddings = embedder.get_text_embedding_batch(text_to_embedding)
# 显示 Embedding 后结果
for index, embedding in enumerate(result_embeddings):
    print("Dimension of embeddings: %s" % len(embedding))
    print(
        "Input: %s, embedding is: %s"
        % (text_to_embedding[index], embedding[:5])
    )

示例代码输出

Dimension of embeddings: 1536
Input: 风急天高猿啸哀, embedding is: [-0.0016666285653348784, 0.008690492014557004, 0.02894828715284365, -0.01774133615134858, 0.03627544697161321]
Dimension of embeddings: 1536
Input: 渚清沙白鸟飞回, embedding is: [0.018255604113922633, 0.030631669725945727, 0.0031333343045102462, 0.014323813963475412, 0.009666154862176396]
Dimension of embeddings: 1536
Input: 无边落木萧萧下, embedding is: [-0.01270165436681136, 0.011355212676752505, -0.007090375205285297, 0.008317427977013809, 0.0341982923839579]
Dimension of embeddings: 1536
Input: 不尽长江滚滚来, embedding is: [0.003449439128962428, 0.02667092110022496, -0.0010223853088419568, -0.00971414215183749, 0.0035561228133633277]

构建文档的向量化索引

示例中使用的被解析文件:百炼系列产品介绍(虚构).zip

# 导入依赖
from llama_index.embeddings.dashscope import DashScopeEmbedding
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex

# 读取被解析的文件目录下所有文件
documents = SimpleDirectoryReader("<请替换为需要解析的文件目录>").load_data()
print("已读取文件目录的文件")

# from_documents方法包含对文档进行切片与建立索引两个步骤
index = VectorStoreIndex.from_documents(
    documents,
    # 指定embedding 模型
    embed_model=DashScopeEmbedding(
        model_name="text-embedding-v2"
    ))
print("已使用DashScopeEmbedding模型构建了多个文档的向量化索引")

# 输出建立好的索引和压缩好的向量示例
print("输出向量化示例:")
for i, uuid in enumerate(index.vector_store.data.metadata_dict.keys()):
    print("文件名:", end='')
    print(index.vector_store.data.metadata_dict[uuid]['file_name'], end='')
    print(",文件大小:", index.vector_store.data.metadata_dict[uuid]['file_size'], end='')
    print(",文件类型:", index.vector_store.data.metadata_dict[uuid]['file_type'])
    print("压缩后向量:", end='')
    print(index.vector_store.data.embedding_dict[uuid][:3], '\n')
    if i > 3:
        break

示例代码输出

在构建向量化索引的过程中,原始文件会被拆分成多个部分,每个部分随后被转换成一个向量。
已读取文件目录的文件
已使用DashScopeEmbedding模型构建了多个文档的向量化索引
输出向量化示例:
文件名:百炼系列平板电脑产品介绍.pdf,文件大小: 144316,文件类型: application/pdf
压缩后向量:[0.040188307063141346, -0.00039877765589124394, -0.035738459756745854] 

文件名:百炼系列平板电脑产品介绍.pdf,文件大小: 144316,文件类型: application/pdf
压缩后向量:[0.04814293357335188, 0.004163492388781393, -0.038165800733263575] 

文件名:百炼系列手机产品介绍.docx,文件大小: 14265,文件类型: application/vnd.openxmlformats-officedocument.wordprocessingml.document
压缩后向量:[0.019914771026010504, 0.0009497773001332384, -0.040679692362629784] 

文件名:百炼系列手机产品介绍.docx,文件大小: 14265,文件类型: application/vnd.openxmlformats-officedocument.wordprocessingml.document
压缩后向量:[0.02361539453526087, 0.00019768677449582677, -0.03274763169693275] 

文件名:百炼系列智能音箱产品介绍.txt,文件大小: 2448,文件类型: text/plain
压缩后向量:[0.03064649761730314, -0.003089192569710745, -0.022280601331799776] 

详细介绍与更多示例请前往 LlamaIndex 官方的Embedding Examples ,完整的 API Reference 请前往 LlamaIndex 官方的 DashScopeEmbedding API Reference