Модель для расчетов эмбеддингов предложений на русском и английском языках получена методом дистилляции эмбеддингов
ai-forever/FRIDA
(размер эмбеддингов - 1536, слоёв - 24) в
sergeyzh/LaBSE-ru-turbo
(размер эмбеддингов - 768, слоёв - 12). Основной режим использования FRIDA - CLS pooling заменен на mean pooling. Каких-либо других изменений поведения модели не производилось. Дистиляция выполнена в максимально возможном объеме - эмбеддинги русских и английских предложений, работа префиксов.
Размер контекста модели соответствует FRIDA - 512 токенов.
Префиксы
Все префиксы унаследованы от FRIDA.
Оптимальный (обеспечивающий средние результаты) префикс для большинства задач - "categorize_entailment: " прописан по умолчанию в
config_sentence_transformers.json
Перечень используемых префиксов и их влияние на оценки модели в
encodechka
:
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel
defpool(hidden_state, mask, pooling_method="mean"):
if pooling_method == "mean":
s = torch.sum(hidden_state * mask.unsqueeze(-1).float(), dim=1)
d = mask.sum(axis=1, keepdim=True).float()
return s / d
elif pooling_method == "cls":
return hidden_state[:, 0]
inputs = [
# "paraphrase: В Ярославской области разрешили работу бань, но без посетителей",
"categorize_entailment: Женщину доставили в больницу, за ее жизнь сейчас борются врачи.",
"search_query: Сколько программистов нужно, чтобы вкрутить лампочку?",
# "paraphrase: Ярославским баням разрешили работать без посетителей",
"categorize_entailment: Женщину спасают врачи.",
"search_document: Чтобы вкрутить лампочку, требуется три программиста: один напишет программу извлечения лампочки, другой — вкручивания лампочки, а третий проведет тестирование."
]
tokenizer = AutoTokenizer.from_pretrained("sergeyzh/BERTA")
model = AutoModel.from_pretrained("sergeyzh/BERTA")
tokenized_inputs = tokenizer(inputs, max_length=512, padding=True, truncation=True, return_tensors="pt")
with torch.no_grad():
outputs = model(**tokenized_inputs)
embeddings = pool(
outputs.last_hidden_state,
tokenized_inputs["attention_mask"],
pooling_method="mean"
)
embeddings = F.normalize(embeddings, p=2, dim=1)
sim_scores = embeddings[:3] @ embeddings[3:].T
print(sim_scores.diag().tolist())
# [0.9530372023582458, 0.866746723651886, 0.7839133143424988]# [0.9360030293464661, 0.8591322302818298, 0.728583037853241] - FRIDA
Использование с
sentence_transformers
(sentence-transformers>=2.4.0):
from sentence_transformers import SentenceTransformer
# loads model with mean pooling
model = SentenceTransformer("sergeyzh/BERTA")
paraphrase = model.encode(["В Ярославской области разрешили работу бань, но без посетителей", "Ярославским баням разрешили работать без посетителей"], prompt="paraphrase: ")
print(paraphrase[0] @ paraphrase[1].T)
# 0.9530372# 0.9360032 - FRIDA
categorize_entailment = model.encode(["Женщину доставили в больницу, за ее жизнь сейчас борются врачи.", "Женщину спасают врачи."], prompt="categorize_entailment: ")
print(categorize_entailment[0] @ categorize_entailment[1].T)
# 0.8667469# 0.8591322 - FRIDA
query_embedding = model.encode("Сколько программистов нужно, чтобы вкрутить лампочку?", prompt="search_query: ")
document_embedding = model.encode("Чтобы вкрутить лампочку, требуется три программиста: один напишет программу извлечения лампочки, другой — вкручивания лампочки, а третий проведет тестирование.", prompt="search_document: ")
print(query_embedding @ document_embedding.T)
# 0.7839136# 0.7285831 - FRIDA
BERTA huggingface.co is an AI model on huggingface.co that provides BERTA's model effect (), which can be used instantly with this sergeyzh BERTA model. huggingface.co supports a free trial of the BERTA model, and also provides paid use of the BERTA. Support call BERTA model through api, including Node.js, Python, http.
BERTA huggingface.co is an online trial and call api platform, which integrates BERTA's modeling effects, including api services, and provides a free online trial of BERTA, you can try BERTA online for free by clicking the link below.
BERTA is an open source model from GitHub that offers a free installation service, and any user can find BERTA on GitHub to install. At the same time, huggingface.co provides the effect of BERTA install, users can directly use BERTA installed effect in huggingface.co for debugging and trial. It also supports api for free installation.