/ Модель

Характеристики

Контекст
512 токенов
Параметры
138 млн
Лицензия
CC BY-SA 4.0
Архитектура
bert · dense
Опубликована
29 мар 2024

splade-japanese-v3

Заполнение пропусковТекст → текст3 профессии

Японская модель семейства SPLADE на базе BERT для расширения терминов и поиска релевантных документов по запросам.

257скачиваний за 30 дней10лайковвеса обновлены22 мая 2024

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

aken12/splade-japanese-v3 — японская версия SPLADE, представленная в карточке с результатами поиска по MIRACL и JQaRA. Модель основана на архитектуре BERT с классом BertForMaskedLM, содержит 138,4 млн параметров и принимает последовательности длиной до 512 токенов. В README показаны результаты оценки японского поиска и возможность исследовать расширение и взвешивание слов в запросах и документах.

Модель предназначена для формирования разреженных представлений с расширением терминов, чтобы находить японские документы по запросу. На JQaRA указаны метрики nDCG@10 0,505 и MRR@10 0,772; на MIRACL приведены результаты вариантов семейства SPLADE. Метаданные помечают модель задачей fill-mask, но представленные в README сценарии ориентированы на информационный поиск и ранжирование. Лицензия — CC BY-SA 4.0.

Сценарии применения

  • поиск японских документов по запросу
  • расширение японских поисковых запросов терминами
  • построение разреженных представлений запросов и документов
  • ранжирование японских документов в поисковой системе

Ограничения

Указанные в README результаты относятся к конкретным японским тестовым наборам и не гарантируют аналогичное качество на других корпусах. Контекст ограничен 512 токенами.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Evaluation on MIRACL japanese

These models don't train on the MIRACL training data.

ModelnDCG@10Recall@1000Recall@5Recall@30
BM250.3690.931--
splade-japanese0.4050.9310.4060.663
splade-japanese-efficient0.4080.9540.4190.718
splade-japanese-v20.5800.9670.6290.844
splade-japanese-v2-doc0.4780.9300.5140.759
splade-japanese-v30.6040.9790.6470.877

*'splade-japanese-v2-doc' model does not require query encoder during inference.

Evaluation on hotchpotch/JQaRA

JQaRa
NDCG@10MRR@10NDCG@100MRR@100
splade-japanese-v30.5050.7720.70.775
JaColBERTv20.5850.8360.7530.838
JaColBERT0.5490.8110.7300.814
bge-m3+all0.5760.8180.7450.820
bg3-m3+dense0.5390.7850.7210.788
m-e5-large0.5540.7990.7310.801
m-e5-base0.4710.7270.6730.731
m-e5-small0.4920.7290.6890.733
GLuCoSE0.3080.5180.5640.527
sup-simcse-ja-base0.3240.5410.5720.550
sup-simcse-ja-large0.3560.5750.5960.583
fio-base-v0.10.3720.6160.6080.622

下のコードを実行すれば,単語拡張や重み付けの確認ができます.

If you'd like to try it out, you can see the expansion of queries or documents by running the code below.

you need to install

!pip install fugashi ipadic unidic-lite
from transformers import AutoModelForMaskedLM,AutoTokenizer
import torch
import numpy as np

model = AutoModelForMaskedLM.from_pretrained("aken12/splade-japanese-v3") 
tokenizer = AutoTokenizer.from_pretrained("aken12/splade-japanese-v3")
vocab_dict = {v: k for k, v in tokenizer.get_vocab().items()}

def encode_query(query): ##query passsage maxlen: 32,180
    query = tokenizer(query, return_tensors="pt")
    output = model(**query, return_dict=True).logits
    output, _ = torch.max(torch.log(1 + torch.relu(output)) * query['attention_mask'].unsqueeze(-1), dim=1)
    return output

with torch.no_grad():
    model_output = encode_query(query="筑波大学では何の研究が行われているか?")

reps = model_output
idx = torch.nonzero(reps[0], as_tuple=False)

dict_splade = {}
for i in idx:
    token_value = reps[0][i[0]].item()
    if token_value > 0:
        token = vocab_dict[int(i[0])]
        dict_splade[token] = float(token_value)

sorted_dict_splade = sorted(dict_splade.items(), key=lambda item: item[1], reverse=True)
for token, value in sorted_dict_splade:
    print(token, value)

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · fill-mask

Можно запустить

Подбираем GPU…

Класс архитектуры
BertForMaskedLM
Ревизия весов
9b65d86

0 моделей