Safetensors
Japanese
bert
File size: 8,085 Bytes
f5cca3e
 
 
 
 
13f391a
f5cca3e
 
 
 
5b98bfd
f5cca3e
 
13f391a
f5cca3e
c8f6b66
1bafe82
f5cca3e
bb72da9
 
f5cca3e
13f391a
f5cca3e
13f391a
f5cca3e
13f391a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c741023
 
 
 
1f216c0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
---
license: mit
datasets:
- hpprc/emb
- hotchpotch/hpprc_emb-scores
- microsoft/ms_marco
language:
- ja
base_model:
- tohoku-nlp/bert-base-japanese-v3
new_version: hotchpotch/japanese-splade-v2
---

高性能な日本語 [SPLADE](https://github.com/naver/splade) (Sparse Lexical and Expansion Model) モデルです。[テキストからスパースベクトルへの変換デモ](https://huggingface.co/spaces/hotchpotch/japanese-splade-demo-streamlit)で、どのようなスパースベクトルに変換できるか、WebUI から気軽にお試しいただけます。

- [高性能な日本語SPLADE(スパース検索)モデルを公開しました](https://secon.dev/entry/2024/10/07/100000/)
- [SPLADE モデルの作り方・日本語SPLADEテクニカルレポート](https://secon.dev/entry/2024/10/23/080000-japanese-splade-tech-report/)

また、モデルの学習には[YAST - Yet Another SPLADE or Sparse Trainer](https://github.com/hotchpotch/yast)を使っています。


# 利用方法

## [YASEM (Yet Another Splade|Sparse Embedder)](https://github.com/hotchpotch/yasem)

```bash
pip install yasem
```

```python
from yasem import SpladeEmbedder

model_name = "hotchpotch/japanese-splade-base-v1"
embedder = SpladeEmbedder(model_name)

sentences = [
  "車の燃費を向上させる方法は?",
  "急発進や急ブレーキを避け、一定速度で走行することで燃費が向上します。",
  "車を長持ちさせるには、消耗品を適切なタイミングで交換することが重要です。",
]

embeddings = embedder.encode(sentences)
similarity = embedder.similarity(embeddings, embeddings)

print(similarity)
# [[21.49299249 10.48868281  6.25582337]
#  [10.48868281 12.90587398  3.19429791]
#  [ 6.25582337  3.19429791 12.89678271]]
```

```python
token_values = embedder.get_token_values(embeddings[0])

print(token_values)

#{
#    '車': 2.1796875,
#    '燃費': 2.146484375,
#    '向上': 1.7353515625,
#    '方法': 1.55859375,
#    '燃料': 1.3291015625,
#    '効果': 1.1376953125,
#    '良い': 0.873046875,
#    '改善': 0.8466796875,
#    'アップ': 0.833984375,
#    'いう': 0.70849609375,
#    '理由': 0.64453125,
# ...
```

## transformers

```python

from transformers import AutoModelForMaskedLM, AutoTokenizer
import torch

model = AutoModelForMaskedLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

def splade_max_pooling(logits, attention_mask):
    relu_log = torch.log(1 + torch.relu(logits))
    weighted_log = relu_log * attention_mask.unsqueeze(-1)
    max_val, _ = torch.max(weighted_log, dim=1)
    return max_val

tokens = tokenizer(
    sentences, return_tensors="pt", padding=True, truncation=True, max_length=512
)
tokens = {k: v.to(model.device) for k, v in tokens.items()}

with torch.no_grad():
    outputs = model(**tokens)
embeddings = splade_max_pooling(outputs.logits, tokens["attention_mask"])

similarity = torch.matmul(embeddings.unsqueeze(0), embeddings.T).squeeze(0)
print(similarity)

# tensor([[21.4943, 10.4816,  6.2540],
#         [10.4816, 12.9024,  3.1939],
#         [ 6.2540,  3.1939, 12.8919]])
```

# ベンチマークスコア

## retrieval (JMTEB)

[JMTEB](https://github.com/sbintuitions/JMTEB) の評価結果です。japanese-splade-base-v1 は [JMTEB をスパースベクトルで評価できるように変更したコード](https://github.com/hotchpotch/JMTEB/tree/add_splade)での評価となっています。 
なお、japanese-splade-base-v1 は jaqket, mrtydi のドメインを学習(testのデータ以外)しています。

| model_name                                                                 |  Avg.   | jagovfaqs_22k | jaqket | mrtydi | nlp_journal_abs_intro | nlp_journal_title_abs | nlp_journal_title_intro |
| :------------------------------------------------------------------------- | ------: | ------------: | -----: | -----: | ---------------------: | ---------------------: | -----------------------: |
| [japanese-splade-base-v1](https://huggingface.co/hotchpotch/japanese-splade-base-v1) | **0.7465** | 0.6499        | **0.6992** | **0.4365** | 0.8967                | **0.9766**            | 0.8203                  |
| [text-embedding-3-large](https://huggingface.co/OpenAI/text-embedding-3-large) | 0.7448 | 0.7241        | 0.4821 | 0.3488 | **0.9933**            | 0.9655                | **0.9547**              |
| [GLuCoSE-base-ja-v2](https://huggingface.co/pkshatech/GLuCoSE-base-ja-v2) | 0.7336 | 0.6979        | 0.6729 | 0.4186 | 0.9029                | 0.9511                | 0.7580                  |
| [multilingual-e5-large](https://huggingface.co/intfloat/multilingual-e5-large) | 0.7098 | 0.7030        | 0.5878 | 0.4363 | 0.8600                | 0.9470                | 0.7248                  |
| [multilingual-e5-small](https://huggingface.co/intfloat/multilingual-e5-small) | 0.6727 | 0.6411        | 0.4997 | 0.3605 | 0.8521                | 0.9526                | 0.7299                  |
| [ruri-large](https://huggingface.co/cl-nagoya/ruri-large)                       | 0.7302 | **0.7668**    | 0.6174 | 0.3803 | 0.8712                | 0.9658                | 0.7797                  |


## reranking

### [JaCWIR](https://huggingface.co/datasets/hotchpotch/JaCWIR)

なお、japanese-splade-base-v1 は **JaCWIR のドメインを学習していません**

| model_names                                                                     | map@10 | hit_rate@10 |
| :------------------------------------------------------------------------------ | -----: | ----------: |
| [japanese-splade-base-v1](https://huggingface.co/hotchpotch/japanese-splade-base-v1) |   **0.9122** |        **0.9854** |
| [text-embedding-3-small](https://platform.openai.com/docs/guides/embeddings)    | 0.8168 |      0.9506 |
| [GLuCoSE-base-ja-v2](https://huggingface.co/pkshatech/GLuCoSE-base-ja-v2)       | 0.8567 |      0.9676 |
| [bge-m3+dense](https://huggingface.co/BAAI/bge-m3)                              | 0.8642 |      0.9684 |
| [multilingual-e5-large](https://huggingface.co/intfloat/multilingual-e5-large)  | 0.8759 |      0.9726 |
| [multilingual-e5-small](https://huggingface.co/intfloat/multilingual-e5-small)  |  0.869 |        0.97 |
| [ruri-large](https://huggingface.co/cl-nagoya/ruri-large)                       | 0.8291 |      0.9594 |

### [JQaRA](https://github.com/hotchpotch/JQaRA)
なお、japanese-splade-base-v1 は JQaRA のドメイン(test以外)を学習したものとなっています。

| model_names                                                                     | ndcg@10 | mrr@10 |
| :------------------------------------------------------------------------------ | ------: | -----: |
| [japanese-splade-base-v1](https://huggingface.co/hotchpotch/japanese-splade-base-v1) |    **0.6441** |   **0.8616** |
| [text-embedding-3-small](https://platform.openai.com/docs/guides/embeddings)    |  0.3881 | 0.6107 |
| [bge-m3+dense](https://huggingface.co/BAAI/bge-m3)                              |   0.539 | 0.7854 |
| [multilingual-e5-large](https://huggingface.co/intfloat/multilingual-e5-large)  |   0.554 | 0.7988 |
| [multilingual-e5-small](https://huggingface.co/intfloat/multilingual-e5-small)  |  0.4917 | 0.7291 |
| [GLuCoSE-base-ja-v2](https://huggingface.co/pkshatech/GLuCoSE-base-ja-v2)   |    0.606  |   0.8359 |
| [ruri-large](https://huggingface.co/cl-nagoya/ruri-large)                   |    0.6287 |   0.8418 |

## 学習元データセット

 [hpprc/emb](https://huggingface.co/datasets/hpprc/emb) から、auto-wiki-qa, mmarco, jsquad jaquad, auto-wiki-qa-nemotron, quiz-works quiz-no-mori, miracl, jqara mr-tydi, baobab-wiki-retrieval, mkqa データセットを利用しています。
 また英語データセットとして、MS Marcoを利用しています。

## 注意事項

text-embeddings-inference で動かす場合、[hotchpotch/japanese-splade-base-v1-dummy-fast-tokenizer-for-tei](https://huggingface.co/hotchpotch/japanese-splade-base-v1-dummy-fast-tokenizer-for-tei)をご利用ください。