File size: 3,607 Bytes
18b35f1
a3024f6
18b35f1
 
 
3038a8e
18b35f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5a62a9a
18b35f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a6dc7c2
 
18b35f1
 
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
---
pipeline_tag: Feature Extraction
language: ja
license: cc-by-sa-4.0
tags:
- transformers
- sentence-transformers
- feature-extraction
- sentence-similarity

---

# Japanese SimCSE (BERT-base)

日本語の[SimCSE](https://arxiv.org/abs/2104.08821)の日本語モデルです。`cl-tohoku/bert-base-japanese-v2`をベースに、日本語自然言語推論データセットである[JSNLI](https://nlp.ist.i.kyoto-u.ac.jp/?%E6%97%A5%E6%9C%AC%E8%AA%9ESNLI%28JSNLI%29%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88)で、学習を行いました。  


## Usage (Sentence-Transformers)
[sentence-transformers](https://www.SBERT.net)を使って、このモデルを簡単に利用することができます。  

トークナイズのために、[fugashi](https://github.com/polm/fugashi)と[unidic-lite](https://pypi.org/project/unidic-lite/)が必要です。  

下記のように、pipでsentence-transformersとfugashi, unidic-liteをインストールしてください。  

```
pip install -U fugashi[unidic-lite]
pip install -U sentence-transformers
```

下記のようにモデルをロードして、文を密なベクトルに変換することができます。  

```python
from sentence_transformers import SentenceTransformer
sentences = [
    "PKSHA Technologyは機械学習/深層学習技術に関わるアルゴリズムソリューションを展開している。",
    "この深層学習モデルはPKSHA Technologyによって学習され、公開された。",
    "広目天は、仏教における四天王の一尊であり、サンスクリット語の「種々の眼をした者」を名前の由来とする。",
]

model = SentenceTransformer('{model_id}')
embeddings = model.encode(sentences)
print(embeddings)
```

学習時の損失関数にcosine類似度を使っているため、下流のタスクでcosine類似度を類似度計算に使うことをおすすめします。  

# Model Detail

## Tokenization
`tohoku/bert-base-japanese-v2`と同じトークナイザーを使用しています。詳しくは、[`tohoku/bert-base-japanese-v2`のページ](https://huggingface.co/cl-tohoku/bert-base-japanese-v2)をご覧ください。

## Training
`tohoku/bert-base-japanese-v2`を初期値に設定し、日本語自然言語推論データセットである[JSNLI](https://nlp.ist.i.kyoto-u.ac.jp/?%E6%97%A5%E6%9C%AC%E8%AA%9ESNLI%28JSNLI%29%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88)のtrain setで学習を行いました。  20 epoch 学習を行い、[JSTS](https://github.com/yahoojapan/JGLUE)のtrain setの一部を検証データにして最もSpearmanの順位相関係数が高かったモデルのチェックポイントを公開しています[^1]。  

## Training Parameters

| Parameter | Value |
| --- | --- |
|pooling_strategy | [CLS] -> single fully-connected layer |
| max_seq_length | 128 |
| with hard negative | true |
| temperature of contrastive loss |  0.05 |
| Batch size | 200 |
| Learning rate | 1e-5 |
| Weight decay | 0.01 |
| Max gradient norm | 1.0 |
| Warmup steps | 2012 |
| Scheduler | WarmupLinear |
| Epochs | 20 |
| Evaluation steps | 250 |


# ライセンス
このモデルは [Creative Commons Attribution-ShareAlike 4.0](https://creativecommons.org/licenses/by-sa/4.0/)の下でライセンスされています。

[^1]: モデル学習時には、JGLUEのテストデータが公開されていなかったため、プライベートな評価データとしてJGLUEのdev setを使用していました。そのため、玉突き的にJGLUEのtrain setでcheckpointを選択しています。