提升句子相似度与语义搜索的句子转换 器
模型将句子和段落转换为768维向量,用于聚类和语义搜索等任务。可通过安装sentence-transformers库或直接调用HuggingFace Transformers进行操作。采用SoftmaxLoss训练,并通过EmbeddingSimilarityEvaluator评估,结合BertModel与句子池化实现高效转换。
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。
该模型的训练参数包括:
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})
)
有关更多信息及其引用格式,用户可以参考相关文献及资源。