Windows Anaconda使用Sentence-BERT获取句子向量

1、安装Anaconda

Anaconda是一个流行的Python数据科学平台,它包含了许多科学计算和数据分析的库,包括transformerssentence_transformers。虽然不是必需的,但使用Anaconda可以简化环境管理和依赖安装的过程。

可以从Anaconda官网下载并安装Anaconda。

下载地址:Download Now | Anaconda

2、创建虚拟环境(推荐)

为了避免不同项目之间的依赖冲突,建议为每个项目创建一个独立的虚拟环境。如果已经安装了Anaconda,可以使用以下命令创建虚拟环境:

复制代码
conda create --name sentence_bert_env python=3.8

激活名称为 sentence_bert_env 的虚拟环境:

复制代码
conda activate sentence_bert_env

3、安装必要的包

在虚拟环境中,通过pip安装transformerssentence_transformers库:

复制代码
pip install transformers sentence_transformers

默认情况下,pip 会从 pypi 的官方服务器下载包,这可能会因为网络问题导致速度较慢。可以切换到国内的镜像源来加速下载。

复制代码
pip install transformers sentence-transformers -i https://pypi.tuna.tsinghua.edu.cn/simple
常用国内镜像源

有时 pip 缓存可能会导致安装失败或变慢。可以清理缓存后重新安装:

复制代码
pip cache purge
pip install transformers sentence-transformers -i https://pypi.tuna.tsinghua.edu.cn/simple

4、加载预训练模型

sentence_transformers库中选择合适的预训练模型。例如,可以使用以下python代码新建load_model.py加载一个名为all-MiniLM-L6-v2的预训练模型,

复制代码
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')

网络不好会下载失败,这时候可以先下载好,在指定模型的路径(推荐)

官方下载地址:https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2

官方打不开可以用这个地址:Index of /reimers/sentence-transformers/v0.2/

复制代码
from sentence_transformers import SentenceTransformer
model_path = r"D:\models\all-MiniLM-L6-v2"
model = SentenceTransformer(model_path)

不同模型文件所需空间

模型名称 大小
all-MiniLM-L6-v2 ~90MB
paraphrase-MiniLM-L6-v2 ~90MB
bert-base-uncased ~440MB
roberta-base ~440MB
distilbert-base-uncased ~250MB

5、准备输入数据

将要处理的句子整理成一个列表,作为模型的输入。例如:

复制代码
sentences = ['This is a beautiful day.', 'I love spending time with my family.']

6、获取句子向量表示

使用加载的模型对输入句子进行编码,得到每个句子的向量表示。这些向量能够捕捉句子的语义信息,可以用于后续的各种NLP任务。例如:

复制代码
embeddings = model.encode(sentences)

for sentence, embedding in zip(sentences, embeddings):
    print(f"Sentence: {sentence}")
    print(f"Embedding: {embedding[:5]}... (维度: {len(embedding)})")

这将输出一个二维数组,其中包含了输入句子的向量表示。

完整的python代码:

复制代码
# 从sentence transformers中SentenceTransformer 模块
from sentence_transformers import SentenceTransformer

# 替换为你的本地模型路径
model_path = r"D:\models\all-MiniLM-L6-v2"
# 加载模型
model = SentenceTransformer(model_path)

# 测试模型
sentences = ['This is a beautiful day.', 'I love spending time with my family.']
embeddings = model.encode(sentences)

# 输出模型向量
for sentence, embedding in zip(sentences, embeddings):
    print(f"Sentence: {sentence}")
    print(f"Embedding: {embedding[:5]}... (维度: {len(embedding)})")

执行代码:

复制代码
 python load_model.py

7、应用向量表示

根据具体任务需求,使用得到的句子向量进行后续处理。例如,在文本相似度计算任务中,可以使用余弦相似度等度量方法来计算两个句子向量之间的相似度;在文本分类任务中,可以将句子向量输入到分类器中进行预测。

通过以上步骤,就能够在Windows系统上成功使用Sentence-BERT来处理自然语言处理任务。

有了向量数据就可以在elasticsearch中实现相识度搜索,可以使用es提供的knn进行相似度搜索,实现相似度推荐系统功能。

还有一点就是,不同的预训练模型计算出来的向量也是不一样的,如果使用中文的话,需要专门找中文的预训练模型把语句转为向量。

es文档:

向量字段类型:Dense vector field type | Elasticsearch Guide 8.6 | Elastic

查询语法:k-nearest neighbor (kNN) search | Elasticsearch Guide 8.6 | Elastic

参考文章:

Anaconda介绍、安装及使用保姆级教程-腾讯云开发者社区-腾讯云

解决Sentence Transformers中all-minilm-l6-v2等模型下载问题-CSDN博客

相关推荐
江畔柳前堤11 小时前
roLabelImg 详细安装教程
开发语言·人工智能·后端·云原生
阿里云大数据AI技术11 小时前
分链路差异化设计的DSP准实时数仓|钛动科技基于阿里云实时计算 Flink 版 + DLF Paimon + EMR Serverless StarRocks 的实践
人工智能·flink
陕西企来客11 小时前
2026年7月AI智能搜索曝光趋势研判
大数据·人工智能·机器学习·ai智能搜索曝光
阿里云大数据AI技术12 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO13 小时前
GEO技术服务选型指南
大数据·人工智能·python
阿里云大数据AI技术13 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架13 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab13 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI13 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
冬奇Lab13 小时前
【无标题】
人工智能·开源