nlp——SentenceTransformer使用例子

本文介绍了如何从HuggingFace官网下载并使用sentence-transformers模型进行文本处理,包括加载预训练模型、平均池化获取句子嵌入,以及计算句子间的相似度。作者还展示了如何对用户评论进行嵌入操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hugging Face官网下载sentence-transformers模型

1、导入所需要的库

from transformers import AutoTokenizer, AutoModel
import numpy as np
import torch
import torch.nn.functional as F

2、加载预训练模型

path = 'D:/Model/sentence-transformers/all-MiniLM-L6-v2' 
tokenizer = AutoTokenizer.from_pretrained(path)
model = AutoModel.from_pretrained(path)

 3、定义平均池化

def mean_pooling(model_output, attention_mask):
    #First element of model_output contains all token embeddings
    token_embeddings = model_output[0]
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / 
                     torch.clamp(input_mask_expanded.sum(1), min=1e-9)

4、对句子进行嵌入

sentences = ['loved thisand know really bought wanted see pictures myselfIm lucky enough someone could justify buying present', 
             'issue pages stickers restuck really used configurations made regular pages rather taking pieces robot back', 
             'stickers dont stick well first time placing', 
             'Great fun grandson loves robots',
             'would suggest younger kids son 3']
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

with torch.no_grad():
    model_output = model(**encoded_input)

sentence_embeddings1 = mean_pooling(model_output, encoded_input['attention_mask'])
print("Sentence embeddings:")
print(sentence_embeddings1)
# Normalize embeddings
sentence_embeddings2 = F.normalize(sentence_embeddings1, p=2, dim=1)
print("Sentence embeddings:")
print(sentence_embeddings2)

5、运行结果

6、定义句子之间的相似度

def compute_sim_score(v1, v2) :
    return v1.dot(v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

7、计算句子相似度

#'issue pages stickers restuck really used configurations made regular pages rather taking pieces robot back'
#'stickers dont stick well first time placing'
compute_sim_score(sentence_embeddings1[1], sentence_embeddings1[2])
#result:tensor(0.5126)

8、看一下嵌入的shape

sentence_embeddings1.shape
#torch.Size([5, 384])

展望总结:

接下来试试对真实用户对项目的评论句子做嵌入

### 使用 paraphrase-MiniLM-L6-v2 模型进行句子嵌入和文本相似度计算 #### 句子嵌入基础 在自然语言处理NLP)领域,将文本数据转化为机器可读的形式是一项核心任务。`paraphrase-MiniLM-L6-v2` 是一种基于 `sentence-transformers` 库开发的模型,能够高效地将句子或段落映射至一个 384 维的密集向量空间[^1]。这种嵌入方法使得比较两个文本之间的语义相似性变得简单可行。 以下是具体的实现方式: #### 安装必要的库 首先需要确保已安装 Python 的 `sentence-transformers` 库。如果尚未安装,可以通过以下命令完成: ```bash pip install sentence-transformers ``` #### 加载模型 通过 `SentenceTransformer` 类可以从 Hugging Face Hub 中加载指定名称的预训练模型。对于 `paraphrase-MiniLM-L6-v2`,其代码如下所示: ```python from sentence_transformers import SentenceTransformer model_name = 'paraphrase-MiniLM-L6-v2' try: model = SentenceTransformer(model_name) print(f"{model_name} 模型加载成功!") except Exception as e: print(f"错误: {e}") print("请检查网络连接或者尝试手动下载模型文件。") ``` #### 获取句子嵌入 一旦模型被成功初始化后,就可以调用它的 `.encode()` 方法来获取输入字符串对应的固定长度向量表示形式。下面展示了一个简单的例子: ```python sentences = ["我喜欢吃苹果", "我讨厌吃梨"] embeddings = model.encode(sentences) for i, embedding in enumerate(embeddings): print(f"Sentence {i}: {embedding[:5]}...") # 打印前五个维度数值示意 ``` #### 文本相似度计算 有了这些高维特征向量之后,我们便能很方便地衡量任意两句话之间是否存在某种程度上的关联关系——即它们彼此间的余弦距离越接近于0,则说明两者越相近;反之亦然。 ```python import numpy as np from sklearn.metrics.pairwise import cosine_similarity similarity_matrix = cosine_similarity([embeddings[0]], embeddings[1:]) print(f"Cosine Similarity between sentences: {float(similarity_matrix):.4f}") ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值