ntencetransformer微调(simc模型为例)
简要介绍
ntence transformer是⼀个使⽤pytorch对常见语⾔模型进⾏封装,得到⼀个句⼦级别的embedder的python包。主要由基于transformer的预训练模型(⽣成句⼦中各个字的embedding)+pooing层(对句⼦中各个字的embedding选择⼀种⽅式⽣成句⼦的embedding)组成,如下图:
如何在⾃⼰的数据上finetune?
闲话:相⽐于单纯针对预训练模型的transformer包,ntence transformer的封装程度更⾼⼀些,但⼆者都是可以在huggingface上寻找别⼈训练好的预训练参数进⾏初始化。
主要就⼏步:
1. 读⾃⼰数据
def read_data(filepath):
texts_1=[]
with open(filepath,'r')as f:
adlines()
for line in lines:
place('\n','').split('\t')
texts_1.append(items[0])
return texts_1
train_texts_1=read_data('./')
怎么做炸酱面
print("训练集:",len(train_texts_1))
2. 使⽤datat、dataloader封装数据
train_data =[]
for idx in range(len(train_texts_1)):
train_data.append(InputExample(texts=[train_texts_1[idx], train_texts_1[idx]]))
# 定义微调的datat、dataloader、loss
from ntence_transformers import SentenceTransformer, SentencesDatat, InputExample, evaluation, loss, models
from torch.utils.data import DataLoader
train_datat = SentencesDatat(train_data, model)
train_dataloader = DataLoader(train_datat, shuffle=True, batch_size=32)
3. ⽣成模型并初始化
哀伤的反义词# 加载预训练模型
# ⽅式1
model = SentenceTransformer("cyclone/simc-chine-roberta-wwm-ext")
# ⽅式2
model_name ='cyclone/simc-chine-roberta-wwm-ext'
word_embedding_model = models.Transformer(model_name, max_q_length=64)
pooling_model = models.Pooling(word__word_embedding_dimension())
model = SentenceTransformer(modules=[word_embedding_model, pooling_model])
# 查看⼀下模型架构是否⼀样,⽽这并没有什么区别,都是按照上⾯的模型图:bert+pooling组成
print(model)
警校招生条件女生
4. 选择损失函数,simc这样的句⼦模型往往可以有监督或者⽆监督训练,使⽤ntence_transformer作为模型容器的话,这⾥选择
的loss类型就决定了模型的监督⽅式
# 有监督fintune时应该选择的loss类型,需要标签
train_loss = loss.CosineSimilarityLoss(model)
完全吸收# 定义测试器,有监督时
evaluator = evaluation.EmbeddingSimilarityEvaluator(test_texts_1,test_texts_2,test_labels)
# ⽆监督fintune的loss类型,不需要标签
train_loss = loss.MultipleNegativesRankingLoss(model)
狐狸面具图片
5. 训练、保存
# 微调训练
model.fit(train_objectives=[(train_dataloader, train_loss)],show_progress_bar=True, epochs=3, warmup_steps=500, output_path='./SaveModel')
如何使⽤finetune之后的模型
其实你不懂我的心歌词记住上⾯保存模型的路径,output_path=’./SaveModel’,使⽤时直接按照该路径加载模型参数即可
from ntence_transformers import SentenceTransformer, util
#微调后的模型
model = SentenceTransformer('./SaveModel')
新闻学专业
# model = SentenceTransformer('cyclone/simc-chine-roberta-wwm-ext')
emb1 = de("预备党员")
emb2 = de("正式党员")
emb3 = de("交纳党费")
cos_sim = util.pytorch_cos_sim(emb1, emb2)
cos_sim1 = util.pytorch_cos_sim(emb3, emb2)
桌面键盘print("Cosine-Similarity:", cos_sim,cos_sim1)
注意事项
model = SentenceTransformer(’./SaveModel’)加载后的模型对象有很多借⼝函数,建议需要的话去官⽹查看接⼝,这⾥仅仅⽤到了最基础的⼀些训练接⼝。
送你去官⽹