如何将HuggingFaceEmbeddings的向量嵌入维度从768改为1536?
如何将HuggingFaceEmbeddings的输出维度改为1536?
默认情况下,HuggingFaceEmbeddings使用sentence-transformers/all-MiniLM-L6-v2模型,输出维度固定为768。要得到1536维的向量,核心思路是更换原生支持1536维输出的模型,或通过其他方式扩展/调整维度,以下是具体实现方案:
方案一:使用原生1536维闭源模型(推荐)
如果可以使用OpenAI的闭源Embedding服务,text-embedding-3-small模型原生输出1536维向量,只需切换到OpenAIEmbeddings即可:
from langchain_openai import OpenAIEmbeddings # 需提前设置OPENAI_API_KEY环境变量 embeddings = OpenAIEmbeddings(model="text-embedding-3-small") text = ["This is a test document.", "This is a second document which is text."] vectors = embeddings.embed_documents(text) print(f"向量维度:{len(vectors[0])}") # 输出1536
方案二:基于开源模型降维到1536维
目前主流开源Embedding模型多为768、1024或4096维,无广泛使用的原生1536维开源模型。可选择高维度开源模型,通过PCA降维到目标维度:
from langchain_community.embeddings import HuggingFaceEmbeddings from sklearn.decomposition import PCA import numpy as np # 初始化4096维的开源模型 embeddings = HuggingFaceEmbeddings(model_name="intfloat/e5-mistral-7b-instruct") text = ["This is a test document.", "This is a second document which is text."] high_dim_vectors = embeddings.embed_documents(text) # PCA降维到1536 pca = PCA(n_components=1536) low_dim_vectors = pca.fit_transform(np.array(high_dim_vectors)) print(f"降维后维度:{low_dim_vectors.shape[1]}") # 输出1536
方案三:向量拼接扩展维度(不推荐)
将两个不同的768维Embedding模型输出拼接,得到1536维向量,但会损失部分语义一致性,仅作备选:
from langchain_community.embeddings import HuggingFaceEmbeddings import numpy as np # 初始化两个不同的768维模型 embeddings1 = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2") embeddings2 = HuggingFaceEmbeddings(model_name="sentence-transformers/paraphrase-mpnet-base-v2") text = ["This is a test document.", "This is a second document which is text."] vec1 = embeddings1.embed_documents(text) vec2 = embeddings2.embed_documents(text) # 拼接向量得到1536维 combined_vectors = [np.concatenate([v1, v2]) for v1, v2 in zip(vec1, vec2)] print(f"拼接后维度:{len(combined_vectors[0])}") # 输出1536
注意事项
- 原生1536维模型的语义表征效果最优,降维或拼接方式会损失部分信息,仅在无法使用闭源模型时考虑。
- 使用大尺寸开源模型时,需确保硬件有足够显存支撑。
内容的提问来源于stack exchange,提问作者Harshal Pal
相关产品推荐
相关产品推荐

