hotchpotch
commited on
Update README.md
Browse files
README.md
CHANGED
@@ -23,25 +23,25 @@ datasets:
|
|
23 |
library_name: sentence-transformers
|
24 |
---
|
25 |
|
26 |
-
|
27 |
|
28 |
-
#
|
29 |
|
30 |
文章の密ベクトルは、情報検索・文章判別・類似文章抽出など、さまざまな用途に使うことができます。しかしながら最先端のTransformerモデルは小さいモデルでも、とりわけCPUでは遅く、変換速度が実用でないこともしばしばです。
|
31 |
|
32 |
-
しかしながら、先日公開されたTransformerモデル「ではない」 [StaticEmbedding](https://huggingface.co/blog/static-embeddings)は、例えば [intfloat/multilingual-e5-small](https://huggingface.co/intfloat/multilingual-e5-small) (以下mE5-small)とのベンチマーク比較では85%のスコアという実用できる性能で、かつCPUで動作時に126倍高速に文ベクトルを作成することができる、という驚きの速度です。
|
33 |
|
34 |
というわけで、早速日本語(と英語)で学習させたモデル sentence-embedding-japanese を作成し、公開しました。
|
35 |
|
36 |
- https://huggingface.co/hotchpotch/static-embedding-japanese
|
37 |
|
38 |
-
日本語の文章ベクトルの性能を評価する JMTEB
|
39 |
|
40 |
| Model | Avg(micro) | Retrieval | STS | Classification | Reranking | Clustering | PairClassification |
|
41 |
| ---------------------------------------- | ---------- | --------- | ----- | -------------- | --------- | ---------- | ------------------ |
|
42 |
| text-embedding-3-small | 69.18 | 66.39 | 79.46 | 73.06 | 92.92 | 51.06 | 62.27 |
|
43 |
| multilingual-e5-small | 67.71 | 67.27 | 80.07 | 67.62 | 93.03 | 46.91 | 62.19 |
|
44 |
-
| **static-embedding-japanese** |
|
45 |
|
46 |
|
47 |
なお、StaticEmbedding 日本語モデル学習などの技術的なことは記事の後半に書いているので、興味がある方はどうぞ。
|
@@ -99,15 +99,15 @@ StaticEmbedding はTransformerモデルではありません。つまりTrasform
|
|
99 |
|
100 |
## 評価結果
|
101 |
|
102 |
-
JMTEBでの全ての評価結果は[こちらJSONファイルに記載](https://huggingface.co/hotchpotch/static-embedding-japanese/blob/main/JMTEB/summary.json)しています。[JMTEB Leaderboard](https://github.com/sbintuitions/JMTEB/blob/main/leaderboard.md)
|
103 |
|
104 |
### 情報検索でBM25の置き換えができそうか?
|
105 |
|
106 |
-
JMTEBの中の情報検索タスクの[Retrievalの結果](https://huggingface.co/hotchpotch/static-embedding-japanese/blob/main/JMTEB/summary.json)を見てみましょう。StaticEmbedding では mr-tidy の項目が著しく悪いですね。mr-tidyは他のタスクに比べて文章量が圧倒的に多く(700万文章)、つまる所大量の文章を検索するようなタスクでは結果が悪い可能性がありそうです。文脈を無視したた単純なトークンの平均なので、増えれば増えるほど似た平均の文章が出てくるとすると、そういう結果にもなり得そうですね。
|
107 |
|
108 |
ので、大量の文章の場合、BM25よりもだいぶ性能が悪い可能性がありそうです。ただ、少ない文章で、ずばりの単語マッチが少ない場合は、BM25よりも良好な結果になることが多そうですね。
|
109 |
|
110 |
-
なお情報検索タスクの jaqket の結果が他のモデルに対してやたら良いのは、JQaRa (dev, unused)
|
111 |
|
112 |
### クラスタリング結果が悪い
|
113 |
|
@@ -133,7 +133,7 @@ JMTEBの中の情報検索タスクの[Retrievalの結果](https://huggingface.c
|
|
133 |
|
134 |
JQaRa 評価は BM25 よりは若干良く、mE5-small よりは若干低い、JaCWIR は BM25, mE5よりだいぶ低い感じの結果になりました。
|
135 |
|
136 |
-
JaCWIR はWeb
|
137 |
|
138 |
この結果から、StaticEmbedding は Transformer / BM25 に比べ、ノイズを多く含む文章の場合はスコアが悪い可能性があります。
|
139 |
|
@@ -147,6 +147,28 @@ MRLは、学習時に先頭のベクトルほど重要な次元を持ってく
|
|
147 |
|
148 |
このグラフ参照元の[StaticEmbedding の記事](https://huggingface.co/blog/static-embeddings#matryoshka-evaluation)によると、128次元で91.87%, 256次元で95.79%, 512次元で98.53%の性能を維持しているようです。精度にそこまでシビアではないが、その後の計算コストを下げたい場合、ガッと次元削減して使う、という用途にも使えそうですね。
|
149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
## StaticEmbedding モデルを作ってみて
|
151 |
|
152 |
正直、単純なトークンのembeddingsの平均でそんなに性能出るのか半信半疑だったのですが、実際に学習させてみてシンプルなアーキテクチャなのに性能の高さにびっくりしました。Transformer 全盛のこの時代に、古き良き単語埋め込みの活用モデルで、実世界で利活用できそうなモデルの出現に驚きを隠せません。
|
@@ -247,7 +269,7 @@ StaticEmbedding を学習するためには、HuggingFace のトークナイザ
|
|
247 |
- memory
|
248 |
- 64GB
|
249 |
|
250 |
-
|
251 |
|
252 |
## さらなる性能向上へ
|
253 |
|
@@ -263,4 +285,4 @@ StaticEmbedding を学習するためには、HuggingFace のトークナイザ
|
|
263 |
|
264 |
## ライセンス
|
265 |
|
266 |
-
static-embedding-japanese
|
|
|
23 |
library_name: sentence-transformers
|
24 |
---
|
25 |
|
26 |
+
以下の文章は、ブログ記事[100倍速で実用的な文章ベクトルを作れる、日本語 StaticEmbedding モデルを公開](https://secon.dev/entry/2025/01/21/060000-static-embedding-japanese/)からの転載です。
|
27 |
|
28 |
+
# static-embedding-japanese
|
29 |
|
30 |
文章の密ベクトルは、情報検索・文章判別・類似文章抽出など、さまざまな用途に使うことができます。しかしながら最先端のTransformerモデルは小さいモデルでも、とりわけCPUでは遅く、変換速度が実用でないこともしばしばです。
|
31 |
|
32 |
+
しかしながら、先日公開されたTransformerモデル「ではない」 [StaticEmbeddingモデル](https://huggingface.co/blog/static-embeddings)は、例えば [intfloat/multilingual-e5-small](https://huggingface.co/intfloat/multilingual-e5-small) (以下mE5-small)とのベンチマーク比較では85%のスコアという実用できる性能で、かつCPUで動作時に126倍高速に文ベクトルを作成することができる、という驚きの速度です。
|
33 |
|
34 |
というわけで、早速日本語(と英語)で学習させたモデル sentence-embedding-japanese を作成し、公開しました。
|
35 |
|
36 |
- https://huggingface.co/hotchpotch/static-embedding-japanese
|
37 |
|
38 |
+
日本語の文章ベクトルの性能を評価する [JMTEB](https://github.com/sbintuitions/JMTEB) の結果は以下です。総合スコアでは mE5-small には若干及ばないまでも、タスクによっては勝っていたりしますし、[他の日本語baseサイズbertモデルよりもスコアが高いこともある](https://github.com/sbintuitions/JMTEB/blob/main/leaderboard.md)ぐらい、最低限実用に達している性能が出ていますね。本当にそんなに性能出るのか実際に学習させてみるまで半信半疑でしたが、すごいですね。
|
39 |
|
40 |
| Model | Avg(micro) | Retrieval | STS | Classification | Reranking | Clustering | PairClassification |
|
41 |
| ---------------------------------------- | ---------- | --------- | ----- | -------------- | --------- | ---------- | ------------------ |
|
42 |
| text-embedding-3-small | 69.18 | 66.39 | 79.46 | 73.06 | 92.92 | 51.06 | 62.27 |
|
43 |
| multilingual-e5-small | 67.71 | 67.27 | 80.07 | 67.62 | 93.03 | 46.91 | 62.19 |
|
44 |
+
| **static-embedding-japanese** | 67.17 | **67.92** | **80.16** | **67.96** | 91.87 | 40.39 | **62.37** |
|
45 |
|
46 |
|
47 |
なお、StaticEmbedding 日本語モデル学習などの技術的なことは記事の後半に書いているので、興味がある方はどうぞ。
|
|
|
99 |
|
100 |
## 評価結果
|
101 |
|
102 |
+
JMTEBでの全ての評価結果は[こちらJSONファイルに記載](https://huggingface.co/hotchpotch/static-embedding-japanese/blob/main/JMTEB/summary.json)しています。[JMTEB Leaderboard](https://github.com/sbintuitions/JMTEB/blob/main/leaderboard.md)で他のモデルと見比べると、相対的な差がわかるでしょう。JMTEBの全体の評価結果はモデルサイズを考えると、すこぶる良好です。なお、JMTEB で評価された方は、mr-tidy タスクの700万文章のベクトル化に時間がかなりかかる(モデルにもよりますがRTX4090で1~4時間ほど)と思います。これもStaticEmbeddingsでは非常に速く、RTX4090では約4分で処理終えることができました。
|
103 |
|
104 |
### 情報検索でBM25の置き換えができそうか?
|
105 |
|
106 |
+
JMTEBの中の情報検索タスクの[Retrievalの結果](https://huggingface.co/hotchpotch/static-embedding-japanese/blob/main/JMTEB/summary.json#L21-L39)を見てみましょう。StaticEmbedding では mr-tidy の項目が著しく悪いですね。mr-tidyは他のタスクに比べて文章量が圧倒的に多く(700万文章)、つまる所大量の文章を検索するようなタスクでは結果が悪い可能性がありそうです。文脈を無視したた単純なトークンの平均なので、増えれば増えるほど似た平均の文章が出てくるとすると、そういう結果にもなり得そうですね。
|
107 |
|
108 |
ので、大量の文章の場合、BM25よりもだいぶ性能が悪い可能性がありそうです。ただ、少ない文章で、ずばりの単語マッチが少ない場合は、BM25よりも良好な結果になることが多そうですね。
|
109 |
|
110 |
+
なお情報検索タスクの jaqket の結果が他のモデルに対してやたら良いのは、jaqket の問題を含む JQaRa (dev, unused)を学習しているからといっても、高すぎる感じで謎です。test の情報リークはしていないとは思うのですが…。
|
111 |
|
112 |
### クラスタリング結果が悪い
|
113 |
|
|
|
133 |
|
134 |
JQaRa 評価は BM25 よりは若干良く、mE5-small よりは若干低い、JaCWIR は BM25, mE5よりだいぶ低い感じの結果になりました。
|
135 |
|
136 |
+
JaCWIR はqueryから探しあてる文章が、Web文章のタイトルと概要文なので、いわゆる「綺麗な」文章ではないケースも多いです。transformerモデルはノイズに強いので、単純なトークン平均のStaticEmbeddingではスコアに差がつけられるのも納得ですね。BM25は特徴的な単語が出現した文章にマッチするので、JaCWIR でもノイズとなるような文章上の単語はクエリにそもそもマッチしないため、Transformer モデルと競争力のある結構良い結果を残しています。
|
137 |
|
138 |
この結果から、StaticEmbedding は Transformer / BM25 に比べ、ノイズを多く含む文章の場合はスコアが悪い可能性があります。
|
139 |
|
|
|
147 |
|
148 |
このグラフ参照元の[StaticEmbedding の記事](https://huggingface.co/blog/static-embeddings#matryoshka-evaluation)によると、128次元で91.87%, 256次元で95.79%, 512次元で98.53%の性能を維持しているようです。精度にそこまでシビアではないが、その後の計算コストを下げたい場合、ガッと次元削減して使う、という用途にも使えそうですね。
|
149 |
|
150 |
+
|
151 |
+
### StaticEmbdding 日本語モデルでの次元削減結果
|
152 |
+
|
153 |
+
JMTEB では、出力時にモデルのパラメータを制御できるため、truncate_dim オプションを渡すことで、次元削減した結果のベンチ��ークも簡単に計測できます。素晴らしいですね。というわけで、StaticEmbdding 日本語モデルでも、次元削減した結果でベンチマークをとってみました。
|
154 |
+
|
155 |
+
| 次元数 | Avg(micro) | スコア割合(%) | Retrieval | STS | Classification | Reranking | Clustering | PairClassification |
|
156 |
+
|--------|------------|---------------|-----------|-------|----------------|-----------|------------|---------------------|
|
157 |
+
| 1024 | 67.17 | 100.00 | 67.92 | 80.16 | 67.96 | 91.87 | 40.39 | 62.37 |
|
158 |
+
| 512 | 56.65 | 84.34 | 47.85 | 80.11 | 55.57 | 88.27 | 43.11 | 62.37 |
|
159 |
+
| 256 | 65.94 | 98.17 | 66.99 | 79.93 | 63.53 | 91.73 | 42.55 | 62.37 |
|
160 |
+
| 128 | 64.25 | 95.65 | 64.87 | 79.56 | 60.52 | 91.62 | 41.81 | 62.33 |
|
161 |
+
| 64 | 61.79 | 91.98 | 61.15 | 78.34 | 58.23 | 91.50 | 39.11 | 62.35 |
|
162 |
+
| 32 | 57.93 | 86.24 | 53.35 | 76.51 | 55.95 | 91.15 | 38.20 | 62.37 |
|
163 |
+
|
164 |
+
|
165 |
+
スコアの変化を見ると、512次元へと次元削減した場合はやたらRetrieval, Classification,Reranking の性能が悪くなります。むしろ256次元まで次元削減してしまった方が良好な結果に。256次元では、スコア的には次元削減する前のモデルの98.93%なんですが、これはクラスタリングの結果がなぜか1024次元よりも良くなってしまったためですね。
|
166 |
+
|
167 |
+
クラスタリングタスクにおいては128次元まで次元削減しても1024次元よりもスコアが高い、という本来情報量を削らない方がスコアが良いくなりそうなのに、クラスタリングタスクのみは逆にスコアが上がってしまう興味深い結果となりました…。マトリョーシカ表現学習では、先頭の次元の方が全体的な特徴を踏まえているので、クラスタリング用途には(クラスタリングのアルゴリズムにもよると思いますが)、特徴的な前の方の次元のみで後ろの次元を使わない方が良質な結果が得られる、ということなのかもしれません。
|
168 |
+
|
169 |
+
というわけで、static-embedding-japanese モデルで次元削減する時は、256,128次元あたりが性能と次元削減のバランスが取れてそうですね。逆に512次元はとりわけRetrievalの結果が悪いので、使わない方が良さそうです。
|
170 |
+
|
171 |
+
|
172 |
## StaticEmbedding モデルを作ってみて
|
173 |
|
174 |
正直、単純なトークンのembeddingsの平均でそんなに性能出るのか半信半疑だったのですが、実際に学習させてみてシンプルなアーキテクチャなのに性能の高さにびっくりしました。Transformer 全盛のこの時代に、古き良き単語埋め込みの活用モデルで、実世界で利活用できそうなモデルの出現に驚きを隠せません。
|
|
|
269 |
- memory
|
270 |
- 64GB
|
271 |
|
272 |
+
このマシンリソースで、フルスクラッチ学習にかかった時間は約4時間でした。GPUのコア負荷は非常に小さく、他のtransformerモデルでは学習時に90%前後で張り付くのに対して、StaticEmbeddingではほとんど0%でした。これは、巨大なバッチをGPUメモリに転送する時間が大半を占めているためかと思われます。そのため、GPUメモリの帯域幅が速くなれば、学習速度がさらに向上する可能性があります。
|
273 |
|
274 |
## さらなる性能向上へ
|
275 |
|
|
|
285 |
|
286 |
## ライセンス
|
287 |
|
288 |
+
static-embedding-japanese はモデル重み・学習コードを MIT ライセンスで公開しています。
|