大模型之词嵌入模型实现文本向量化
文章目录
- 开源的模型
- 开源模型下载地址
- 词嵌入模型的使用
开源的模型
- 通用领域模型
-
all-MiniLM-L6-v2,Sentence-Transformers的高效轻量级模型。在许多通用任务上表现优异,适用于快速验证和轻量级应用;384维度,速度快,资源消耗低。
-
all-mpnet-base-v2,Sentence-Transformers 的模型,比 MiniLM 更大更强,提供更好的精度;768维度,精度高,速度比 MiniLM 慢,但仍是平衡性能与效率的优选。
-
BGE (BAAI General Embedding) 系列,是当前中文和英文任务上表现最出色的开源模型系列之一,非常适用于生产环境。
代表模型:
BGE-large-en-v1.5 / BGE-base-en-v1.5,英文SOTA模型。
BGE-large-zh-v1.5 / BGE-base-zh-v1.5,中文SOTA模型。 -
BGE-M3:最新推出的模型,支持多语言、多粒度、多功能(检索、稀疏、多向量),非常强大。
-
E5 系列,性能顶尖
代表模型:E5-large-v2, E5-base-v2, multilingual-e5-large(多语言)
-
- 多语言模型
-
paraphrase-multilingual-MiniLM-L12-v2
Sentence-Transformers 的多语言版本,支持50多种语言。如果文档包含多种语言,这是一个很好的选择。
维度:384维 -
multilingual-e5-large
E5 的多语言版本,支持100多种语言,性能非常强劲。 -
BGE-M3,支持多语言,并且功能更多。
-
- 领域特定模型
-
ClinicalBERT / BioBERT:适用于生物医学、临床文档领域。
-
LegalBERT:适用于法律文档领域。
-
CodeBERT:适用于编程代码检索。
-
GTE(General Text Embeddings):由阿里云达摩院推出,有 base 和 large 版本,在通用文本嵌入任务上表现良好。
-
开源模型下载地址
Hugging Face 模型库地址:
-
all-MiniLM-L6-v2
-
all-mpnet-base-v2
-
BGE (BAAI General Embedding) 系列
BGE-large-en-v1.5 (英文, 大型)
BGE-base-en-v1.5 (英文, 基础)
BGE-large-zh-v1.5 (中文, 大型)
BGE-base-zh-v1.5 (中文, 基础)
BGE-M3 (最新多语言多功能模型)
词嵌入模型的使用
- 方法1,使用 sentence-transformers 库
- 专为 sentence embeddings 设计的,封装了所有细节,使用非常简单。
- 安装 pip install sentence-transformers
- 使用方式
from sentence_transformers import SentenceTransformer# 选择模型名称
model_name = "sentence-transformers/all-MiniLM-L6-v2" # 或者 "BAAI/bge-large-zh-v1.5"# 加载模型(首次运行会自动下载)
model = SentenceTransformer(model_name)# 生成嵌入向量
sentences = ["这是一个示例句子。", "这是另一个句子。"] # or text_splitter分割的文本片段
embeddings = model.encode(sentences)
print(embeddings.shape) # 输出 (2, 384) 2行 384列
- 方法2,使用 Hugging Face的
transformers
库- 安装 ,pip install transformers
- 使用模型
from transformers import AutoTokenizer, AutoModel
import torch # pip install torch, 即pytorch
from torch.nn.functional import normalize # 归一化# 选择模型名称
model_name = "BAAI/bge-large-zh-v1.5"# 加载分词器(首次运行会自动下载)
tokenizer = AutoTokenizer.from_pretrained(model_name)# 加载模型
model = AutoModel.from_pretrained(model_name)# 处理输入并生成嵌入向量
sentences = ["这是一个示例句子。", "这是另一个句子。"]# 对输入进行分词
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')# 计算嵌入
with torch.no_grad():model_output = model(**encoded_input)# 对 token embeddings 进行均值池化(Mean Pooling)来得到 sentence embeddingsentence_embeddings = model_output[0][:, 0]# 或者更标准的均值池化方法:# attention_mask = encoded_input['attention_mask']# sentence_embeddings = mean_pooling(model_output, attention_mask)# 对 embeddings 进行归一化(BGE 等模型推荐)
sentence_embeddings = normalize(sentence_embeddings, p=2, dim=1)
print(sentence_embeddings.shape)
如果无法连接huggingface的官网,可以提前下载模型,并使用。