什么是 Embedding?
在机器学习和自然语言处理领域,"embedding" 指的是一种将高维数据(例如文本、图像、音频)转换成低维空间表示的过程。 这种低维表示通常是一个实数向量,将原始数据映射到连续的数值空间中的一个点。 简单来说,embedding 就是一个 N 维的实值向量,它可以用来表示几乎任何事物,比如文本、音乐、视频等。
对数据进行 embedding 的目的在于保留原始数据的内容或其关键特征。 与不相关的数据相比,相似数据的 embedding 在大小和方向上会更加接近,因此 embedding 可以用来衡量文本的相关性。
Embedding 的应用场景非常广泛,包括:
- 搜索: 根据与搜索关键词的相关性对结果进行排序。
- 聚类: 将数据按照相似性进行分组。
- 推荐: 推荐与用户过去互动相关的内容。
- 分类: 根据数据与已知标签的相似性进行分类。
- 异常检测: 识别出与其他数据相关性较低的异常值。
Embedding 本质上是一个浮点数向量或列表。 向量之间的距离可以用来衡量它们的相关性:距离越小,相关性越高;距离越大,相关性越低。
如何获取 Embedding
你可以参考 Embedding-V1 API 文档 来获取基于百度文心大模型的字符串 Embedding。
此外,你也可以使用如下代码 @lst-langchain_embed_query_wx 获取基于文心大模型的 Embedding:
python
embeddings = QianfanEmbeddingsEndpoint()
query_result = embeddings.embed_query("你是谁?")
输出结果示例如下:
bash
[0.02949424833059311, -0.054236963391304016, -0.01735987327992916,
0.06794580817222595, -0.00020318820315878838, 0.04264984279870987,
-0.0661700889468193, ……
……]
Embedding 可视化
Embedding 通常是高维数据。 为了可视化这些高维数据,我们可以使用 t-SNE [-@tsne_online] 算法进行降维,然后再进行可视化处理。
以下代码 @lst-langchain_milvus_embedding 展示了如何对文档进行向量化,并将向量数据存储到 Milvus 向量数据库(默认 Collection 为 LangChainCollection)。
你可以通过 Milvus 提供的 HTTP API 查看指定 Collection 的结构:
bash
http://{{MILVUS_URI}}/v1/vector/collections/describe?collectionName=LangChainCollection
这段代码主要完成以下步骤:
- 初始化 Milvus 连接。
- 选择 LangChainCollection。
- 从 LangChainCollection 中检索特定数据。
- 提取结果中的 vector 字段,并生成新的列表。
- 将 Python 列表转换为矩阵。
- 对向量数据进行降维。
- 对降维后的数据进行可视化。
可视化结果如图 @fig-vfe 所示: