3  Embedding

在机器学习和自然语言处理中,embedding 是指将高维度的数据(例如文字、图片、音频)映射到低维度空间的过程。embedding 向量通常是一个由实数构成的向量,它将输入的数据表示成一个连续的数值空间中的点。简单来说,embedding 就是一个N维的实值向量,它几乎可以用来表示任何事情,如文本、音乐、视频等。

对数据进行 embedding 的目的在于保留数据的内容或者其含义的各个特征。和不相关的数据相比,相似数据的 embedding 的大小和方向更接近,因此可以用于表述文本的相关性。

Embedding 的应用场景:

Embedding 是一个浮点数类型的向量或列表。可以用向量之间的距离来测量它们的相关性:距离越小,表示相关性越高;距离越大,相关性越低。

3.1 获取 Embedding

可以根据 Embedding-V1 API 文档 的介绍,来获取基于百度文心大模型的字符串 Embedding。

还可以使用 列表 12.5 的方式来获取相同的基于文心大模型的 Embedding。

embeddings = QianfanEmbeddingsEndpoint()
query_result = embeddings.embed_query("你是谁?")
[0.02949424833059311, -0.054236963391304016, -0.01735987327992916, 
 0.06794580817222595, -0.00020318820315878838, 0.04264984279870987, 
 -0.0661700889468193, ……
 ……]

3.2 可视化

Embedding 一般是一种高维数据,为了将这种高维数据可视化,我们可以使用 t-SNE [1] 算法将数据进行降维,然后再做可视化处理。

利用 列表 12.9 对文档进行向量化,然后将向量数据存储于 Milvus 向量数据库中(默认采用的 Collection 为 LangChainCollection)。

可以通过 Milvus 提供的 HTTP API 来查看指定的 Collection 的结构:

http://{{MILVUS_URI}}/v1/vector/collections/describe?collectionName=LangChainCollection

图 3.1: Milvus向量数据的结构

列表 3.1: 向量数据可视化

#encoding: utf-8

"""
@discribe: demo for the embedding visualization.
@author: wangwei1237@gmail.com
"""

import matplotlib.pyplot as plt
import numpy as np
from pymilvus import connections
from pymilvus import Collection
from sklearn.manifold import TSNE

connections.connect(
  host='127.0.0.1',
  port='8081'
1)

2collection = Collection("LangChainCollection")

res = collection.query(
  expr = "pk >= 0",
  offset = 0,
  limit = 500, 
  output_fields = ["vector", "text", "source", "title"],
3)

4vector_list = [i["vector"] for i in res]

5matrix = np.array(vector_list)

tsne = TSNE(n_components=2, perplexity=15, random_state=42, init='random', learning_rate=200)
6vis_dims = tsne.fit_transform(matrix)

7plt.scatter(vis_dims[:, 0], vis_dims[:, 1])
plt.title("embedding visualized using t-SNE")
plt.show()
1
初始化 Milvus 链接
2
选择 LangChainCollection
3
从 LangChainCollection 中检索特定数据
4
只提取结果中的 vector 字段,并生成新的列表
5
将 python 列表转换成矩阵
6
对向量数据进行降维
7
对低维数据进行可视化

结果如 图 3.2 所示:

图 3.2: 向量数据可视化结果