项目介绍:bert-base-portuguese-cased-nli-assin-2
bert-base-portuguese-cased-nli-assin-2是一个基于sentence-transformers
的模型,设计用于将句子和段落映射到768维的密集向量空间。这种功能使得它能够应用于如聚类和语义搜索等任务。
使用sentence-transformers
库
安装sentence-transformers
库后,用户可以轻松应用该模型:
pip install -U sentence-transformers
安装后,使用模型的Python代码如下:
from sentence_transformers import SentenceTransformer
sentences = ["这是一个示例句子", "每个句子将被转换"]
model = SentenceTransformer('bert-base-portuguese-cased-nli-assin-2')
embeddings = model.encode(sentences)
print(embeddings)
使用HuggingFace Transformers
如果不使用sentence-transformers
库,用户也可以通过HuggingFace Transformers
库来使用该模型。这个过程需要手动执行pooling操作以从上下文词的嵌入中提取句子嵌入。
from transformers import AutoTokenizer, AutoModel
import torch
# Mean Pooling - 在聚合平均时考虑注意力掩码
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # model_output的第一个元素包含所有token的嵌入
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)
# 我们希望获得句子嵌入的句子
sentences = ['这是一个示例句子', '每个句子将被转换']
# 从HuggingFace Hub加载模型
tokenizer = AutoTokenizer.from_pretrained('bert-base-portuguese-cased-nli-assin-2')
model = AutoModel.from_pretrained('bert-base-portuguese-cased-nli-assin-2')
# 对句子进行标记化
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# 计算token嵌入
with torch.no_grad():
model_output = model(**encoded_input)
# 执行pooling操作。在此例中,使用的是mean pooling。
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
print("句子嵌入:")
print(sentence_embeddings)
模型评估结果
用户可在Sentence Embeddings Benchmark中查看该模型的自动化评估结果:Sentence Embeddings Benchmark。
模型训练
该模型的训练参数包括:
- 数据加载器:使用长度为407的
torch.utils.data.dataloader.DataLoader
,批大小为16,采用随机采样器。 - 损失函数:使用
SoftmaxLoss
。 - 优化器:使用
AdamW
优化器,学习率为2e-05,权重衰减为0.01。 - 学习调度:采用
WarmupLinear
调度策略,热身步数为41。
完整模型架构
该模型的完整架构如下:
SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
)
引用与作者
有关更多信息及其引用格式,用户可以参考相关文献及资源。