Views
No views yet
30 * sigmoid(x/7.5), forcing all logits to (0, 30) rangeReLU(log(1+exp(x))) - cannot produce zeros from strictly positive values✓ Correct doc (Oslo): 20.78
✗ Wrong docs: 10.36 (Bergen), 1.85 (other)
Margin: +10.42✓ Correct doc (Argentina): 18.33
✗ Wrong docs: 2.48 (other), 2.47 (other)
Margin: +15.85✓ Correct doc (Influenza): 20.66
✗ Wrong docs: 1.70 (other), 1.64 (other)
Margin: +18.96Top tokens: hovedstaden(3.21), Norge(2.92), Oslo(2.39), Noreg(2.30),
capital(1.08), hovedstad(2.66), Bergen(1.05)Top tokens: -VM(2.51), fotball(2.21), VM(2.02), FIFA(1.42),
Championships(1.40), UEFA(1.34), mesterskap(0.84)Top tokens: influensa(3.06), symptomene(2.44), symptomer(2.12),
feber(0.74), forkjølelse(1.00)| Threshold | Query Active | Query Sparsity | Doc Active | Doc Sparsity |
|---|---|---|---|---|
| None | 51,200 | 0% | 51,200 | 0% |
| 0.05 | 469 | 99.1% | 166 | 99.7% |
| 0.1 | 181 | 99.6% | 75 | 99.9% |
1from sentence_transformers import SparseEncoder
2
3model = SparseEncoder("thivy/norbert4-base-splade-finetuned-scand", trust_remote_code=True)
4
5queries = ["Hva er hovedstaden i Norge?"]
6documents = [
7 "Oslo er hovedstaden og den størst byen i Norge.",
8 "Bergen er en vakker by på vestlandet.",
9]
10
11query_embeddings = model.encode(queries)
12doc_embeddings = model.encode(documents)
13
14# Compute similarity
15from sentence_transformers.util import cos_sim
16scores = cos_sim(query_embeddings, doc_embeddings)
17print(scores)1from sentence_transformers import SparseEncoder
2
3model = SparseEncoder("thivy/norbert4-base-splade-finetuned-scand", trust_remote_code=True)
4
5texts = ["Hva er hovedstaden i Norge?"]
6embeddings = model.encode(texts, convert_to_sparse_tensor=False)
7
8# Apply threshold to get ~99% sparse embeddings
9threshold = 0.05
10embeddings[embeddings < threshold] = 0
11
12print(f"Active dimensions: {(embeddings > 0).sum().item()}/51200")1from sentence_transformers import SparseEncoder
2import torch
3import numpy as np
4
5model = SparseEncoder('thivy/norbert4-base-splade-finetuned-scand', trust_remote_code=True)
6
7queries = [
8 'Hva er hovedstaden i Norge?',
9 'Hvem vant fotball-VM i 2022?',
10 'Hva er symptomene på influensa?',
11]
12
13documents = [
14 'Oslo er hovedstaden og den mest folkerike byen i Norge.',
15 'Argentina vant FIFA verdensmesterskapet i fotball i 2022.',
16 'Influensa er en virussykdom som gir symptomer som feber, hoste.',
17 'Bergen er en vakker by på vestlandet.',
18 'Norsk bokmål og nynorsk er de to offisielle skriftspråkene i Norge.',
19]
20
21print('=== RAW EMBEDDINGS (no threshold) ===')
22q_emb = model.encode_query(queries, convert_to_sparse_tensor=False).cpu().numpy()
23d_emb = model.encode_document(documents, convert_to_sparse_tensor=False).cpu().numpy()
24
25sims = q_emb @ d_emb.T
26print('Query-Document Similarity (should have high diagonal):')
27for i, q in enumerate(queries):
28 best = np.argmax(sims[i])
29 print(f'Q{i+1} best match: D{best+1} (score: {sims[i][best]:.2f})')
30
31print('\n=== WITH THRESHOLD = 0.05 ===')
32q_sparse = q_emb.copy()
33d_sparse = d_emb.copy()
34q_sparse[q_sparse < 0.05] = 0
35d_sparse[d_sparse < 0.05] = 0
36
37q_active = np.mean([np.count_nonzero(q_sparse[i]) for i in range(len(queries))])
38d_active = np.mean([np.count_nonzero(d_sparse[i]) for i in range(len(documents))])
39
40print(f'Query active dims: {q_active:.0f} / 51200 ({100*q_active/51200:.1f}%)')
41print(f'Doc active dims: {d_active:.0f} / 51200 ({100*d_active/51200:.1f}%)')
42
43sims_sparse = q_sparse @ d_sparse.T
44print('Similarity with threshold (rankings should be same):')
45for i, q in enumerate(queries):
46 best = np.argmax(sims_sparse[i])
47 print(f'Q{i+1} best match: D{best+1} (score: {sims_sparse[i][best]:.2f})')1from sentence_transformers import SparseEncoder
2
3model = SparseEncoder('thivy/norbert4-base-splade-finetuned-scand', trust_remote_code=True)
4
5queries = [
6 'Hva er hovedstaden i Norge?',
7 'Hvem vant fotball-VM i 2022?',
8]
9
10embeddings = model.encode(queries)
11decoded = model.decode(embeddings, top_k=15)
12
13for d, q in zip(decoded, queries):
14 print(f'Query: {q}')
15 tokens = ', '.join([f'{tok}({score:.2f})' for tok, score in d])
16 print(f'Top tokens: {tokens}\n')embeddings = model.encode(texts, convert_to_sparse_tensor=False) # Get dense tensors1@article{formal2021splade,
2 title={SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking},
3 author={Formal, Thibault and Lassance, Carlos and Randeaux, Benjamin and Piwowarski, Benjamin},
4 journal={arXiv preprint arXiv:2107.05720},
5 year={2021}
6}
7
8@inproceedings{papadopoulou2023norbert,
9 title={NorBERT and NorT5—Norwegian BERT and T5 Models},
10 author={Papadopoulou, Aikaterini and Recla, Álvaro Arroyo and others},
11 booktitle={NLP4NLP Workshop @ ACL 2023},
12 year={2023}
13}