🚀 多語言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 |