sentence_transformers模型无法直接下载的解决方案

诸神缄默不语-个人优快云博文目录

本文介绍使用sentence_transformers包(官网:https://huggingface.co/sentence-transformers)时,直接调用模型名称无法下载模型的解决方案。
其实跟transformers包差不多,都是把文件下载到本地然后直接使用路径加载模型。

一开始我用的代码是:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')

好几次都在下载了一小部分之后失败了。

所以改为提前将模型下载到本地(wget稳定性更强,可以无限retry,我下pytorch_model.bin重试了8次):

  1. 这个模型的网址很容易找到:https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2
  2. 挨个下载文件到本地:
mkdir /data/pretrained_model/all-MiniLM-L6-v2
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/pytorch_model.bin
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/data_config.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/config_sentence_transformers.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/modules.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/sentence_bert_config.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/special_tokens_map.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/tokenizer.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/tokenizer_config.json
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/train_script.py
wget -P /data/pretrained_model/all-MiniLM-L6-v2 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/vocab.txt
mkdir /data/pretrained_model/all-MiniLM-L6-v2/1_Pooling
wget -P /data/pretrained_model/all-MiniLM-L6-v2/1_Pooling https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/1_Pooling/config.json

然后代码直接改成:

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('/data/pretrained_model/all-MiniLM-L6-v2')

其他一切不变即可。

### 如何在Python中使用SentenceTransformer加载`paraphrase-multilingual-mpnet`模型 为了正确加载并使用 `SentenceTransformer` 中的 `paraphrase-multilingual-mpnet` 模型,需先安装必要的库,并按照以下方法实现。以下是完整的解决方案: #### 安装依赖项 首先需要确保已安装 `sentence-transformers` 和其他必要库: ```bash pip install sentence-transformers torch transformers ``` #### 加载模型 通过 `SentenceTransformer` 类来加载指定的预训练模型 `paraphrase-multilingual-mpnet-base-v2`[^1]。 ```python from sentence_transformers import SentenceTransformer model_name = "paraphrase-multilingual-mpnet-base-v2" model = SentenceTransformer(model_name) ``` 上述代码片段会下载并缓存模型文件至本地目录以便后续调用。 #### 获取句子嵌入向量 定义一个函数用于计算给定文本的句向量表示形式。此过程涉及分词器编码输入数据以及无梯度上下文中执行前向传播操作以获取隐藏状态平均值作为最终特征表达。 ```python import torch.nn.functional as F import torch def mean_pooling(model_output): return torch.mean(model_output["last_hidden_state"], dim=1) def get_sentence_embedding(text): encoded_input = model.tokenizer(text, return_tensors="pt", padding=True, truncation=True) with torch.no_grad(): model_output = model(**encoded_input) sentence_embeddings = mean_pooling(model_output) normalized_embeddings = F.normalize(sentence_embeddings, p=2, dim=1) return normalized_embeddings embedding = get_sentence_embedding("今天天气很好") print(embedding[0][:5]) ``` 以上脚本展示了如何利用自定义池化策略生成标准化后的句子嵌入向量。注意这里我们还加入了填充(padding)和截断(truncation),使得不同长度的句子能够被统一处理成固定大小张量供下游任务消费[^3]。 #### 计算相似度分数 如果希望评估两句话之间的语义相近程度,则可以通过余弦距离衡量它们对应向量间的夹角关系得出结论: ```python text_1 = "今天的阳光非常灿烂" text_2 = "天空湛蓝,万里无云" emb1 = get_sentence_embedding(text_1) emb2 = get_sentence_embedding(text_2) cosine_similarity = torch.dot(emb1.squeeze(), emb2.squeeze()) print(f"Cosine Similarity Score: {cosine_similarity.item()}") ``` 这段程序打印出了两个中文短语间基于BERT变体所提取表征空间位置角度差别的量化指标。 --- ###
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值