bert、transformers、sentence-transformers关系

Transformer和RNN,CNN一样,是一种特征提取器,bert是使用了transformer的模型,transformers是汇总了很多使用Transformer模型的包,sentence-transformers则是是在transformers上面再进行了加工,用于求句子相识度

transformers:

  • 情感分析(Sentiment analysis):一段文本是正面还是负面的情感倾向
  • 文本生成(Text generation):给定一段文本,让模型补充后面的内容
  • 命名实体识别(Name entity recognition):识别文字中出现的人名地名的命名实体
  • 问答(Question answering):给定一段文本以及针对它的一个问题,从文本中抽取答案
  • 填词(Filling masked text):把一段文字的某些部分mask住,然后让模型填空
  • 摘要(Summarization):根据一段长文本中生成简短的摘要
  • 翻译(Translation):把一种语言的文字翻译成另一种语言
  • 特征提取(Feature extraction):把一段文字用一个向量来表示
import torch
from transformers  import AdamW
no_decay = ['bias', 'LayerNorm.weight']
optimizer_grouped_parameters = [
    {'params': [p for n, p in model.named_parameters() if not any(nd in n for nd in no_decay)], 'weight_decay': 0.01},
    {'params': [p for n, p in model.named_parameters() if any(nd in n for nd in no_decay)], 'weight_decay': 0.0}
]
optimizer = AdamW(optimizer_grouped_parameters, lr=1e-5)

labels = torch.tensor([1,0]).unsqueeze(0)
outputs = model(input_ids, attention_mask=attention_mask, labels=labels)
loss = outputs.loss
#调用一次backward和step就相当进行一次训练
loss.backward()
optimizer.step()

#也可以使用Trainer
from transformers import BertForSequenceClassification, Trainer, TrainingArguments
model = BertForSequenceClassification.from_pretrained("bert-large-uncased")
training_args = TrainingArguments(
        output_dir='./results',          # output directory
    num_train_epochs=3,              # total # of training epochs
    per_device_train_batch_size=16,  # batch size per device during training
    per_device_eval_batch_size=64,   # batch size for evaluation
    warmup_steps=500,                # number of warmup steps for learning rate scheduler
    weight_decay=0.01,               # strength of weight decay
    logging_dir='./logs',            # directory for storing logs
)
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=test_dataset
)
trainer.train()
trainer.evaluate()
# 训练模型:核心:models,输入数据(DataLoader),损失函数(losses),评估函数(evaluation)
from sentence_transformers import SentenceTransformer,models,InputExample,losses,evaluation
from torch.utils.data import  DataLoader 
word_embedding_model = models.Transformer(model_path)
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension())

model_path = r"E:\pycharm_project\xp-emb-train\xp-emb-train\models\chinese_roberta_L-4_H-256"
model = SentenceTransformer(model_path)

train_examples = [InputExample(texts=["my first example","my last example"],label=0.8)]
#定义训练数据
train_dataloader = DataLoader(sentence_examples,shuffle=True,batch_size=16)
#定义损失函数
train_loss = losses.CosineSimilarityLoss(model)
#模型训练
model.fit(train_objectives=[(train_dataloader, train_loss)], epochs=10, warmup_steps=100)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sentence-transformers是一种基于深度学习的工具,用于将自然语言句子转换为向量表示。以下是该工具的帮助文档: 1. 安装 要安装Sentence-transformers,请使用以下命令: pip install sentence-transformers 2. 使用 使用Sentence-transformers很简单。只需导入相应的模型和tokenizer,并将文本传递给模型即可。以下是一个示例: from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('bert-base-nli-mean-tokens') sentences = ['This is an example sentence', 'Each sentence is converted to a vector'] sentence_embeddings = model.encode(sentences) 3. 模型 Sentence-transformers包括许多不同的模型,包括基于BERT、RoBERTa和DistilBERT的模型。您可以使用以下命令查看所有可用的模型: from sentence_transformers import SentenceTransformer models = SentenceTransformer.models print(models) 4. 相似度计算 Sentence-transformers还包括一些实用程序函数,可用于计算句子之间的相似度。以下是一个示例: from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('bert-base-nli-mean-tokens') sentences = ['This is an example sentence', 'Each sentence is converted to a vector', 'Sentence embeddings are useful for many NLP tasks'] sentence_embeddings = model.encode(sentences) # 计算第一句话和第二句话之间的余弦相似度 cosine_scores = util.pytorch_cos_sim(sentence_embeddings[0], sentence_embeddings[1]) print(cosine_scores) 5. 参考文献 如果您想了解有关Sentence-transformers的更多信息,请参阅以下文献: - Reimers, N., & Gurevych, I. (2019). Sentence-BERT: Sentence embeddings using siamese BERT-networks. arXiv preprint arXiv:1908.10084. - Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值