🚀 多语言SimCSE
多语言SimCSE是一个对比学习模型,通过使用不同语言的平行句子对,将文本映射到相同的向量空间进行预训练,类似于SimCSE模型。
🚀 快速开始
环境准备
首先,你需要安装必要的库,可使用以下命令:
pip install transformers torch
运行示例代码
以下是使用多语言SimCSE模型计算文本相似度的示例代码:
from transformers import AutoModel,AutoTokenizer
import torch
from torch.nn import functional as F
model = AutoModel.from_pretrained('WENGSYX/Multilingual_SimCSE')
tokenizer = AutoTokenizer.from_pretrained('WENGSYX/Multilingual_SimCSE')
word1 = tokenizer('Hello,world.',return_tensors='pt')
word2 = tokenizer('你好,世界',return_tensors='pt')
out1 = model(**word1).last_hidden_state.mean(1)
out2 = model(**word2).last_hidden_state.mean(1)
print(F.cosine_similarity(out1,out2))
----------------------------------------------------
tensor([0.8758], grad_fn=<DivBackward0>)
✨ 主要特性
- 多语言支持:通过使用平行语言对进行训练,能够处理多种语言的文本。
- 对比学习:采用对比学习的方法,将不同语言的文本映射到相同的向量空间,便于跨语言的语义理解。
📦 安装指南
要使用多语言SimCSE模型,你可以使用transformers
库进行安装:
pip install transformers
💻 使用示例
基础用法
from transformers import AutoModel,AutoTokenizer
import torch
from torch.nn import functional as F
model = AutoModel.from_pretrained('WENGSYX/Multilingual_SimCSE')
tokenizer = AutoTokenizer.from_pretrained('WENGSYX/Multilingual_SimCSE')
word1 = tokenizer('Hello,world.',return_tensors='pt')
word2 = tokenizer('你好,世界',return_tensors='pt')
out1 = model(**word1).last_hidden_state.mean(1)
out2 = model(**word2).last_hidden_state.mean(1)
print(F.cosine_similarity(out1,out2))
高级用法
以下是训练多语言SimCSE模型的示例代码:
from transformers import AutoModel,AutoTokenizer,AdamW
import torch
from torch.nn import functional as F
model = AutoModel.from_pretrained('WENGSYX/Multilingual_SimCSE')
tokenizer = AutoTokenizer.from_pretrained('WENGSYX/Multilingual_SimCSE')
optimizer = AdamW(model.parameters(),lr=1e-5)
def compute_loss(y_pred, t=0.05, device="cuda"):
idxs = torch.arange(0, y_pred.shape[0], device=device)
y_true = idxs + 1 - idxs % 2 * 2
similarities = F.cosine_similarity(y_pred.unsqueeze(1), y_pred.unsqueeze(0), dim=2)
similarities = similarities - torch.eye(y_pred.shape[0], device=device) * 1e12
similarities = similarities / t
loss = F.cross_entropy(similarities, y_true)
return torch.mean(loss)
wordlist = [['Hello,world','你好,世界'],['Pensa che il bianco rappresenti la purezza.','Он думает, что белые символизируют чистоту.']]
input_ids, attention_mask, token_type_ids = [], [], []
for x in wordlist:
text1 = tokenizer(x[0], padding='max_length', truncation=True, max_length=512)
input_ids.append(text1['input_ids'])
attention_mask.append(text1['attention_mask'])
text2 = tokenizer(x[1], padding='max_length', truncation=True, max_length=512)
input_ids.append(text2['input_ids'])
attention_mask.append(text2['attention_mask'])
input_ids = torch.tensor(input_ids,device=device)
attention_mask = torch.tensor(attention_mask,device=device)
output = model(input_ids=input_ids,attention_mask=attention_mask)
output = output.last_hidden_state.mean(1)
loss = compute_loss(output)
loss.backward()
optimizer.step()
optimizer.zero_grad()
🔧 技术细节
- 预训练模型:使用mDeBERTa模型加载预训练参数。
- 训练数据集:基于CCMatrix数据集进行预训练,训练数据包含1亿个平行对。
- 训练设备:使用4 * 3090进行训练。
📄 信息表格
属性 |
详情 |
模型类型 |
多语言对比学习模型 |
预训练模型 |
mDeBERTa |
训练数据 |
1亿个平行对,来自CCMatrix数据集 |
训练设备 |
4 * 3090 |