Views
No views yet
pip install -U sentence-transformers1from sentence_transformers import SparseEncoder
2
3# Load model
4model = SparseEncoder("thivy/norbert4-base-splade-retrieval")
5
6# Encode queries and documents
7queries = ["Hva er maskinlæring?", "Søren Kierkegaard filosofi"]
8documents = [
9 "Maskinlæring er en gren av kunstig intelligens...",
10 "Søren Kierkegaard var en dansk filosof..."
11]
12
13query_embeddings = model.encode(queries)
14doc_embeddings = model.encode(documents)
15
16# Compute similarities (dot product)
17similarities = model.similarity(query_embeddings, doc_embeddings)
18print(similarities)1from sentence_transformers import SparseEncoder
2from sentence_transformers.util import semantic_search
3
4# Load model
5model = SparseEncoder("thivy/norbert4-base-splade-retrieval")
6
7# Your corpus
8corpus = [
9 "Norge er et skandinavisk land i Nord-Europa.",
10 "Python er et programmeringsspråk.",
11 "Maskinlæring brukes i mange applikasjoner."
12]
13
14# Encode corpus
15corpus_embeddings = model.encode(corpus)
16
17# Query
18query = "Hva er Python?"
19query_embedding = model.encode(query)
20
21# Search
22hits = semantic_search(query_embedding, corpus_embeddings, top_k=3)[0]
23
24for hit in hits:
25 print(f"Score: {hit['score']:.4f} - {corpus[hit['corpus_id']]}")1from sentence_transformers import SparseEncoder
2
3model = SparseEncoder("thivy/norbert4-base-splade-retrieval")
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")
13# Output: Active dimensions: ~500-1000/51200 (98-99% sparse)30 * sigmoid(x/7.5), forcing all logits to (0, 30) rangeReLU(log(1+exp(x))) - cannot produce zeros from strictly positive values1from sentence_transformers import SparseEncoder
2import numpy as np
3
4model = SparseEncoder('thivy/norbert4-base-splade-retrieval')
5
6queries = [
7 'Hva er hovedstaden i Norge?',
8 'Hvem vant fotball-VM i 2022?',
9 'Hva er symptomene på influensa?',
10]
11
12documents = [
13 'Oslo er hovedstaden og den mest folkerike byen i Norge.',
14 'Argentina vant FIFA verdensmesterskapet i fotball i 2022.',
15 'Influensa er en virussykdom som gir symptomer som feber, hoste.',
16 'Bergen er en vakker by på vestlandet.',
17 'Norsk bokmål og nynorsk er de to offisielle skriftspråkene i Norge.',
18]
19
20print('=== RAW EMBEDDINGS (no threshold) ===')
21q_emb = model.encode(queries, convert_to_sparse_tensor=False)
22d_emb = model.encode(documents, convert_to_sparse_tensor=False)
23
24# Convert to numpy for easier manipulation
25if hasattr(q_emb, 'cpu'):
26 q_emb = q_emb.cpu().numpy()
27 d_emb = d_emb.cpu().numpy()
28
29sims = q_emb @ d_emb.T
30print('Query-Document Similarity (should have high diagonal):')
31for i, q in enumerate(queries):
32 best = np.argmax(sims[i])
33 print(f'Q{i+1} best match: D{best+1} (score: {sims[i][best]:.2f})')
34
35print('\n=== WITH THRESHOLD = 0.05 ===')
36q_sparse = q_emb.copy()
37d_sparse = d_emb.copy()
38q_sparse[q_sparse < 0.05] = 0
39d_sparse[d_sparse < 0.05] = 0
40
41q_active = np.mean([np.count_nonzero(q_sparse[i]) for i in range(len(queries))])
42d_active = np.mean([np.count_nonzero(d_sparse[i]) for i in range(len(documents))])
43
44print(f'Query active dims: {q_active:.0f} / 51200 ({100*q_active/51200:.1f}%)')
45print(f'Doc active dims: {d_active:.0f} / 51200 ({100*d_active/51200:.1f}%)')
46
47sims_sparse = q_sparse @ d_sparse.T
48print('Similarity with threshold (rankings should be same):')
49for i, q in enumerate(queries):
50 best = np.argmax(sims_sparse[i])
51 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-retrieval')
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')SparseEncoder(
(0): MLMTransformer (NorBERT4-base with MLM head)
(1): SpladePooling (max pooling + ReLU activation)
)1@misc{norbert4-splade-retrieval,
2 author = {Thivyesh},
3 title = {NorBERT4 SPLADE Retrieval-Only},
4 year = {2026},
5 publisher = {HuggingFace},
6 url = {https://huggingface.co/thivy/norbert4-base-splade-retrieval}
7}