项目介绍:indo-sentence-bert-base
indo-sentence-bert-base是一个基于sentence-transformers的模型,可以将句子和段落映射到768维的密集向量空间。这些向量可以用于许多任务,如聚类或语义搜索。这个模型的优势在于能够高效地对来自印尼语的句子进行编码,便于在各种NLP应用中使用。
模型功能
indo-sentence-bert-base的主要功能是将印尼语句子转换为可用于计算机理解的向量表示。这些向量可以用于多种自然语言处理任务,例如:
- 句子相似度计算:通过比较词向量来判断两个句子在意思上的相似程度。
- 特征提取:将文本信息转化为数字特征,用于机器学习模型的输入。
- 语义搜索:根据查询语句在一组文本中找到语义相似的文段。
如何使用
使用Sentence-Transformers库
要使用indo-sentence-bert-base模型,首先需要安装sentence-transformers库:
pip install -U sentence-transformers
然后,可以通过以下Python代码来编码句子:
from sentence_transformers import SentenceTransformer
sentences = ["Ibukota Perancis adalah Paris",
"Menara Eifel terletak di Paris, Perancis",
"Pizza adalah makanan khas Italia",
"Saya kuliah di Carneige Mellon University"]
model = SentenceTransformer('firqaaa/indo-sentence-bert-base')
embeddings = model.encode(sentences)
print(embeddings)
使用HuggingFace Transformers库
如果不使用sentence-transformers,可以通过HuggingFace的Transformers库来实现类似功能。具体步骤包括:
- 使用预训练的分词器对句子进行编码。
- 计算词嵌入,通过平均池化得到句子嵌入。
示例代码如下:
from transformers import AutoTokenizer, AutoModel
import torch
def mean_pooling(model_output, attention_mask):
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)
sentences = ["Ibukota Perancis adalah Paris",
"Menara Eifel terletak di Paris, Perancis",
"Pizza adalah makanan khas Italia",
"Saya kuliah di Carneige Mellon University"]
tokenizer = AutoTokenizer.from_pretrained('firqaaa/indo-sentence-bert-base')
model = AutoModel.from_pretrained('firqaaa/indo-sentence-bert-base')
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
print("Sentence embeddings:")
print(sentence_embeddings)
模型评估
indo-sentence-bert-base模型的自动评估结果可以在Sentence Embeddings Benchmark中查看,该平台提供了多个指标来验证模型性能。
模型训练参数
该模型通过以下参数进行训练:
- 数据加载器:使用
NoDuplicatesDataLoader
,批量大小为16,数据长度为19644。 - 损失函数:采用
MultipleNegativesRankingLoss
,参数包括缩放比例20.0和余弦相似度函数。 - 其他参数:训练过程中使用AdamW优化器,学习率2e-05,共训练5个epoch。
模型架构
完整的模型架构包含一个BertTransformer和Pooling层:
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})
)
引用与作者信息
如果引用此模型或研究,请参考以下资料:
- 研究论文:Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks——Nils Reimers和Iryna Gurevych。
- 模型发布:由Firqa Arasyi发布于2022年9月,模型仓库地址为Huggingface repository。