GoktugD commited on
Commit
a9e934f
·
verified ·
1 Parent(s): f620b6e

Publish measured GöktuğTR release

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
1_Pooling/config.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "embedding_dimension": 640,
3
+ "pooling_mode": "lasttoken",
4
+ "include_prompt": true
5
+ }
README.md ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - tr
4
+ license: mit
5
+ library_name: sentence-transformers
6
+ pipeline_tag: sentence-similarity
7
+ base_model: GoktugD/goktugtr-retrieval-270m-v1
8
+ datasets:
9
+ - GoktugD/goktugtr-hard-negatives-50k
10
+ tags:
11
+ - sentence-transformers
12
+ - semantic-search
13
+ - information-retrieval
14
+ - turkish
15
+ - hard-negatives
16
+ ---
17
+
18
+ # GöktuğTR Retrieval 270M v2
19
+
20
+ A 268.1M-parameter Turkish dense retriever continued from GöktuğTR v1 on
21
+ 50,000 model-mined difficult negatives. The release is designed as a transparent
22
+ hard-negative experiment: it publishes positive, neutral and negative evidence.
23
+
24
+ ## Five-task measured results
25
+
26
+ | Model | Params | Dim | TurHist | XQuAD | WebFAQ | MKQA | Belebele | Macro |
27
+ |---|---:|---:|---:|---:|---:|---:|---:|---:|
28
+ | multilingual E5 base | 278.0M | 768 | **0.49726** | **0.95335** | **0.65032** | 0.07213 | **0.92503** | **0.619618** |
29
+ | **GöktuğTR 270M v2** | **268.1M** | **640** | 0.42198 | 0.86393 | 0.56886 | **0.10331** | 0.88493 | **0.568602** |
30
+ | GöktuğTR 270M v1 | 268.1M | 640 | 0.42196 | 0.85832 | 0.56402 | 0.10296 | 0.88222 | **0.565896** |
31
+ | GöktuğTR 118M v1 | 117.7M | 384 | 0.25299 | 0.81123 | 0.46307 | 0.04855 | 0.82451 | **0.480070** |
32
+
33
+ v2 improves v1 on all five tasks, with a macro change of +0.002706 points
34
+ (about +0.48% relative). The hard-negative triplet validation score itself was
35
+ unchanged at 0.8935. The appropriate claim is a small, consistent held-out
36
+ gain—not a major jump. E5 remains the overall suite leader; GöktuğTR v2 exceeds
37
+ it only on MKQA in this matrix.
38
+
39
+ ## Use
40
+
41
+ ```python
42
+ from sentence_transformers import SentenceTransformer
43
+
44
+ model = SentenceTransformer("GoktugD/goktugtr-retrieval-270m-v2")
45
+ task = "Given a Turkish web search query, retrieve relevant passages that answer the query"
46
+ query = f"Instruct: {task}\nQuery: Hard negative neden önemlidir?"
47
+ query_vector = model.encode(query, normalize_embeddings=True)
48
+ document_vectors = model.encode(
49
+ ["Zor negatifler karar sınırını güçlendirir.", "Ankara Türkiye'nin başkentidir."],
50
+ normalize_embeddings=True,
51
+ )
52
+ print(document_vectors @ query_vector)
53
+ ```
54
+
55
+ Queries require the instruction format shown above. Documents are plain text.
56
+
57
+ ## Mining and training
58
+
59
+ - Base: `GoktugD/goktugtr-retrieval-270m-v1`
60
+ - Mined data: 50,000 train / 2,000 validation triplets
61
+ - Candidate pool: 70,172 source-labeled negatives; search depth: 32
62
+ - Successful mined rows: 50,000; fallbacks: 0; mean cosine: 0.550376
63
+ - Exact normalized TurHistQuad overlap: 0
64
+ - Objective: Cached Multiple Negatives Ranking Loss
65
+ - Sequence length: 256; effective batch: 64; learning rate: `8e-6`
66
+ - One epoch, BF16, seed 3407, one local RTX 5060 Laptop GPU
67
+ - Training time: 2,528 seconds
68
+
69
+ ## Limitations
70
+
71
+ - The measured improvement is small and may not transfer to a target corpus.
72
+ - A source-labeled negative can still be semantically relevant to a query.
73
+ - The upstream corpus is machine translated.
74
+ - Similarity is not a probability or a factuality score.
75
+ - Five retrieval tasks do not cover every Turkish domain, dialect or intent.
76
+
77
+ The repository ships raw per-task MTEB objects, checksums, training state,
78
+ environment metadata, the mining audit and the exact evaluation code.
79
+
config.json ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_sliding_window_pattern": 1,
3
+ "architectures": [
4
+ "Gemma3TextModel"
5
+ ],
6
+ "attention_bias": false,
7
+ "attention_dropout": 0.0,
8
+ "attn_logit_softcapping": null,
9
+ "bos_token_id": 2,
10
+ "dtype": "bfloat16",
11
+ "eos_token_id": 1,
12
+ "final_logit_softcapping": null,
13
+ "head_dim": 256,
14
+ "hidden_activation": "gelu_pytorch_tanh",
15
+ "hidden_size": 640,
16
+ "initializer_range": 0.02,
17
+ "intermediate_size": 2048,
18
+ "layer_types": [
19
+ "full_attention",
20
+ "full_attention",
21
+ "full_attention",
22
+ "full_attention",
23
+ "full_attention",
24
+ "full_attention",
25
+ "full_attention",
26
+ "full_attention",
27
+ "full_attention",
28
+ "full_attention",
29
+ "full_attention",
30
+ "full_attention",
31
+ "full_attention",
32
+ "full_attention",
33
+ "full_attention",
34
+ "full_attention",
35
+ "full_attention",
36
+ "full_attention"
37
+ ],
38
+ "max_position_embeddings": 32768,
39
+ "model_type": "gemma3_text",
40
+ "num_attention_heads": 4,
41
+ "num_hidden_layers": 18,
42
+ "num_key_value_heads": 1,
43
+ "pad_token_id": 0,
44
+ "query_pre_attn_scalar": 256,
45
+ "rms_norm_eps": 1e-06,
46
+ "rope_parameters": {
47
+ "full_attention": {
48
+ "rope_theta": 1000000.0,
49
+ "rope_type": "default"
50
+ },
51
+ "rope_theta": null,
52
+ "rope_type": "default",
53
+ "sliding_attention": {
54
+ "rope_theta": 10000.0,
55
+ "rope_type": "default"
56
+ }
57
+ },
58
+ "sliding_window": 512,
59
+ "sliding_window_pattern": 1,
60
+ "tie_word_embeddings": true,
61
+ "transformers_version": "5.14.1",
62
+ "use_bidirectional_attention": false,
63
+ "use_cache": false,
64
+ "vocab_size": 262144
65
+ }
config_sentence_transformers.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "__version__": {
3
+ "pytorch": "2.8.0+cu129",
4
+ "sentence_transformers": "5.7.0",
5
+ "transformers": "5.14.1"
6
+ },
7
+ "default_prompt_name": null,
8
+ "model_type": "SentenceTransformer",
9
+ "prompts": {
10
+ "bitext_query": "Instruct: Retrieve parallel sentences\nQuery: ",
11
+ "document": "",
12
+ "query": "",
13
+ "sts_query": "Instruct: Retrieve semantically similar text\nQuery: ",
14
+ "web_search_query": "Instruct: Given a web search query, retrieve relevant passages that answer the query\nQuery: "
15
+ },
16
+ "similarity_fn_name": "cosine"
17
+ }
examples/goktugtr_end_to_end.ipynb ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "markdown",
5
+ "metadata": {},
6
+ "source": [
7
+ "# GöktuğTR: retrieval → reranking → cited answer\n",
8
+ "\n",
9
+ "This free Colab notebook loads public artifacts only. It performs Turkish semantic retrieval, optionally reranks the candidates, and produces an explicitly extractive answer with source identifiers. No API key or paid service is required."
10
+ ]
11
+ },
12
+ {
13
+ "cell_type": "code",
14
+ "execution_count": null,
15
+ "metadata": {},
16
+ "outputs": [],
17
+ "source": [
18
+ "!pip -q install sentence-transformers==5.7.0 faiss-cpu==1.15.0"
19
+ ]
20
+ },
21
+ {
22
+ "cell_type": "code",
23
+ "execution_count": null,
24
+ "metadata": {},
25
+ "outputs": [],
26
+ "source": [
27
+ "import re\n",
28
+ "import numpy as np\n",
29
+ "import faiss\n",
30
+ "from sentence_transformers import SentenceTransformer, CrossEncoder\n",
31
+ "\n",
32
+ "RETRIEVER_ID = \"GoktugD/goktugtr-retrieval-270m-v2\"\n",
33
+ "RERANKER_ID = \"GoktugD/goktugtr-reranker-118m-v1\"\n",
34
+ "TASK = \"Given a Turkish web search query, retrieve relevant passages that answer the query\"\n",
35
+ "retriever = SentenceTransformer(RETRIEVER_ID)\n",
36
+ "print(RETRIEVER_ID, retriever.get_sentence_embedding_dimension())"
37
+ ]
38
+ },
39
+ {
40
+ "cell_type": "markdown",
41
+ "metadata": {},
42
+ "source": [
43
+ "## Add your own Turkish documents\n",
44
+ "Each document keeps a stable source identifier so every answer fragment can be traced back."
45
+ ]
46
+ },
47
+ {
48
+ "cell_type": "code",
49
+ "execution_count": null,
50
+ "metadata": {},
51
+ "outputs": [],
52
+ "source": [
53
+ "documents = [\n",
54
+ " {\"source\": \"training.md\", \"text\": \"Gradient accumulation küçük batch gradyanlarını optimizer adımından önce biriktirerek daha büyük bir etkili batch sağlar.\"},\n",
55
+ " {\"source\": \"evaluation.md\", \"text\": \"MRR ilk doğru belgenin sırasını, nDCG ise sıralamanın genel kalitesini ölçer.\"},\n",
56
+ " {\"source\": \"deployment.md\", \"text\": \"ONNX modeli tarayıcıda çalıştırmak sorgunun ücretli bir sunucu API'sine gönderilmesini önler.\"},\n",
57
+ " {\"source\": \"reranking.md\", \"text\": \"Cross-encoder reranker sorgu ve belgeyi birlikte okuyarak retriever adaylarını daha hassas biçimde yeniden sıralar.\"},\n",
58
+ "]\n",
59
+ "doc_vectors = retriever.encode(\n",
60
+ " [item[\"text\"] for item in documents], normalize_embeddings=True, convert_to_numpy=True\n",
61
+ ").astype(\"float32\")\n",
62
+ "index = faiss.IndexFlatIP(doc_vectors.shape[1])\n",
63
+ "index.add(doc_vectors)"
64
+ ]
65
+ },
66
+ {
67
+ "cell_type": "code",
68
+ "execution_count": null,
69
+ "metadata": {},
70
+ "outputs": [],
71
+ "source": [
72
+ "query = \"Küçük GPU'da etkili batch nasıl büyütülür?\"\n",
73
+ "formatted_query = f\"Instruct: {TASK}\\nQuery: {query}\"\n",
74
+ "query_vector = retriever.encode([formatted_query], normalize_embeddings=True, convert_to_numpy=True).astype(\"float32\")\n",
75
+ "scores, ids = index.search(query_vector, min(4, len(documents)))\n",
76
+ "candidates = [{**documents[i], \"retrieval_score\": float(score)} for i, score in zip(ids[0], scores[0])]\n",
77
+ "candidates"
78
+ ]
79
+ },
80
+ {
81
+ "cell_type": "markdown",
82
+ "metadata": {},
83
+ "source": [
84
+ "## Rerank the retrieved candidates\n",
85
+ "The cross-encoder is slower but reads each query-document pair jointly. It is therefore applied only to the small candidate set."
86
+ ]
87
+ },
88
+ {
89
+ "cell_type": "code",
90
+ "execution_count": null,
91
+ "metadata": {},
92
+ "outputs": [],
93
+ "source": [
94
+ "reranker = CrossEncoder(RERANKER_ID)\n",
95
+ "reranker_scores = reranker.predict([[query, item[\"text\"]] for item in candidates])\n",
96
+ "for item, score in zip(candidates, reranker_scores):\n",
97
+ " item[\"reranker_score\"] = float(score)\n",
98
+ "candidates.sort(key=lambda item: item[\"reranker_score\"], reverse=True)\n",
99
+ "candidates"
100
+ ]
101
+ },
102
+ {
103
+ "cell_type": "markdown",
104
+ "metadata": {},
105
+ "source": [
106
+ "## Build a cited, extractive answer\n",
107
+ "This cell deliberately does not pretend to be generative. It selects a sentence from the highest-ranked evidence and prints the source identifier."
108
+ ]
109
+ },
110
+ {
111
+ "cell_type": "code",
112
+ "execution_count": null,
113
+ "metadata": {},
114
+ "outputs": [],
115
+ "source": [
116
+ "def first_sentence(text):\n",
117
+ " parts = re.split(r\"(?<=[.!?])\\s+\", text.strip())\n",
118
+ " return parts[0]\n",
119
+ "\n",
120
+ "for rank, item in enumerate(candidates[:2], 1):\n",
121
+ " print(f\"{first_sentence(item['text'])} [{rank}]\")\n",
122
+ " print(f\" source: {item['source']}\")"
123
+ ]
124
+ },
125
+ {
126
+ "cell_type": "markdown",
127
+ "metadata": {},
128
+ "source": [
129
+ "## Reproducibility notes\n",
130
+ "- Inspect model and data cards before production use.\n",
131
+ "- Pin Hub revisions for controlled experiments.\n",
132
+ "- Retrieval and reranking scores are not calibrated probabilities.\n",
133
+ "- Evaluate on a held-out corpus from the intended domain."
134
+ ]
135
+ }
136
+ ],
137
+ "metadata": {
138
+ "accelerator": "GPU",
139
+ "colab": {"name": "GöktuğTR end-to-end retrieval.ipynb", "provenance": []},
140
+ "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"},
141
+ "language_info": {"name": "python", "version": "3.x"}
142
+ },
143
+ "nbformat": 4,
144
+ "nbformat_minor": 5
145
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c77c47cacd6425c2b7b73676dfc8626a4eab2c35acad23758ac4776cb4ff9e1f
3
+ size 536221640
modules.json ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "idx": 0,
4
+ "name": "0",
5
+ "path": "",
6
+ "type": "sentence_transformers.base.modules.transformer.Transformer"
7
+ },
8
+ {
9
+ "idx": 1,
10
+ "name": "1",
11
+ "path": "1_Pooling",
12
+ "type": "sentence_transformers.sentence_transformer.modules.pooling.Pooling"
13
+ },
14
+ {
15
+ "idx": 2,
16
+ "name": "2",
17
+ "path": "2_Normalize",
18
+ "type": "sentence_transformers.sentence_transformer.modules.normalize.Normalize"
19
+ }
20
+ ]
release-manifest.json ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema": "goktugtr-release-manifest-v2",
3
+ "files": [
4
+ {
5
+ "path": "1_Pooling/config.json",
6
+ "bytes": 95,
7
+ "sha256": "ed3fb647b7df6cf6c4f9a3f829cf46aeaf32ca350022d7973d28d19d9f8a3eab"
8
+ },
9
+ {
10
+ "path": "README.md",
11
+ "bytes": 3170,
12
+ "sha256": "a8c723296a64d0b4a21ccc611a3ef35bb9b951159c25c1da89f5323a4651159d"
13
+ },
14
+ {
15
+ "path": "config.json",
16
+ "bytes": 1533,
17
+ "sha256": "3e03b19e47c37f5fd3531918618814ef21eaa958ee1ac23cfd6ea614899ac10c"
18
+ },
19
+ {
20
+ "path": "config_sentence_transformers.json",
21
+ "bytes": 548,
22
+ "sha256": "d5177f34a4f8ea422f97a456bedc33dca067e30ae8922ca487cb32064f0b74d1"
23
+ },
24
+ {
25
+ "path": "examples/goktugtr_end_to_end.ipynb",
26
+ "bytes": 5235,
27
+ "sha256": "9c539da642076c5451dbee73c529c4849fa551b4ac12ec888ef5b2048c7a1737"
28
+ },
29
+ {
30
+ "path": "model.safetensors",
31
+ "bytes": 536221640,
32
+ "sha256": "c77c47cacd6425c2b7b73676dfc8626a4eab2c35acad23758ac4776cb4ff9e1f"
33
+ },
34
+ {
35
+ "path": "modules.json",
36
+ "bytes": 429,
37
+ "sha256": "fa7d796a215e1b2416773062891923b191fc5a4849bc44e322997433c90f459c"
38
+ },
39
+ {
40
+ "path": "results/baseline-triplet.json",
41
+ "bytes": 64,
42
+ "sha256": "16157fb98652e277c6c2bfa6374d819081e98b27f910d0520510c0e8be9e0e30"
43
+ },
44
+ {
45
+ "path": "results/environment.json",
46
+ "bytes": 1332,
47
+ "sha256": "e78aec2d95f9c8c9d3d04b140a38eac7f608e2a2c49717d933229f31d19f72da"
48
+ },
49
+ {
50
+ "path": "results/final-triplet.json",
51
+ "bytes": 64,
52
+ "sha256": "16157fb98652e277c6c2bfa6374d819081e98b27f910d0520510c0e8be9e0e30"
53
+ },
54
+ {
55
+ "path": "results/hard-negatives-overlap-audit.json",
56
+ "bytes": 562,
57
+ "sha256": "6034bc5f95cf5426abfce67bbd38335bbdf3bf118e34741123b903d12d219980"
58
+ },
59
+ {
60
+ "path": "results/mining-report.json",
61
+ "bytes": 731,
62
+ "sha256": "ca2cf95c9e68bc737a67c91d9234ee69daa680aab834c7a81251e88b50dedbf6"
63
+ },
64
+ {
65
+ "path": "results/mteb-five-task.json",
66
+ "bytes": 48722,
67
+ "sha256": "e78c4b02781781c9f3fd47e72ef773bcd242c563cef95e4dabc3a2dd29928daa"
68
+ },
69
+ {
70
+ "path": "results/suite-comparison.json",
71
+ "bytes": 1220,
72
+ "sha256": "427ff4549dda41d37c35928032d027c343673fec956748a5ef585227aa3ea528"
73
+ },
74
+ {
75
+ "path": "results/suite-manifest.json",
76
+ "bytes": 1541,
77
+ "sha256": "e183e75aed887112981a3bce5c94135817209e4761c6cd603c2cf2eb609c0bbb"
78
+ },
79
+ {
80
+ "path": "results/trainer-state.json",
81
+ "bytes": 15475,
82
+ "sha256": "26ef0d49bf244ff5f8e98cf0efd0511626c8a6b12fdca0b20fa1f320adddc924"
83
+ },
84
+ {
85
+ "path": "sentence_bert_config.json",
86
+ "bytes": 241,
87
+ "sha256": "3084164002c0bca01b0259c5327123803fce32e660a57feb93184ffead186fc8"
88
+ },
89
+ {
90
+ "path": "tokenizer.json",
91
+ "bytes": 33385259,
92
+ "sha256": "bd5f1ae5d7b01aadec7b28edcb1b218ff7ac3b73345cd73b40f463c9c3bab1a4"
93
+ },
94
+ {
95
+ "path": "tokenizer_config.json",
96
+ "bytes": 866,
97
+ "sha256": "c5f6794371c098425f17e2651f42b7a1784a6f71ed63947eb7af9b6fdea13c33"
98
+ },
99
+ {
100
+ "path": "training/evaluate_suite.py",
101
+ "bytes": 5008,
102
+ "sha256": "cd6e4948cc62603c2ddfba0a8ec348c7b2a998143be6ddad9b87cc641e2c6092"
103
+ },
104
+ {
105
+ "path": "training/mine_hard_negatives.py",
106
+ "bytes": 6796,
107
+ "sha256": "0d35e9a698b8ecb988748db8c1c0b7f6e94a017147b33ad4c3b8a1f834e3b7f0"
108
+ },
109
+ {
110
+ "path": "training/train.py",
111
+ "bytes": 8044,
112
+ "sha256": "183a430cba5484558ff219aeb9115cb43d3fc158b901501e769fd1f90e67bc64"
113
+ },
114
+ {
115
+ "path": "training/train.yaml",
116
+ "bytes": 540,
117
+ "sha256": "723cd78b304131a5fae323101384adc1a8d8e983250ca8547ca4207edb79b2fe"
118
+ }
119
+ ]
120
+ }
results/baseline-triplet.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "goktugtr-validation_cosine_accuracy": 0.8934999704360962
3
+ }
results/environment.json ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "python": "3.13.12",
3
+ "torch": "2.8.0+cu129",
4
+ "transformers": "5.14.1",
5
+ "sentence_transformers": "5.7.0",
6
+ "datasets": "4.8.5",
7
+ "cuda": "12.9",
8
+ "gpu": "NVIDIA GeForce RTX 5060 Laptop GPU",
9
+ "gpu_total_memory_gb": 7.527,
10
+ "config": {
11
+ "project_name": "goktugtr-retrieval-270m-v2-hard-negatives",
12
+ "base_model": "outputs/goktugtr-270m/final",
13
+ "base_model_revision": null,
14
+ "query_style": "harrier",
15
+ "padding_side": "left",
16
+ "dataset_id": "local/goktugtr-hard-negatives-v1",
17
+ "seed": 3407,
18
+ "max_seq_length": 256,
19
+ "train_rows": 50000,
20
+ "validation_rows": 2000,
21
+ "epochs": 1,
22
+ "learning_rate": 8e-06,
23
+ "warmup_ratio": 0.05,
24
+ "per_device_batch_size": 16,
25
+ "gradient_accumulation_steps": 4,
26
+ "loss": "cached_multiple_negatives_ranking",
27
+ "loss_mini_batch_size": 8,
28
+ "gradient_checkpointing": true,
29
+ "bf16": true,
30
+ "eval_steps": 125,
31
+ "save_steps": 125,
32
+ "logging_steps": 10
33
+ },
34
+ "train_rows": 50000,
35
+ "validation_rows": 2000,
36
+ "training_seconds": 2528.5468545341864,
37
+ "resumed_from_checkpoint": null,
38
+ "training_metrics": {
39
+ "train_runtime": 2528.4185,
40
+ "train_samples_per_second": 19.775,
41
+ "train_steps_per_second": 0.309,
42
+ "total_flos": 0.0,
43
+ "train_loss": 0.8376862271057676,
44
+ "epoch": 1.0
45
+ },
46
+ "max_gpu_memory_gb": 2.329
47
+ }
results/final-triplet.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "goktugtr-validation_cosine_accuracy": 0.8934999704360962
3
+ }
results/hard-negatives-overlap-audit.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "method": "sha256_of_casefolded_project_normalization",
3
+ "scope": "exact_normalized_text_overlap_only_not_semantic_or_near_duplicate_detection",
4
+ "training_rows": 50000,
5
+ "training_unique_queries": 46050,
6
+ "training_unique_passages": 69644,
7
+ "benchmark": "mteb/TurHistQuadRetrieval",
8
+ "benchmark_revision": "b6e74379b7486da28ce81c3d459cd7bbd87d4987",
9
+ "benchmark_queries": 1024,
10
+ "benchmark_documents": 1213,
11
+ "query_to_query_exact_overlaps": 0,
12
+ "passage_to_document_exact_overlaps": 0,
13
+ "any_training_text_to_benchmark_text_exact_overlaps": 0
14
+ }
results/mining-report.json ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "method": "dense_hnsw_search_over_original_labeled_negatives",
3
+ "miner_model": "outputs/goktugtr-270m/final",
4
+ "query_style": "harrier",
5
+ "benchmark_data_used": false,
6
+ "rows": 50000,
7
+ "candidate_documents": 70172,
8
+ "search_k": 32,
9
+ "max_positive_token_jaccard": 0.8,
10
+ "mined_rows": 50000,
11
+ "fallback_rows": 0,
12
+ "mean_selected_cosine": 0.5503763144233823,
13
+ "mean_selected_rank": 1.00822,
14
+ "seconds": 209.525791735854,
15
+ "files": {
16
+ "train.parquet": {
17
+ "bytes": 32819198,
18
+ "sha256": "549c27403e51b200f8fa0a22005069134e673f0f89f34077922894fdc5e2a457"
19
+ },
20
+ "validation.parquet": {
21
+ "bytes": 936162,
22
+ "sha256": "f4ab199d49039e8efbfdeb84da1a549bd0c61d7b929a96e9c02cd48afcc39061"
23
+ }
24
+ }
25
+ }
results/mteb-five-task.json ADDED
@@ -0,0 +1,1094 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "suite": "goktugtr-turkish-retrieval-suite-v1",
3
+ "language_filter": "turkish_only_exclusive",
4
+ "model": "GöktuğTR 270M v2 hard negatives",
5
+ "model_source": "outputs/goktugtr-270m-v2/final",
6
+ "model_revision": null,
7
+ "parameters": 268098176,
8
+ "embedding_dimension": 640,
9
+ "inference_dtype": "bfloat16",
10
+ "normalized_embeddings": true,
11
+ "prompt_style": "harrier",
12
+ "device": "NVIDIA GeForce RTX 5060 Laptop GPU",
13
+ "mteb_version": "2.18.16",
14
+ "task_main_scores": {
15
+ "TurHistQuadRetrieval": 0.42198,
16
+ "XQuADRetrieval": 0.86393,
17
+ "WebFAQRetrieval": 0.56886,
18
+ "MKQARetrieval": 0.10331,
19
+ "BelebeleRetrieval": 0.88493
20
+ },
21
+ "macro_average": 0.568602,
22
+ "tasks": [
23
+ {
24
+ "name": "TurHistQuadRetrieval",
25
+ "dataset": {
26
+ "path": "asparius/TurHistQuAD",
27
+ "revision": "2a2b8ddecf1189f530676244d0751e1d0a569e03"
28
+ },
29
+ "license": "mit",
30
+ "domains": [
31
+ "Encyclopaedic",
32
+ "Non-fiction",
33
+ "Academic",
34
+ "Written"
35
+ ],
36
+ "eval_splits": [
37
+ "test"
38
+ ],
39
+ "subsets": [
40
+ "default"
41
+ ]
42
+ },
43
+ {
44
+ "name": "XQuADRetrieval",
45
+ "dataset": {
46
+ "path": "google/xquad",
47
+ "revision": "51adfef1c1287aab1d2d91b5bead9bcfb9c68583"
48
+ },
49
+ "license": "cc-by-sa-4.0",
50
+ "domains": [
51
+ "Web",
52
+ "Written"
53
+ ],
54
+ "eval_splits": [
55
+ "validation"
56
+ ],
57
+ "subsets": [
58
+ "tr"
59
+ ]
60
+ },
61
+ {
62
+ "name": "WebFAQRetrieval",
63
+ "dataset": {
64
+ "path": "mteb/WebFAQRetrieval",
65
+ "revision": "f64f483ad0f31d2e78209d524c14a4a867965959"
66
+ },
67
+ "license": "cc-by-4.0",
68
+ "domains": [
69
+ "Web",
70
+ "Written"
71
+ ],
72
+ "eval_splits": [
73
+ "test"
74
+ ],
75
+ "subsets": [
76
+ "tur"
77
+ ]
78
+ },
79
+ {
80
+ "name": "MKQARetrieval",
81
+ "dataset": {
82
+ "path": "mteb/MKQARetrieval",
83
+ "revision": "3e069e7a30079d214a859741f5a0de75cf878867"
84
+ },
85
+ "license": "cc-by-3.0",
86
+ "domains": [
87
+ "Written"
88
+ ],
89
+ "eval_splits": [
90
+ "train"
91
+ ],
92
+ "subsets": [
93
+ "tr"
94
+ ]
95
+ },
96
+ {
97
+ "name": "BelebeleRetrieval",
98
+ "dataset": {
99
+ "path": "mteb/belebele",
100
+ "revision": "979a211276faa22f671e69d096634193567cfd05"
101
+ },
102
+ "license": "cc-by-sa-4.0",
103
+ "domains": [
104
+ "Web",
105
+ "News",
106
+ "Written"
107
+ ],
108
+ "eval_splits": [
109
+ "test"
110
+ ],
111
+ "subsets": [
112
+ "tur_Latn-tur_Latn"
113
+ ]
114
+ }
115
+ ],
116
+ "raw_mteb_result": {
117
+ "model_name": "no_model_name/available",
118
+ "model_revision": "no_revision_available",
119
+ "task_results": [
120
+ {
121
+ "dataset_revision": "2a2b8ddecf1189f530676244d0751e1d0a569e03",
122
+ "task_name": "TurHistQuadRetrieval",
123
+ "mteb_version": "2.18.16",
124
+ "scores": {
125
+ "test": [
126
+ {
127
+ "ndcg_at_1": 0.44727,
128
+ "ndcg_at_3": 0.36818,
129
+ "ndcg_at_5": 0.39742,
130
+ "ndcg_at_10": 0.42198,
131
+ "ndcg_at_20": 0.44086,
132
+ "ndcg_at_100": 0.47466,
133
+ "ndcg_at_1000": 0.51823,
134
+ "map_at_1": 0.22363,
135
+ "map_at_3": 0.29012,
136
+ "map_at_5": 0.30726,
137
+ "map_at_10": 0.31975,
138
+ "map_at_20": 0.3268,
139
+ "map_at_100": 0.33331,
140
+ "map_at_1000": 0.33552,
141
+ "recall_at_1": 0.22363,
142
+ "recall_at_3": 0.35498,
143
+ "recall_at_5": 0.41357,
144
+ "recall_at_10": 0.4751,
145
+ "recall_at_20": 0.53516,
146
+ "recall_at_100": 0.68604,
147
+ "recall_at_1000": 0.97266,
148
+ "accuracy": 0.22363,
149
+ "precision_at_1": 0.44727,
150
+ "precision_at_3": 0.23665,
151
+ "precision_at_5": 0.16543,
152
+ "precision_at_10": 0.09502,
153
+ "precision_at_20": 0.05352,
154
+ "precision_at_100": 0.01372,
155
+ "precision_at_1000": 0.00195,
156
+ "mrr_at_1": 0.447265625,
157
+ "mrr_at_3": 0.54541015625,
158
+ "mrr_at_5": 0.563134765625,
159
+ "mrr_at_10": 0.5715328156001984,
160
+ "mrr_at_20": 0.5747740260525898,
161
+ "mrr_at_100": 0.5764007840136673,
162
+ "mrr_at_1000": 0.5767683869085801,
163
+ "nauc_ndcg_at_1_max": 0.1947773993090055,
164
+ "nauc_ndcg_at_1_std": -0.0910494007784227,
165
+ "nauc_ndcg_at_1_diff1": 0.4073158485432013,
166
+ "nauc_ndcg_at_3_max": 0.15459659971936998,
167
+ "nauc_ndcg_at_3_std": -0.13572605317548517,
168
+ "nauc_ndcg_at_3_diff1": 0.3590182901499481,
169
+ "nauc_ndcg_at_5_max": 0.12351242622860217,
170
+ "nauc_ndcg_at_5_std": -0.13862840806665486,
171
+ "nauc_ndcg_at_5_diff1": 0.3411180215230726,
172
+ "nauc_ndcg_at_10_max": 0.10508451932152987,
173
+ "nauc_ndcg_at_10_std": -0.15917084194618117,
174
+ "nauc_ndcg_at_10_diff1": 0.3456925788408306,
175
+ "nauc_ndcg_at_20_max": 0.07934060994772754,
176
+ "nauc_ndcg_at_20_std": -0.17556108096439801,
177
+ "nauc_ndcg_at_20_diff1": 0.34005209604606523,
178
+ "nauc_ndcg_at_100_max": 0.06263250772213183,
179
+ "nauc_ndcg_at_100_std": -0.19644024854652758,
180
+ "nauc_ndcg_at_100_diff1": 0.34964007250841367,
181
+ "nauc_ndcg_at_1000_max": 0.06570815848059838,
182
+ "nauc_ndcg_at_1000_std": -0.1926137221140858,
183
+ "nauc_ndcg_at_1000_diff1": 0.36291691156660905,
184
+ "nauc_map_at_1_max": 0.1947773993090055,
185
+ "nauc_map_at_1_std": -0.0910494007784227,
186
+ "nauc_map_at_1_diff1": 0.4073158485432013,
187
+ "nauc_map_at_3_max": 0.15482569356800127,
188
+ "nauc_map_at_3_std": -0.12953054928321617,
189
+ "nauc_map_at_3_diff1": 0.3547572884337557,
190
+ "nauc_map_at_5_max": 0.13400725043834277,
191
+ "nauc_map_at_5_std": -0.13487559474480726,
192
+ "nauc_map_at_5_diff1": 0.3411052428046666,
193
+ "nauc_map_at_10_max": 0.12580634709979557,
194
+ "nauc_map_at_10_std": -0.14482991442291338,
195
+ "nauc_map_at_10_diff1": 0.3388736900349583,
196
+ "nauc_map_at_20_max": 0.1171912993522551,
197
+ "nauc_map_at_20_std": -0.15057501514134508,
198
+ "nauc_map_at_20_diff1": 0.33579860813933154,
199
+ "nauc_map_at_100_max": 0.11439780365587258,
200
+ "nauc_map_at_100_std": -0.15406029446515598,
201
+ "nauc_map_at_100_diff1": 0.3366239925867801,
202
+ "nauc_map_at_1000_max": 0.11378034070804263,
203
+ "nauc_map_at_1000_std": -0.15413650834976175,
204
+ "nauc_map_at_1000_diff1": 0.33743800581253264,
205
+ "nauc_recall_at_1_max": 0.1947773993090055,
206
+ "nauc_recall_at_1_std": -0.0910494007784227,
207
+ "nauc_recall_at_1_diff1": 0.4073158485432013,
208
+ "nauc_recall_at_3_max": 0.11721165014618391,
209
+ "nauc_recall_at_3_std": -0.16453793054408086,
210
+ "nauc_recall_at_3_diff1": 0.31826402362729905,
211
+ "nauc_recall_at_5_max": 0.032770031656111503,
212
+ "nauc_recall_at_5_std": -0.16108032882961745,
213
+ "nauc_recall_at_5_diff1": 0.24788015226976987,
214
+ "nauc_recall_at_10_max": -0.015009736950870631,
215
+ "nauc_recall_at_10_std": -0.2028271635328523,
216
+ "nauc_recall_at_10_diff1": 0.24498908438888148,
217
+ "nauc_recall_at_20_max": -0.09578925764875043,
218
+ "nauc_recall_at_20_std": -0.22857085957680415,
219
+ "nauc_recall_at_20_diff1": 0.19408264003786216,
220
+ "nauc_recall_at_100_max": -0.16490966442677502,
221
+ "nauc_recall_at_100_std": -0.3015537080276642,
222
+ "nauc_recall_at_100_diff1": 0.21955302141734043,
223
+ "nauc_recall_at_1000_max": -1.3782566762561899,
224
+ "nauc_recall_at_1000_std": -1.2793437787675817,
225
+ "nauc_recall_at_1000_diff1": 0.7032453889650138,
226
+ "nauc_precision_at_1_max": 0.1947773993090055,
227
+ "nauc_precision_at_1_std": -0.0910494007784227,
228
+ "nauc_precision_at_1_diff1": 0.4073158485432013,
229
+ "nauc_precision_at_3_max": 0.11721165014618445,
230
+ "nauc_precision_at_3_std": -0.16453793054408086,
231
+ "nauc_precision_at_3_diff1": 0.3182640236272993,
232
+ "nauc_precision_at_5_max": 0.03277003165611099,
233
+ "nauc_precision_at_5_std": -0.1610803288296178,
234
+ "nauc_precision_at_5_diff1": 0.2478801522697694,
235
+ "nauc_precision_at_10_max": -0.01500973695087072,
236
+ "nauc_precision_at_10_std": -0.20282716353285224,
237
+ "nauc_precision_at_10_diff1": 0.24498908438888103,
238
+ "nauc_precision_at_20_max": -0.0957892576487511,
239
+ "nauc_precision_at_20_std": -0.22857085957680465,
240
+ "nauc_precision_at_20_diff1": 0.1940826400378614,
241
+ "nauc_precision_at_100_max": -0.16490966442677507,
242
+ "nauc_precision_at_100_std": -0.30155370802766424,
243
+ "nauc_precision_at_100_diff1": 0.21955302141734045,
244
+ "nauc_precision_at_1000_max": -1.378256676256199,
245
+ "nauc_precision_at_1000_std": -1.279343778767596,
246
+ "nauc_precision_at_1000_diff1": 0.7032453889650114,
247
+ "nauc_mrr_at_1_max": 0.1947773993090055,
248
+ "nauc_mrr_at_1_std": -0.0910494007784227,
249
+ "nauc_mrr_at_1_diff1": 0.4073158485432013,
250
+ "nauc_mrr_at_3_max": 0.17951015442495216,
251
+ "nauc_mrr_at_3_std": -0.11954604918828698,
252
+ "nauc_mrr_at_3_diff1": 0.3878193805370859,
253
+ "nauc_mrr_at_5_max": 0.1690611363913176,
254
+ "nauc_mrr_at_5_std": -0.11456851241986926,
255
+ "nauc_mrr_at_5_diff1": 0.3854262100889673,
256
+ "nauc_mrr_at_10_max": 0.16279109738166908,
257
+ "nauc_mrr_at_10_std": -0.12140021284110425,
258
+ "nauc_mrr_at_10_diff1": 0.39431158801201477,
259
+ "nauc_mrr_at_20_max": 0.15854074365731471,
260
+ "nauc_mrr_at_20_std": -0.12493806418765903,
261
+ "nauc_mrr_at_20_diff1": 0.39652712372135157,
262
+ "nauc_mrr_at_100_max": 0.15656075467937358,
263
+ "nauc_mrr_at_100_std": -0.12717669984150143,
264
+ "nauc_mrr_at_100_diff1": 0.39764245610734594,
265
+ "nauc_mrr_at_1000_max": 0.15714128366655825,
266
+ "nauc_mrr_at_1000_std": -0.1268302978503602,
267
+ "nauc_mrr_at_1000_diff1": 0.3974845927958745,
268
+ "hit_rate_at_1": 0.44727,
269
+ "hit_rate_at_3": 0.66797,
270
+ "hit_rate_at_5": 0.74805,
271
+ "hit_rate_at_10": 0.80859,
272
+ "hit_rate_at_20": 0.85352,
273
+ "hit_rate_at_100": 0.91406,
274
+ "hit_rate_at_1000": 1.0,
275
+ "main_score": 0.42198,
276
+ "hf_subset": "default",
277
+ "languages": [
278
+ "tur-Latn"
279
+ ],
280
+ "mteb_version": "2.18.16"
281
+ }
282
+ ]
283
+ },
284
+ "evaluation_time": 6.209755585761741,
285
+ "kg_co2_emissions": null,
286
+ "date": "2026-08-11T08:37:55.009831Z",
287
+ "evaluation_phases": [
288
+ {
289
+ "name": "Data loading",
290
+ "start": 0.0,
291
+ "end": 1.6432985588908195,
292
+ "split": "",
293
+ "subset": ""
294
+ },
295
+ {
296
+ "name": "Encoding queries and documents",
297
+ "start": 1.6578817549161613,
298
+ "end": 5.618854850064963,
299
+ "split": "test",
300
+ "subset": "default"
301
+ },
302
+ {
303
+ "name": "Scoring",
304
+ "start": 5.618875534972176,
305
+ "end": 6.201895288890228,
306
+ "split": "test",
307
+ "subset": "default"
308
+ }
309
+ ]
310
+ },
311
+ {
312
+ "dataset_revision": "51adfef1c1287aab1d2d91b5bead9bcfb9c68583",
313
+ "task_name": "XQuADRetrieval",
314
+ "mteb_version": "2.18.16",
315
+ "scores": {
316
+ "validation": [
317
+ {
318
+ "ndcg_at_1": 0.81588,
319
+ "ndcg_at_3": 0.85376,
320
+ "ndcg_at_5": 0.85972,
321
+ "ndcg_at_10": 0.86393,
322
+ "ndcg_at_20": 0.87064,
323
+ "ndcg_at_100": 0.88069,
324
+ "ndcg_at_1000": 0.88277,
325
+ "map_at_1": 0.81588,
326
+ "map_at_3": 0.84516,
327
+ "map_at_5": 0.84849,
328
+ "map_at_10": 0.85014,
329
+ "map_at_20": 0.85191,
330
+ "map_at_100": 0.8535,
331
+ "map_at_1000": 0.8536,
332
+ "recall_at_1": 0.81588,
333
+ "recall_at_3": 0.87838,
334
+ "recall_at_5": 0.89274,
335
+ "recall_at_10": 0.90625,
336
+ "recall_at_20": 0.93328,
337
+ "recall_at_100": 0.9848,
338
+ "recall_at_1000": 1.0,
339
+ "accuracy": 0.81588,
340
+ "precision_at_1": 0.81588,
341
+ "precision_at_3": 0.29279,
342
+ "precision_at_5": 0.17855,
343
+ "precision_at_10": 0.09063,
344
+ "precision_at_20": 0.04666,
345
+ "precision_at_100": 0.00985,
346
+ "precision_at_1000": 0.001,
347
+ "mrr_at_1": 0.8158783783783784,
348
+ "mrr_at_3": 0.845579954954955,
349
+ "mrr_at_5": 0.8487471846846847,
350
+ "mrr_at_10": 0.8497372372372372,
351
+ "mrr_at_20": 0.8519017309373831,
352
+ "mrr_at_100": 0.853515089167124,
353
+ "mrr_at_1000": 0.8536142784769822,
354
+ "nauc_ndcg_at_1_max": 0.3284540665242737,
355
+ "nauc_ndcg_at_1_std": -0.03350450468321942,
356
+ "nauc_ndcg_at_1_diff1": 0.7757754213683679,
357
+ "nauc_ndcg_at_3_max": 0.25818700964639063,
358
+ "nauc_ndcg_at_3_std": -0.055404890207890786,
359
+ "nauc_ndcg_at_3_diff1": 0.7357097193459545,
360
+ "nauc_ndcg_at_5_max": 0.23532978864261622,
361
+ "nauc_ndcg_at_5_std": -0.070773060535053,
362
+ "nauc_ndcg_at_5_diff1": 0.7296829159511898,
363
+ "nauc_ndcg_at_10_max": 0.2221519746395343,
364
+ "nauc_ndcg_at_10_std": -0.0875650487509888,
365
+ "nauc_ndcg_at_10_diff1": 0.732598352255786,
366
+ "nauc_ndcg_at_20_max": 0.20773138536758215,
367
+ "nauc_ndcg_at_20_std": -0.09989246220154115,
368
+ "nauc_ndcg_at_20_diff1": 0.7340091998299748,
369
+ "nauc_ndcg_at_100_max": 0.19515655222487252,
370
+ "nauc_ndcg_at_100_std": -0.11460185139630633,
371
+ "nauc_ndcg_at_100_diff1": 0.7352192500871594,
372
+ "nauc_ndcg_at_1000_max": 0.22818231071148642,
373
+ "nauc_ndcg_at_1000_std": -0.08733055810540781,
374
+ "nauc_ndcg_at_1000_diff1": 0.7390905883324356,
375
+ "nauc_map_at_1_max": 0.3284540665242737,
376
+ "nauc_map_at_1_std": -0.03350450468321942,
377
+ "nauc_map_at_1_diff1": 0.7757754213683679,
378
+ "nauc_map_at_3_max": 0.2777399037391668,
379
+ "nauc_map_at_3_std": -0.048568184058805995,
380
+ "nauc_map_at_3_diff1": 0.7462289334451868,
381
+ "nauc_map_at_5_max": 0.26622347518153544,
382
+ "nauc_map_at_5_std": -0.0563052173192779,
383
+ "nauc_map_at_5_diff1": 0.7433725065389168,
384
+ "nauc_map_at_10_max": 0.26177082716700206,
385
+ "nauc_map_at_10_std": -0.06208533201755686,
386
+ "nauc_map_at_10_diff1": 0.7443466727140162,
387
+ "nauc_map_at_20_max": 0.25872168437955684,
388
+ "nauc_map_at_20_std": -0.06463743789758596,
389
+ "nauc_map_at_20_diff1": 0.7448129266649355,
390
+ "nauc_map_at_100_max": 0.2559148722096524,
391
+ "nauc_map_at_100_std": -0.06773002736169367,
392
+ "nauc_map_at_100_diff1": 0.7449903003740266,
393
+ "nauc_map_at_1000_max": 0.2572009615963307,
394
+ "nauc_map_at_1000_std": -0.06667363214343108,
395
+ "nauc_map_at_1000_diff1": 0.7451457131512783,
396
+ "nauc_recall_at_1_max": 0.3284540665242737,
397
+ "nauc_recall_at_1_std": -0.03350450468321942,
398
+ "nauc_recall_at_1_diff1": 0.7757754213683679,
399
+ "nauc_recall_at_3_max": 0.18820039148395235,
400
+ "nauc_recall_at_3_std": -0.08026325128177393,
401
+ "nauc_recall_at_3_diff1": 0.6983862971238585,
402
+ "nauc_recall_at_5_max": 0.10995206042485102,
403
+ "nauc_recall_at_5_std": -0.13101453725155376,
404
+ "nauc_recall_at_5_diff1": 0.6751281440235256,
405
+ "nauc_recall_at_10_max": 0.03450281639611959,
406
+ "nauc_recall_at_10_std": -0.21514187982604624,
407
+ "nauc_recall_at_10_diff1": 0.6827023652581147,
408
+ "nauc_recall_at_20_max": -0.14669192998797975,
409
+ "nauc_recall_at_20_std": -0.35926833389834817,
410
+ "nauc_recall_at_20_diff1": 0.6732122472101519,
411
+ "nauc_recall_at_100_max": -1.5891802105217783,
412
+ "nauc_recall_at_100_std": -1.5891802105217783,
413
+ "nauc_recall_at_100_diff1": 0.5276547460163096,
414
+ "nauc_recall_at_1000_max": null,
415
+ "nauc_recall_at_1000_std": null,
416
+ "nauc_recall_at_1000_diff1": null,
417
+ "nauc_precision_at_1_max": 0.3284540665242737,
418
+ "nauc_precision_at_1_std": -0.03350450468321942,
419
+ "nauc_precision_at_1_diff1": 0.7757754213683679,
420
+ "nauc_precision_at_3_max": 0.18820039148395123,
421
+ "nauc_precision_at_3_std": -0.08026325128177557,
422
+ "nauc_precision_at_3_diff1": 0.6983862971238574,
423
+ "nauc_precision_at_5_max": 0.10995206042484995,
424
+ "nauc_precision_at_5_std": -0.13101453725155207,
425
+ "nauc_precision_at_5_diff1": 0.6751281440235273,
426
+ "nauc_precision_at_10_max": 0.03450281639612019,
427
+ "nauc_precision_at_10_std": -0.21514187982604183,
428
+ "nauc_precision_at_10_diff1": 0.6827023652581166,
429
+ "nauc_precision_at_20_max": -0.1466919299879782,
430
+ "nauc_precision_at_20_std": -0.35926833389834945,
431
+ "nauc_precision_at_20_diff1": 0.6732122472101516,
432
+ "nauc_precision_at_100_max": -1.5891802105218076,
433
+ "nauc_precision_at_100_std": -1.5891802105218076,
434
+ "nauc_precision_at_100_diff1": 0.5276547460163015,
435
+ "nauc_precision_at_1000_max": 1.0,
436
+ "nauc_precision_at_1000_std": 1.0,
437
+ "nauc_precision_at_1000_diff1": 1.0,
438
+ "nauc_mrr_at_1_max": 0.3284540665242737,
439
+ "nauc_mrr_at_1_std": -0.03350450468321942,
440
+ "nauc_mrr_at_1_diff1": 0.7757754213683679,
441
+ "nauc_mrr_at_3_max": 0.2755646757001353,
442
+ "nauc_mrr_at_3_std": -0.051182154244866135,
443
+ "nauc_mrr_at_3_diff1": 0.7452215992777843,
444
+ "nauc_mrr_at_5_max": 0.2670252442185693,
445
+ "nauc_mrr_at_5_std": -0.055120825642614404,
446
+ "nauc_mrr_at_5_diff1": 0.7409265069774154,
447
+ "nauc_mrr_at_10_max": 0.26289797765516126,
448
+ "nauc_mrr_at_10_std": -0.05924126003203253,
449
+ "nauc_mrr_at_10_diff1": 0.7415305795746361,
450
+ "nauc_mrr_at_20_max": 0.2590123096058126,
451
+ "nauc_mrr_at_20_std": -0.06499429407428235,
452
+ "nauc_mrr_at_20_diff1": 0.7426366640770949,
453
+ "nauc_mrr_at_100_max": 0.2560796971787312,
454
+ "nauc_mrr_at_100_std": -0.06747575427838415,
455
+ "nauc_mrr_at_100_diff1": 0.7427706567785499,
456
+ "nauc_mrr_at_1000_max": 0.2573657793463667,
457
+ "nauc_mrr_at_1000_std": -0.06641928062359208,
458
+ "nauc_mrr_at_1000_diff1": 0.7429244793968778,
459
+ "hit_rate_at_1": 0.81588,
460
+ "hit_rate_at_3": 0.87838,
461
+ "hit_rate_at_5": 0.89274,
462
+ "hit_rate_at_10": 0.90625,
463
+ "hit_rate_at_20": 0.93328,
464
+ "hit_rate_at_100": 0.9848,
465
+ "hit_rate_at_1000": 1.0,
466
+ "main_score": 0.86393,
467
+ "hf_subset": "tr",
468
+ "languages": [
469
+ "tur-Latn"
470
+ ],
471
+ "mteb_version": "2.18.16"
472
+ }
473
+ ]
474
+ },
475
+ "evaluation_time": 5.384912968846038,
476
+ "kg_co2_emissions": null,
477
+ "date": "2026-08-11T08:38:00.395989Z",
478
+ "evaluation_phases": [
479
+ {
480
+ "name": "Data loading",
481
+ "start": 0.0,
482
+ "end": 2.4216172359883785,
483
+ "split": "",
484
+ "subset": ""
485
+ },
486
+ {
487
+ "name": "Encoding queries and documents",
488
+ "start": 2.435616716975346,
489
+ "end": 5.167067898903042,
490
+ "split": "validation",
491
+ "subset": "tr"
492
+ },
493
+ {
494
+ "name": "Scoring",
495
+ "start": 5.167083007982001,
496
+ "end": 5.382447937969118,
497
+ "split": "validation",
498
+ "subset": "tr"
499
+ }
500
+ ]
501
+ },
502
+ {
503
+ "dataset_revision": "f64f483ad0f31d2e78209d524c14a4a867965959",
504
+ "task_name": "WebFAQRetrieval",
505
+ "mteb_version": "2.18.16",
506
+ "scores": {
507
+ "test": [
508
+ {
509
+ "ndcg_at_1": 0.4783,
510
+ "ndcg_at_3": 0.53775,
511
+ "ndcg_at_5": 0.55368,
512
+ "ndcg_at_10": 0.56886,
513
+ "ndcg_at_20": 0.58072,
514
+ "ndcg_at_100": 0.59863,
515
+ "ndcg_at_1000": 0.60486,
516
+ "map_at_1": 0.4783,
517
+ "map_at_3": 0.52333,
518
+ "map_at_5": 0.53216,
519
+ "map_at_10": 0.53846,
520
+ "map_at_20": 0.5417,
521
+ "map_at_100": 0.54424,
522
+ "map_at_1000": 0.54448,
523
+ "recall_at_1": 0.4783,
524
+ "recall_at_3": 0.5794,
525
+ "recall_at_5": 0.6181,
526
+ "recall_at_10": 0.6649,
527
+ "recall_at_20": 0.7119,
528
+ "recall_at_100": 0.8074,
529
+ "recall_at_1000": 0.8563,
530
+ "accuracy": 0.4783,
531
+ "precision_at_1": 0.4783,
532
+ "precision_at_3": 0.19313,
533
+ "precision_at_5": 0.12362,
534
+ "precision_at_10": 0.06649,
535
+ "precision_at_20": 0.0356,
536
+ "precision_at_100": 0.00807,
537
+ "precision_at_1000": 0.00086,
538
+ "mrr_at_1": 0.4782,
539
+ "mrr_at_3": 0.5233166666666667,
540
+ "mrr_at_5": 0.5320866666666667,
541
+ "mrr_at_10": 0.5383844841269841,
542
+ "mrr_at_20": 0.5416332922284973,
543
+ "mrr_at_100": 0.544169475461704,
544
+ "mrr_at_1000": 0.5444125970973864,
545
+ "nauc_ndcg_at_1_max": 0.12378526993465135,
546
+ "nauc_ndcg_at_1_std": 0.15914555681902476,
547
+ "nauc_ndcg_at_1_diff1": 0.8371664323172846,
548
+ "nauc_ndcg_at_3_max": 0.059497603641565644,
549
+ "nauc_ndcg_at_3_std": 0.19280724617182773,
550
+ "nauc_ndcg_at_3_diff1": 0.8106765381725193,
551
+ "nauc_ndcg_at_5_max": 0.03830703968134529,
552
+ "nauc_ndcg_at_5_std": 0.20203097792669134,
553
+ "nauc_ndcg_at_5_diff1": 0.8069760545861215,
554
+ "nauc_ndcg_at_10_max": 0.01692778814755956,
555
+ "nauc_ndcg_at_10_std": 0.2100322549145765,
556
+ "nauc_ndcg_at_10_diff1": 0.805655549489814,
557
+ "nauc_ndcg_at_20_max": 0.0018299159845378435,
558
+ "nauc_ndcg_at_20_std": 0.21686590866569472,
559
+ "nauc_ndcg_at_20_diff1": 0.8035360516982142,
560
+ "nauc_ndcg_at_100_max": -0.023569682566652816,
561
+ "nauc_ndcg_at_100_std": 0.2278208198263667,
562
+ "nauc_ndcg_at_100_diff1": 0.8051237611879092,
563
+ "nauc_ndcg_at_1000_max": -0.03534215224230123,
564
+ "nauc_ndcg_at_1000_std": 0.23034163818382103,
565
+ "nauc_ndcg_at_1000_diff1": 0.8088858890505707,
566
+ "nauc_map_at_1_max": 0.12378526993465135,
567
+ "nauc_map_at_1_std": 0.15914555681902476,
568
+ "nauc_map_at_1_diff1": 0.8371664323172846,
569
+ "nauc_map_at_3_max": 0.07601436468829656,
570
+ "nauc_map_at_3_std": 0.1844036695986002,
571
+ "nauc_map_at_3_diff1": 0.8172367412045666,
572
+ "nauc_map_at_5_max": 0.06473499918618558,
573
+ "nauc_map_at_5_std": 0.1892017055047459,
574
+ "nauc_map_at_5_diff1": 0.8152117908664681,
575
+ "nauc_map_at_10_max": 0.05655810792894781,
576
+ "nauc_map_at_10_std": 0.1922956559395659,
577
+ "nauc_map_at_10_diff1": 0.8148003875474032,
578
+ "nauc_map_at_20_max": 0.052812545064260606,
579
+ "nauc_map_at_20_std": 0.1939204688449605,
580
+ "nauc_map_at_20_diff1": 0.814304031703465,
581
+ "nauc_map_at_100_max": 0.049870914558898784,
582
+ "nauc_map_at_100_std": 0.19525523675361117,
583
+ "nauc_map_at_100_diff1": 0.8145625414323227,
584
+ "nauc_map_at_1000_max": 0.04951462246634232,
585
+ "nauc_map_at_1000_std": 0.19535656764417045,
586
+ "nauc_map_at_1000_diff1": 0.814689665486308,
587
+ "nauc_recall_at_1_max": 0.12378526993465135,
588
+ "nauc_recall_at_1_std": 0.15914555681902476,
589
+ "nauc_recall_at_1_diff1": 0.8371664323172846,
590
+ "nauc_recall_at_3_max": 0.00906800781090249,
591
+ "nauc_recall_at_3_std": 0.21836130557966743,
592
+ "nauc_recall_at_3_diff1": 0.7907510757682494,
593
+ "nauc_recall_at_5_max": -0.049291960498243304,
594
+ "nauc_recall_at_5_std": 0.244415239072271,
595
+ "nauc_recall_at_5_diff1": 0.780370627517092,
596
+ "nauc_recall_at_10_max": -0.1334658927813473,
597
+ "nauc_recall_at_10_std": 0.2763889626664622,
598
+ "nauc_recall_at_10_diff1": 0.7730445065609719,
599
+ "nauc_recall_at_20_max": -0.22424014427676828,
600
+ "nauc_recall_at_20_std": 0.3179950761211255,
601
+ "nauc_recall_at_20_diff1": 0.7589578131314744,
602
+ "nauc_recall_at_100_max": -0.5378719532193261,
603
+ "nauc_recall_at_100_std": 0.4528372991444859,
604
+ "nauc_recall_at_100_diff1": 0.756077007675729,
605
+ "nauc_recall_at_1000_max": -0.8933631153969248,
606
+ "nauc_recall_at_1000_std": 0.5591965880094494,
607
+ "nauc_recall_at_1000_diff1": 0.8049804885079451,
608
+ "nauc_precision_at_1_max": 0.12378526993465135,
609
+ "nauc_precision_at_1_std": 0.15914555681902476,
610
+ "nauc_precision_at_1_diff1": 0.8371664323172846,
611
+ "nauc_precision_at_3_max": 0.009068007810902291,
612
+ "nauc_precision_at_3_std": 0.21836130557966757,
613
+ "nauc_precision_at_3_diff1": 0.7907510757682494,
614
+ "nauc_precision_at_5_max": -0.0492919604982433,
615
+ "nauc_precision_at_5_std": 0.24441523907227103,
616
+ "nauc_precision_at_5_diff1": 0.7803706275170921,
617
+ "nauc_precision_at_10_max": -0.13346589278134638,
618
+ "nauc_precision_at_10_std": 0.27638896266646273,
619
+ "nauc_precision_at_10_diff1": 0.773044506560973,
620
+ "nauc_precision_at_20_max": -0.22424014427676833,
621
+ "nauc_precision_at_20_std": 0.31799507612112565,
622
+ "nauc_precision_at_20_diff1": 0.758957813131475,
623
+ "nauc_precision_at_100_max": -0.5378719532193269,
624
+ "nauc_precision_at_100_std": 0.4528372991444852,
625
+ "nauc_precision_at_100_diff1": 0.7560770076757304,
626
+ "nauc_precision_at_1000_max": -0.8933631153969233,
627
+ "nauc_precision_at_1000_std": 0.5591965880094497,
628
+ "nauc_precision_at_1000_diff1": 0.8049804885079432,
629
+ "nauc_mrr_at_1_max": 0.1234547429404733,
630
+ "nauc_mrr_at_1_std": 0.1586471848506029,
631
+ "nauc_mrr_at_1_diff1": 0.8374205635455932,
632
+ "nauc_mrr_at_3_max": 0.0759591156474296,
633
+ "nauc_mrr_at_3_std": 0.18432139049652596,
634
+ "nauc_mrr_at_3_diff1": 0.8172997943423154,
635
+ "nauc_mrr_at_5_max": 0.06458798468556289,
636
+ "nauc_mrr_at_5_std": 0.18879150925263186,
637
+ "nauc_mrr_at_5_diff1": 0.8153588873994831,
638
+ "nauc_mrr_at_10_max": 0.05640819131273918,
639
+ "nauc_mrr_at_10_std": 0.19202416957177562,
640
+ "nauc_mrr_at_10_diff1": 0.8149415213237646,
641
+ "nauc_mrr_at_20_max": 0.05261900861603199,
642
+ "nauc_mrr_at_20_std": 0.19368254224028988,
643
+ "nauc_mrr_at_20_diff1": 0.8144435264474017,
644
+ "nauc_mrr_at_100_max": 0.04969749121247066,
645
+ "nauc_mrr_at_100_std": 0.19500516541332255,
646
+ "nauc_mrr_at_100_diff1": 0.8147021280654135,
647
+ "nauc_mrr_at_1000_max": 0.04934573213223441,
648
+ "nauc_mrr_at_1000_std": 0.1951105366077533,
649
+ "nauc_mrr_at_1000_diff1": 0.8148301808658873,
650
+ "hit_rate_at_1": 0.4783,
651
+ "hit_rate_at_3": 0.5794,
652
+ "hit_rate_at_5": 0.6181,
653
+ "hit_rate_at_10": 0.6649,
654
+ "hit_rate_at_20": 0.7119,
655
+ "hit_rate_at_100": 0.8074,
656
+ "hit_rate_at_1000": 0.8563,
657
+ "main_score": 0.56886,
658
+ "hf_subset": "tur",
659
+ "languages": [
660
+ "tur-Latn"
661
+ ],
662
+ "mteb_version": "2.18.16"
663
+ }
664
+ ]
665
+ },
666
+ "evaluation_time": 308.66258307010867,
667
+ "kg_co2_emissions": null,
668
+ "date": "2026-08-11T08:43:09.059761Z",
669
+ "evaluation_phases": [
670
+ {
671
+ "name": "Data loading",
672
+ "start": 4.1369348764419556e-06,
673
+ "end": 8.95585033413954,
674
+ "split": "",
675
+ "subset": ""
676
+ },
677
+ {
678
+ "name": "Dataset transform",
679
+ "start": 8.955858692061156,
680
+ "end": 8.955860669957474,
681
+ "split": "",
682
+ "subset": ""
683
+ },
684
+ {
685
+ "name": "Encoding queries and documents",
686
+ "start": 9.023173480993137,
687
+ "end": 301.69988178205676,
688
+ "split": "test",
689
+ "subset": "tur"
690
+ },
691
+ {
692
+ "name": "Scoring",
693
+ "start": 301.69990209210664,
694
+ "end": 308.4712615769822,
695
+ "split": "test",
696
+ "subset": "tur"
697
+ }
698
+ ]
699
+ },
700
+ {
701
+ "dataset_revision": "3e069e7a30079d214a859741f5a0de75cf878867",
702
+ "task_name": "MKQARetrieval",
703
+ "mteb_version": "2.18.16",
704
+ "scores": {
705
+ "train": [
706
+ {
707
+ "ndcg_at_1": 0.06139,
708
+ "ndcg_at_3": 0.07844,
709
+ "ndcg_at_5": 0.08876,
710
+ "ndcg_at_10": 0.10331,
711
+ "ndcg_at_20": 0.11739,
712
+ "ndcg_at_100": 0.14806,
713
+ "ndcg_at_1000": 0.19718,
714
+ "map_at_1": 0.04632,
715
+ "map_at_3": 0.06645,
716
+ "map_at_5": 0.07352,
717
+ "map_at_10": 0.07996,
718
+ "map_at_20": 0.08404,
719
+ "map_at_100": 0.08831,
720
+ "map_at_1000": 0.08992,
721
+ "recall_at_1": 0.04632,
722
+ "recall_at_3": 0.08999,
723
+ "recall_at_5": 0.11716,
724
+ "recall_at_10": 0.15855,
725
+ "recall_at_20": 0.20969,
726
+ "recall_at_100": 0.36572,
727
+ "recall_at_1000": 0.7445,
728
+ "accuracy": 0.04632,
729
+ "precision_at_1": 0.06139,
730
+ "precision_at_3": 0.04172,
731
+ "precision_at_5": 0.03307,
732
+ "precision_at_10": 0.02291,
733
+ "precision_at_20": 0.01526,
734
+ "precision_at_100": 0.00531,
735
+ "precision_at_1000": 0.00107,
736
+ "mrr_at_1": 0.06138790035587188,
737
+ "mrr_at_3": 0.08311091340450771,
738
+ "mrr_at_5": 0.09005782918149466,
739
+ "mrr_at_10": 0.09632983580937318,
740
+ "mrr_at_20": 0.10029345491156058,
741
+ "mrr_at_100": 0.10418328055808178,
742
+ "mrr_at_1000": 0.10551962334234978,
743
+ "nauc_ndcg_at_1_max": 0.19046090779456812,
744
+ "nauc_ndcg_at_1_std": 0.2005678293225855,
745
+ "nauc_ndcg_at_1_diff1": 0.2732613145926889,
746
+ "nauc_ndcg_at_3_max": 0.154650069438559,
747
+ "nauc_ndcg_at_3_std": 0.21864693259137372,
748
+ "nauc_ndcg_at_3_diff1": 0.19561940316458706,
749
+ "nauc_ndcg_at_5_max": 0.14091485629423525,
750
+ "nauc_ndcg_at_5_std": 0.23477553800788697,
751
+ "nauc_ndcg_at_5_diff1": 0.17968447890707392,
752
+ "nauc_ndcg_at_10_max": 0.12493779940679503,
753
+ "nauc_ndcg_at_10_std": 0.25141145550716937,
754
+ "nauc_ndcg_at_10_diff1": 0.16150290010603824,
755
+ "nauc_ndcg_at_20_max": 0.11065180702665893,
756
+ "nauc_ndcg_at_20_std": 0.27110351591711057,
757
+ "nauc_ndcg_at_20_diff1": 0.15703674738718967,
758
+ "nauc_ndcg_at_100_max": 0.08421783643347659,
759
+ "nauc_ndcg_at_100_std": 0.2946243071156509,
760
+ "nauc_ndcg_at_100_diff1": 0.1502281839569693,
761
+ "nauc_ndcg_at_1000_max": 0.060271168700708054,
762
+ "nauc_ndcg_at_1000_std": 0.30321027407391904,
763
+ "nauc_ndcg_at_1000_diff1": 0.17005046587139194,
764
+ "nauc_map_at_1_max": 0.16299753614775253,
765
+ "nauc_map_at_1_std": 0.16346220475254442,
766
+ "nauc_map_at_1_diff1": 0.2917363544554654,
767
+ "nauc_map_at_3_max": 0.15598673546990813,
768
+ "nauc_map_at_3_std": 0.19971704494790168,
769
+ "nauc_map_at_3_diff1": 0.21645522028299932,
770
+ "nauc_map_at_5_max": 0.15166101798657583,
771
+ "nauc_map_at_5_std": 0.21573359427337446,
772
+ "nauc_map_at_5_diff1": 0.20455508216082804,
773
+ "nauc_map_at_10_max": 0.14475635349933652,
774
+ "nauc_map_at_10_std": 0.22759247812792957,
775
+ "nauc_map_at_10_diff1": 0.19358022834017713,
776
+ "nauc_map_at_20_max": 0.13899000442931903,
777
+ "nauc_map_at_20_std": 0.23628409823009514,
778
+ "nauc_map_at_20_diff1": 0.1906825576599391,
779
+ "nauc_map_at_100_max": 0.13372591272884576,
780
+ "nauc_map_at_100_std": 0.2432631891975316,
781
+ "nauc_map_at_100_diff1": 0.188127691740388,
782
+ "nauc_map_at_1000_max": 0.13264497426057695,
783
+ "nauc_map_at_1000_std": 0.2439228359663457,
784
+ "nauc_map_at_1000_diff1": 0.18877656163071965,
785
+ "nauc_recall_at_1_max": 0.16299753614775253,
786
+ "nauc_recall_at_1_std": 0.16346220475254442,
787
+ "nauc_recall_at_1_diff1": 0.2917363544554654,
788
+ "nauc_recall_at_3_max": 0.1314709043759448,
789
+ "nauc_recall_at_3_std": 0.22219290324299643,
790
+ "nauc_recall_at_3_diff1": 0.15892511021348496,
791
+ "nauc_recall_at_5_max": 0.11041311908878675,
792
+ "nauc_recall_at_5_std": 0.2479865816737892,
793
+ "nauc_recall_at_5_diff1": 0.12973531101440325,
794
+ "nauc_recall_at_10_max": 0.08352674383767103,
795
+ "nauc_recall_at_10_std": 0.27801950065943004,
796
+ "nauc_recall_at_10_diff1": 0.10277047520590306,
797
+ "nauc_recall_at_20_max": 0.055451740458610316,
798
+ "nauc_recall_at_20_std": 0.30864764930100463,
799
+ "nauc_recall_at_20_diff1": 0.10009990485099715,
800
+ "nauc_recall_at_100_max": -0.010313300454429164,
801
+ "nauc_recall_at_100_std": 0.3507341463365123,
802
+ "nauc_recall_at_100_diff1": 0.09178275311751917,
803
+ "nauc_recall_at_1000_max": -0.20168627852829185,
804
+ "nauc_recall_at_1000_std": 0.42587214313005395,
805
+ "nauc_recall_at_1000_diff1": 0.18865741402834005,
806
+ "nauc_precision_at_1_max": 0.19046090779456812,
807
+ "nauc_precision_at_1_std": 0.2005678293225855,
808
+ "nauc_precision_at_1_diff1": 0.2732613145926889,
809
+ "nauc_precision_at_3_max": 0.17065346765787537,
810
+ "nauc_precision_at_3_std": 0.2580216755377953,
811
+ "nauc_precision_at_3_diff1": 0.15208690889778514,
812
+ "nauc_precision_at_5_max": 0.15966584831210248,
813
+ "nauc_precision_at_5_std": 0.29340982416875505,
814
+ "nauc_precision_at_5_diff1": 0.13560040963190081,
815
+ "nauc_precision_at_10_max": 0.13047182792970813,
816
+ "nauc_precision_at_10_std": 0.3126115268876884,
817
+ "nauc_precision_at_10_diff1": 0.11276306288171808,
818
+ "nauc_precision_at_20_max": 0.09951766493736443,
819
+ "nauc_precision_at_20_std": 0.35593195934746613,
820
+ "nauc_precision_at_20_diff1": 0.10597363396032576,
821
+ "nauc_precision_at_100_max": 0.04010877959852337,
822
+ "nauc_precision_at_100_std": 0.378379077826633,
823
+ "nauc_precision_at_100_diff1": 0.0922392067579821,
824
+ "nauc_precision_at_1000_max": -0.044271818009240606,
825
+ "nauc_precision_at_1000_std": 0.29888109273282804,
826
+ "nauc_precision_at_1000_diff1": 0.09766770636218437,
827
+ "nauc_mrr_at_1_max": 0.19046090779456812,
828
+ "nauc_mrr_at_1_std": 0.2005678293225855,
829
+ "nauc_mrr_at_1_diff1": 0.2732613145926889,
830
+ "nauc_mrr_at_3_max": 0.16211133977600667,
831
+ "nauc_mrr_at_3_std": 0.22287755102083415,
832
+ "nauc_mrr_at_3_diff1": 0.20847534169317564,
833
+ "nauc_mrr_at_5_max": 0.15334494533630705,
834
+ "nauc_mrr_at_5_std": 0.2342332780831409,
835
+ "nauc_mrr_at_5_diff1": 0.19804894502376114,
836
+ "nauc_mrr_at_10_max": 0.1440542234453121,
837
+ "nauc_mrr_at_10_std": 0.240522209249698,
838
+ "nauc_mrr_at_10_diff1": 0.1893144127381246,
839
+ "nauc_mrr_at_20_max": 0.13965220841407827,
840
+ "nauc_mrr_at_20_std": 0.246658048198982,
841
+ "nauc_mrr_at_20_diff1": 0.18779493799431327,
842
+ "nauc_mrr_at_100_max": 0.1352372575762705,
843
+ "nauc_mrr_at_100_std": 0.24993578620339646,
844
+ "nauc_mrr_at_100_diff1": 0.1864436719961944,
845
+ "nauc_mrr_at_1000_max": 0.13462182002208006,
846
+ "nauc_mrr_at_1000_std": 0.25008212756311865,
847
+ "nauc_mrr_at_1000_diff1": 0.18711915110093033,
848
+ "hit_rate_at_1": 0.06139,
849
+ "hit_rate_at_3": 0.11254,
850
+ "hit_rate_at_5": 0.14339,
851
+ "hit_rate_at_10": 0.19024,
852
+ "hit_rate_at_20": 0.24763,
853
+ "hit_rate_at_100": 0.41429,
854
+ "hit_rate_at_1000": 0.78455,
855
+ "main_score": 0.10331,
856
+ "hf_subset": "tr",
857
+ "languages": [
858
+ "tur-Latn"
859
+ ],
860
+ "mteb_version": "2.18.16"
861
+ }
862
+ ]
863
+ },
864
+ "evaluation_time": 25.021837311098352,
865
+ "kg_co2_emissions": null,
866
+ "date": "2026-08-11T08:43:34.083720Z",
867
+ "evaluation_phases": [
868
+ {
869
+ "name": "Data loading",
870
+ "start": 4.032161086797714e-06,
871
+ "end": 6.687524263979867,
872
+ "split": "",
873
+ "subset": ""
874
+ },
875
+ {
876
+ "name": "Dataset transform",
877
+ "start": 6.687531795119867,
878
+ "end": 6.6875344440341,
879
+ "split": "",
880
+ "subset": ""
881
+ },
882
+ {
883
+ "name": "Encoding queries and documents",
884
+ "start": 6.735912636155263,
885
+ "end": 21.24591747415252,
886
+ "split": "train",
887
+ "subset": "tr"
888
+ },
889
+ {
890
+ "name": "Scoring",
891
+ "start": 21.245933528989553,
892
+ "end": 24.96005431120284,
893
+ "split": "train",
894
+ "subset": "tr"
895
+ }
896
+ ]
897
+ },
898
+ {
899
+ "dataset_revision": "979a211276faa22f671e69d096634193567cfd05",
900
+ "task_name": "BelebeleRetrieval",
901
+ "mteb_version": "2.18.16",
902
+ "scores": {
903
+ "test": [
904
+ {
905
+ "ndcg_at_1": 0.83778,
906
+ "ndcg_at_3": 0.8729,
907
+ "ndcg_at_5": 0.8793,
908
+ "ndcg_at_10": 0.88493,
909
+ "ndcg_at_20": 0.89217,
910
+ "ndcg_at_100": 0.89819,
911
+ "ndcg_at_1000": 0.89954,
912
+ "map_at_1": 0.83778,
913
+ "map_at_3": 0.86463,
914
+ "map_at_5": 0.86819,
915
+ "map_at_10": 0.87044,
916
+ "map_at_20": 0.87239,
917
+ "map_at_100": 0.87331,
918
+ "map_at_1000": 0.87337,
919
+ "recall_at_1": 0.83778,
920
+ "recall_at_3": 0.89667,
921
+ "recall_at_5": 0.91222,
922
+ "recall_at_10": 0.93,
923
+ "recall_at_20": 0.95889,
924
+ "recall_at_100": 0.99,
925
+ "recall_at_1000": 1.0,
926
+ "accuracy": 0.83778,
927
+ "precision_at_1": 0.83778,
928
+ "precision_at_3": 0.29889,
929
+ "precision_at_5": 0.18244,
930
+ "precision_at_10": 0.093,
931
+ "precision_at_20": 0.04794,
932
+ "precision_at_100": 0.0099,
933
+ "precision_at_1000": 0.001,
934
+ "mrr_at_1": 0.8377777777777777,
935
+ "mrr_at_3": 0.8646296296296296,
936
+ "mrr_at_5": 0.8676296296296296,
937
+ "mrr_at_10": 0.8702103174603174,
938
+ "mrr_at_20": 0.8720055372139995,
939
+ "mrr_at_100": 0.8729395151413755,
940
+ "mrr_at_1000": 0.8730008378211206,
941
+ "nauc_ndcg_at_1_max": 0.8410244670966699,
942
+ "nauc_ndcg_at_1_std": 0.06830117285862436,
943
+ "nauc_ndcg_at_1_diff1": 0.920135195184682,
944
+ "nauc_ndcg_at_3_max": 0.8482741017353032,
945
+ "nauc_ndcg_at_3_std": 0.10547749274165154,
946
+ "nauc_ndcg_at_3_diff1": 0.8954013102092868,
947
+ "nauc_ndcg_at_5_max": 0.8494532972001592,
948
+ "nauc_ndcg_at_5_std": 0.12742254228373348,
949
+ "nauc_ndcg_at_5_diff1": 0.8968040492636123,
950
+ "nauc_ndcg_at_10_max": 0.8533332736310034,
951
+ "nauc_ndcg_at_10_std": 0.149236559008684,
952
+ "nauc_ndcg_at_10_diff1": 0.8992038888020082,
953
+ "nauc_ndcg_at_20_max": 0.851087799934009,
954
+ "nauc_ndcg_at_20_std": 0.1380363533185576,
955
+ "nauc_ndcg_at_20_diff1": 0.8999492972758715,
956
+ "nauc_ndcg_at_100_max": 0.8513927339831183,
957
+ "nauc_ndcg_at_100_std": 0.12804271152305366,
958
+ "nauc_ndcg_at_100_diff1": 0.9025952980091414,
959
+ "nauc_ndcg_at_1000_max": 0.8503838452506185,
960
+ "nauc_ndcg_at_1000_std": 0.12168496863829963,
961
+ "nauc_ndcg_at_1000_diff1": 0.9025192818485014,
962
+ "nauc_map_at_1_max": 0.8410244670966699,
963
+ "nauc_map_at_1_std": 0.06830117285862436,
964
+ "nauc_map_at_1_diff1": 0.920135195184682,
965
+ "nauc_map_at_3_max": 0.8472124322730213,
966
+ "nauc_map_at_3_std": 0.09524294429360917,
967
+ "nauc_map_at_3_diff1": 0.9024453786958063,
968
+ "nauc_map_at_5_max": 0.8476935399614086,
969
+ "nauc_map_at_5_std": 0.10596944315332903,
970
+ "nauc_map_at_5_diff1": 0.9032210546789997,
971
+ "nauc_map_at_10_max": 0.8491278258232463,
972
+ "nauc_map_at_10_std": 0.1139024265659601,
973
+ "nauc_map_at_10_diff1": 0.904189158426485,
974
+ "nauc_map_at_20_max": 0.8486364332677006,
975
+ "nauc_map_at_20_std": 0.11146918219618034,
976
+ "nauc_map_at_20_diff1": 0.9044222430772109,
977
+ "nauc_map_at_100_max": 0.8487478052591781,
978
+ "nauc_map_at_100_std": 0.10976937220975148,
979
+ "nauc_map_at_100_diff1": 0.9047515896507614,
980
+ "nauc_map_at_1000_max": 0.8487193359313112,
981
+ "nauc_map_at_1000_std": 0.10956032718263647,
982
+ "nauc_map_at_1000_diff1": 0.9047484933605456,
983
+ "nauc_recall_at_1_max": 0.8410244670966699,
984
+ "nauc_recall_at_1_std": 0.06830117285862436,
985
+ "nauc_recall_at_1_diff1": 0.920135195184682,
986
+ "nauc_recall_at_3_max": 0.851642922678282,
987
+ "nauc_recall_at_3_std": 0.14283193692467533,
988
+ "nauc_recall_at_3_diff1": 0.8695643406632181,
989
+ "nauc_recall_at_5_max": 0.8566109988299108,
990
+ "nauc_recall_at_5_std": 0.22182037371910784,
991
+ "nauc_recall_at_5_diff1": 0.8704629531137352,
992
+ "nauc_recall_at_10_max": 0.8772175536881434,
993
+ "nauc_recall_at_10_std": 0.3506513716597738,
994
+ "nauc_recall_at_10_diff1": 0.8759133282942827,
995
+ "nauc_recall_at_20_max": 0.8692305751129306,
996
+ "nauc_recall_at_20_std": 0.36314886314886435,
997
+ "nauc_recall_at_20_diff1": 0.867451485098547,
998
+ "nauc_recall_at_100_max": 0.9286751737731979,
999
+ "nauc_recall_at_100_std": 0.6017221703496162,
1000
+ "nauc_recall_at_100_diff1": 0.9074074074074023,
1001
+ "nauc_recall_at_1000_max": null,
1002
+ "nauc_recall_at_1000_std": null,
1003
+ "nauc_recall_at_1000_diff1": null,
1004
+ "nauc_precision_at_1_max": 0.8410244670966699,
1005
+ "nauc_precision_at_1_std": 0.06830117285862436,
1006
+ "nauc_precision_at_1_diff1": 0.920135195184682,
1007
+ "nauc_precision_at_3_max": 0.8516429226782833,
1008
+ "nauc_precision_at_3_std": 0.14283193692467333,
1009
+ "nauc_precision_at_3_diff1": 0.8695643406632189,
1010
+ "nauc_precision_at_5_max": 0.8566109988299109,
1011
+ "nauc_precision_at_5_std": 0.22182037371910543,
1012
+ "nauc_precision_at_5_diff1": 0.8704629531137342,
1013
+ "nauc_precision_at_10_max": 0.8772175536881401,
1014
+ "nauc_precision_at_10_std": 0.35065137165977484,
1015
+ "nauc_precision_at_10_diff1": 0.8759133282942804,
1016
+ "nauc_precision_at_20_max": 0.8692305751129216,
1017
+ "nauc_precision_at_20_std": 0.3631488631488554,
1018
+ "nauc_precision_at_20_diff1": 0.8674514850985429,
1019
+ "nauc_precision_at_100_max": 0.928675173773221,
1020
+ "nauc_precision_at_100_std": 0.6017221703496362,
1021
+ "nauc_precision_at_100_diff1": 0.9074074074074131,
1022
+ "nauc_precision_at_1000_max": null,
1023
+ "nauc_precision_at_1000_std": null,
1024
+ "nauc_precision_at_1000_diff1": null,
1025
+ "nauc_mrr_at_1_max": 0.8410244670966699,
1026
+ "nauc_mrr_at_1_std": 0.06830117285862436,
1027
+ "nauc_mrr_at_1_diff1": 0.920135195184682,
1028
+ "nauc_mrr_at_3_max": 0.8472124322730213,
1029
+ "nauc_mrr_at_3_std": 0.09524294429360917,
1030
+ "nauc_mrr_at_3_diff1": 0.9024453786958063,
1031
+ "nauc_mrr_at_5_max": 0.8483553382502018,
1032
+ "nauc_mrr_at_5_std": 0.10985416276732428,
1033
+ "nauc_mrr_at_5_diff1": 0.9036415761748603,
1034
+ "nauc_mrr_at_10_max": 0.8495478126860134,
1035
+ "nauc_mrr_at_10_std": 0.1158882768620596,
1036
+ "nauc_mrr_at_10_diff1": 0.9052043399121691,
1037
+ "nauc_mrr_at_20_max": 0.8494438987722414,
1038
+ "nauc_mrr_at_20_std": 0.11432323610147117,
1039
+ "nauc_mrr_at_20_diff1": 0.9048993393892497,
1040
+ "nauc_mrr_at_100_max": 0.8494035670115612,
1041
+ "nauc_mrr_at_100_std": 0.11245996264042155,
1042
+ "nauc_mrr_at_100_diff1": 0.9053150039850627,
1043
+ "nauc_mrr_at_1000_max": 0.8493755127679687,
1044
+ "nauc_mrr_at_1000_std": 0.11225290183205333,
1045
+ "nauc_mrr_at_1000_diff1": 0.9053121992092529,
1046
+ "hit_rate_at_1": 0.83778,
1047
+ "hit_rate_at_3": 0.89667,
1048
+ "hit_rate_at_5": 0.91222,
1049
+ "hit_rate_at_10": 0.93,
1050
+ "hit_rate_at_20": 0.95889,
1051
+ "hit_rate_at_100": 0.99,
1052
+ "hit_rate_at_1000": 1.0,
1053
+ "main_score": 0.88493,
1054
+ "hf_subset": "tur_Latn-tur_Latn",
1055
+ "languages": [
1056
+ "tur-Latn",
1057
+ "tur-Latn"
1058
+ ],
1059
+ "mteb_version": "2.18.16"
1060
+ }
1061
+ ]
1062
+ },
1063
+ "evaluation_time": 4.633956309873611,
1064
+ "kg_co2_emissions": null,
1065
+ "date": "2026-08-11T08:43:38.719847Z",
1066
+ "evaluation_phases": [
1067
+ {
1068
+ "name": "Data loading",
1069
+ "start": 0.0,
1070
+ "end": 1.653581827878952,
1071
+ "split": "",
1072
+ "subset": ""
1073
+ },
1074
+ {
1075
+ "name": "Encoding queries and documents",
1076
+ "start": 1.6664734289515764,
1077
+ "end": 4.349166231928393,
1078
+ "split": "test",
1079
+ "subset": "tur_Latn-tur_Latn"
1080
+ },
1081
+ {
1082
+ "name": "Scoring",
1083
+ "start": 4.349181247875094,
1084
+ "end": 4.6296024329494685,
1085
+ "split": "test",
1086
+ "subset": "tur_Latn-tur_Latn"
1087
+ }
1088
+ ]
1089
+ }
1090
+ ],
1091
+ "exceptions": [],
1092
+ "experiment_name": null
1093
+ }
1094
+ }
results/suite-comparison.json ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "model": "multilingual E5 base",
4
+ "parameters": 278043648,
5
+ "embedding_dimension": 768,
6
+ "TurHistQuadRetrieval": 0.49726,
7
+ "XQuADRetrieval": 0.95335,
8
+ "WebFAQRetrieval": 0.65032,
9
+ "MKQARetrieval": 0.07213,
10
+ "BelebeleRetrieval": 0.92503,
11
+ "macro_average": 0.619618
12
+ },
13
+ {
14
+ "model": "GöktuğTR 270M v2 hard negatives",
15
+ "parameters": 268098176,
16
+ "embedding_dimension": 640,
17
+ "TurHistQuadRetrieval": 0.42198,
18
+ "XQuADRetrieval": 0.86393,
19
+ "WebFAQRetrieval": 0.56886,
20
+ "MKQARetrieval": 0.10331,
21
+ "BelebeleRetrieval": 0.88493,
22
+ "macro_average": 0.568602
23
+ },
24
+ {
25
+ "model": "GöktuğTR 270M v1",
26
+ "parameters": 268098176,
27
+ "embedding_dimension": 640,
28
+ "TurHistQuadRetrieval": 0.42196,
29
+ "XQuADRetrieval": 0.85832,
30
+ "WebFAQRetrieval": 0.56402,
31
+ "MKQARetrieval": 0.10296,
32
+ "BelebeleRetrieval": 0.88222,
33
+ "macro_average": 0.565896
34
+ },
35
+ {
36
+ "model": "GöktuğTR 118M compact",
37
+ "parameters": 117653760,
38
+ "embedding_dimension": 384,
39
+ "TurHistQuadRetrieval": 0.25299,
40
+ "XQuADRetrieval": 0.81123,
41
+ "WebFAQRetrieval": 0.46307,
42
+ "MKQARetrieval": 0.04855,
43
+ "BelebeleRetrieval": 0.82451,
44
+ "macro_average": 0.48007
45
+ }
46
+ ]
results/suite-manifest.json ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema": "goktugtr-turkish-retrieval-suite-v1",
3
+ "evaluator": "mteb==2.18.16",
4
+ "language_filter": "Turkish-only exclusive subsets",
5
+ "normalized_embeddings": true,
6
+ "tasks": [
7
+ {
8
+ "name": "TurHistQuadRetrieval",
9
+ "dataset": "asparius/TurHistQuAD",
10
+ "revision": "2a2b8ddecf1189f530676244d0751e1d0a569e03",
11
+ "subset": "default",
12
+ "split": "test",
13
+ "license": "mit",
14
+ "domain": "Ottoman history / encyclopaedic QA"
15
+ },
16
+ {
17
+ "name": "XQuADRetrieval",
18
+ "dataset": "google/xquad",
19
+ "revision": "51adfef1c1287aab1d2d91b5bead9bcfb9c68583",
20
+ "subset": "tr",
21
+ "split": "validation",
22
+ "license": "cc-by-sa-4.0",
23
+ "domain": "reading comprehension"
24
+ },
25
+ {
26
+ "name": "WebFAQRetrieval",
27
+ "dataset": "mteb/WebFAQRetrieval",
28
+ "revision": "f64f483ad0f31d2e78209d524c14a4a867965959",
29
+ "subset": "tur",
30
+ "split": "test",
31
+ "license": "cc-by-4.0",
32
+ "domain": "web FAQ"
33
+ },
34
+ {
35
+ "name": "MKQARetrieval",
36
+ "dataset": "mteb/MKQARetrieval",
37
+ "revision": "3e069e7a30079d214a859741f5a0de75cf878867",
38
+ "subset": "tr",
39
+ "split": "train",
40
+ "license": "cc-by-3.0",
41
+ "domain": "open-domain knowledge QA"
42
+ },
43
+ {
44
+ "name": "BelebeleRetrieval",
45
+ "dataset": "mteb/belebele",
46
+ "revision": "979a211276faa22f671e69d096634193567cfd05",
47
+ "subset": "tur_Latn-tur_Latn",
48
+ "split": "test",
49
+ "license": "cc-by-sa-4.0",
50
+ "domain": "multilingual reading comprehension"
51
+ }
52
+ ]
53
+ }
results/trainer-state.json ADDED
@@ -0,0 +1,652 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_global_step": null,
3
+ "best_metric": null,
4
+ "best_model_checkpoint": null,
5
+ "epoch": 1.0,
6
+ "eval_steps": 125,
7
+ "global_step": 782,
8
+ "is_hyper_param_search": false,
9
+ "is_local_process_zero": true,
10
+ "is_world_process_zero": true,
11
+ "log_history": [
12
+ {
13
+ "epoch": 0.0128,
14
+ "grad_norm": 6.78125,
15
+ "learning_rate": 1.8e-06,
16
+ "loss": 1.1243257522583008,
17
+ "step": 10
18
+ },
19
+ {
20
+ "epoch": 0.0256,
21
+ "grad_norm": 5.125,
22
+ "learning_rate": 3.7999999999999996e-06,
23
+ "loss": 1.127305030822754,
24
+ "step": 20
25
+ },
26
+ {
27
+ "epoch": 0.0384,
28
+ "grad_norm": 6.625,
29
+ "learning_rate": 5.7999999999999995e-06,
30
+ "loss": 0.9744441986083985,
31
+ "step": 30
32
+ },
33
+ {
34
+ "epoch": 0.0512,
35
+ "grad_norm": 4.25,
36
+ "learning_rate": 7.8e-06,
37
+ "loss": 1.1323395729064942,
38
+ "step": 40
39
+ },
40
+ {
41
+ "epoch": 0.064,
42
+ "grad_norm": 10.3125,
43
+ "learning_rate": 7.902964959568732e-06,
44
+ "loss": 1.4813992500305175,
45
+ "step": 50
46
+ },
47
+ {
48
+ "epoch": 0.0768,
49
+ "grad_norm": 6.34375,
50
+ "learning_rate": 7.795148247978437e-06,
51
+ "loss": 0.995882797241211,
52
+ "step": 60
53
+ },
54
+ {
55
+ "epoch": 0.0896,
56
+ "grad_norm": 5.125,
57
+ "learning_rate": 7.68733153638814e-06,
58
+ "loss": 0.701082181930542,
59
+ "step": 70
60
+ },
61
+ {
62
+ "epoch": 0.1024,
63
+ "grad_norm": 4.59375,
64
+ "learning_rate": 7.579514824797844e-06,
65
+ "loss": 1.2655192375183106,
66
+ "step": 80
67
+ },
68
+ {
69
+ "epoch": 0.1152,
70
+ "grad_norm": 6.15625,
71
+ "learning_rate": 7.471698113207547e-06,
72
+ "loss": 1.1107177734375,
73
+ "step": 90
74
+ },
75
+ {
76
+ "epoch": 0.128,
77
+ "grad_norm": 5.40625,
78
+ "learning_rate": 7.36388140161725e-06,
79
+ "loss": 0.9124648094177246,
80
+ "step": 100
81
+ },
82
+ {
83
+ "epoch": 0.1408,
84
+ "grad_norm": 6.03125,
85
+ "learning_rate": 7.256064690026954e-06,
86
+ "loss": 0.934360408782959,
87
+ "step": 110
88
+ },
89
+ {
90
+ "epoch": 0.1536,
91
+ "grad_norm": 5.84375,
92
+ "learning_rate": 7.148247978436657e-06,
93
+ "loss": 0.8691039085388184,
94
+ "step": 120
95
+ },
96
+ {
97
+ "epoch": 0.16,
98
+ "eval_goktugtr-validation_cosine_accuracy": 0.8939999938011169,
99
+ "eval_loss": 0.7023630142211914,
100
+ "eval_runtime": 26.3381,
101
+ "eval_samples_per_second": 75.936,
102
+ "eval_steps_per_second": 9.492,
103
+ "step": 125
104
+ },
105
+ {
106
+ "epoch": 0.1664,
107
+ "grad_norm": 4.25,
108
+ "learning_rate": 7.0404312668463605e-06,
109
+ "loss": 0.7453449726104736,
110
+ "step": 130
111
+ },
112
+ {
113
+ "epoch": 0.1792,
114
+ "grad_norm": 5.1875,
115
+ "learning_rate": 6.932614555256064e-06,
116
+ "loss": 1.0471577644348145,
117
+ "step": 140
118
+ },
119
+ {
120
+ "epoch": 0.192,
121
+ "grad_norm": 7.09375,
122
+ "learning_rate": 6.824797843665768e-06,
123
+ "loss": 0.8312005043029785,
124
+ "step": 150
125
+ },
126
+ {
127
+ "epoch": 0.2048,
128
+ "grad_norm": 6.59375,
129
+ "learning_rate": 6.7169811320754715e-06,
130
+ "loss": 0.978731632232666,
131
+ "step": 160
132
+ },
133
+ {
134
+ "epoch": 0.2176,
135
+ "grad_norm": 4.4375,
136
+ "learning_rate": 6.609164420485175e-06,
137
+ "loss": 1.5524386405944823,
138
+ "step": 170
139
+ },
140
+ {
141
+ "epoch": 0.2304,
142
+ "grad_norm": 5.5,
143
+ "learning_rate": 6.501347708894878e-06,
144
+ "loss": 0.9334232330322265,
145
+ "step": 180
146
+ },
147
+ {
148
+ "epoch": 0.2432,
149
+ "grad_norm": 6.03125,
150
+ "learning_rate": 6.3935309973045816e-06,
151
+ "loss": 0.9607770919799805,
152
+ "step": 190
153
+ },
154
+ {
155
+ "epoch": 0.256,
156
+ "grad_norm": 6.0625,
157
+ "learning_rate": 6.285714285714285e-06,
158
+ "loss": 0.7139860630035401,
159
+ "step": 200
160
+ },
161
+ {
162
+ "epoch": 0.2688,
163
+ "grad_norm": 5.1875,
164
+ "learning_rate": 6.177897574123988e-06,
165
+ "loss": 0.9790145874023437,
166
+ "step": 210
167
+ },
168
+ {
169
+ "epoch": 0.2816,
170
+ "grad_norm": 10.6875,
171
+ "learning_rate": 6.0700808625336925e-06,
172
+ "loss": 0.8579249382019043,
173
+ "step": 220
174
+ },
175
+ {
176
+ "epoch": 0.2944,
177
+ "grad_norm": 6.125,
178
+ "learning_rate": 5.962264150943396e-06,
179
+ "loss": 0.7599565505981445,
180
+ "step": 230
181
+ },
182
+ {
183
+ "epoch": 0.3072,
184
+ "grad_norm": 4.21875,
185
+ "learning_rate": 5.8544474393531e-06,
186
+ "loss": 0.6702170848846436,
187
+ "step": 240
188
+ },
189
+ {
190
+ "epoch": 0.32,
191
+ "grad_norm": 6.90625,
192
+ "learning_rate": 5.7466307277628035e-06,
193
+ "loss": 0.7464066505432129,
194
+ "step": 250
195
+ },
196
+ {
197
+ "epoch": 0.32,
198
+ "eval_goktugtr-validation_cosine_accuracy": 0.8930000066757202,
199
+ "eval_loss": 0.6991313695907593,
200
+ "eval_runtime": 26.5563,
201
+ "eval_samples_per_second": 75.312,
202
+ "eval_steps_per_second": 9.414,
203
+ "step": 250
204
+ },
205
+ {
206
+ "epoch": 0.3328,
207
+ "grad_norm": 5.1875,
208
+ "learning_rate": 5.638814016172507e-06,
209
+ "loss": 1.2767579078674316,
210
+ "step": 260
211
+ },
212
+ {
213
+ "epoch": 0.3456,
214
+ "grad_norm": 6.28125,
215
+ "learning_rate": 5.53099730458221e-06,
216
+ "loss": 0.7426451683044434,
217
+ "step": 270
218
+ },
219
+ {
220
+ "epoch": 0.3584,
221
+ "grad_norm": 11.875,
222
+ "learning_rate": 5.423180592991914e-06,
223
+ "loss": 1.1208632469177247,
224
+ "step": 280
225
+ },
226
+ {
227
+ "epoch": 0.3712,
228
+ "grad_norm": 5.96875,
229
+ "learning_rate": 5.315363881401617e-06,
230
+ "loss": 0.645590353012085,
231
+ "step": 290
232
+ },
233
+ {
234
+ "epoch": 0.384,
235
+ "grad_norm": 5.53125,
236
+ "learning_rate": 5.20754716981132e-06,
237
+ "loss": 0.7049435138702392,
238
+ "step": 300
239
+ },
240
+ {
241
+ "epoch": 0.3968,
242
+ "grad_norm": 6.75,
243
+ "learning_rate": 5.099730458221024e-06,
244
+ "loss": 0.6756068706512451,
245
+ "step": 310
246
+ },
247
+ {
248
+ "epoch": 0.4096,
249
+ "grad_norm": 5.34375,
250
+ "learning_rate": 4.991913746630728e-06,
251
+ "loss": 0.7691781044006347,
252
+ "step": 320
253
+ },
254
+ {
255
+ "epoch": 0.4224,
256
+ "grad_norm": 6.15625,
257
+ "learning_rate": 4.884097035040431e-06,
258
+ "loss": 0.7604856967926026,
259
+ "step": 330
260
+ },
261
+ {
262
+ "epoch": 0.4352,
263
+ "grad_norm": 10.875,
264
+ "learning_rate": 4.776280323450135e-06,
265
+ "loss": 1.0698866844177246,
266
+ "step": 340
267
+ },
268
+ {
269
+ "epoch": 0.448,
270
+ "grad_norm": 10.3125,
271
+ "learning_rate": 4.668463611859838e-06,
272
+ "loss": 0.8213407516479492,
273
+ "step": 350
274
+ },
275
+ {
276
+ "epoch": 0.4608,
277
+ "grad_norm": 11.6875,
278
+ "learning_rate": 4.5606469002695414e-06,
279
+ "loss": 0.7953258991241455,
280
+ "step": 360
281
+ },
282
+ {
283
+ "epoch": 0.4736,
284
+ "grad_norm": 12.0,
285
+ "learning_rate": 4.452830188679245e-06,
286
+ "loss": 0.8094965934753418,
287
+ "step": 370
288
+ },
289
+ {
290
+ "epoch": 0.48,
291
+ "eval_goktugtr-validation_cosine_accuracy": 0.8934999704360962,
292
+ "eval_loss": 0.69776850938797,
293
+ "eval_runtime": 26.4093,
294
+ "eval_samples_per_second": 75.731,
295
+ "eval_steps_per_second": 9.466,
296
+ "step": 375
297
+ },
298
+ {
299
+ "epoch": 0.4864,
300
+ "grad_norm": 5.1875,
301
+ "learning_rate": 4.345013477088948e-06,
302
+ "loss": 0.7656964778900146,
303
+ "step": 380
304
+ },
305
+ {
306
+ "epoch": 0.4992,
307
+ "grad_norm": 4.6875,
308
+ "learning_rate": 4.2371967654986516e-06,
309
+ "loss": 0.6850308418273926,
310
+ "step": 390
311
+ },
312
+ {
313
+ "epoch": 0.512,
314
+ "grad_norm": 5.09375,
315
+ "learning_rate": 4.129380053908355e-06,
316
+ "loss": 0.967844295501709,
317
+ "step": 400
318
+ },
319
+ {
320
+ "epoch": 0.5248,
321
+ "grad_norm": 6.6875,
322
+ "learning_rate": 4.021563342318059e-06,
323
+ "loss": 0.9944411277770996,
324
+ "step": 410
325
+ },
326
+ {
327
+ "epoch": 0.5376,
328
+ "grad_norm": 7.40625,
329
+ "learning_rate": 3.9137466307277625e-06,
330
+ "loss": 1.2628602981567383,
331
+ "step": 420
332
+ },
333
+ {
334
+ "epoch": 0.5504,
335
+ "grad_norm": 12.125,
336
+ "learning_rate": 3.8059299191374663e-06,
337
+ "loss": 0.7692550182342529,
338
+ "step": 430
339
+ },
340
+ {
341
+ "epoch": 0.5632,
342
+ "grad_norm": 4.34375,
343
+ "learning_rate": 3.6981132075471697e-06,
344
+ "loss": 0.6217018604278565,
345
+ "step": 440
346
+ },
347
+ {
348
+ "epoch": 0.576,
349
+ "grad_norm": 4.1875,
350
+ "learning_rate": 3.590296495956873e-06,
351
+ "loss": 0.7464039325714111,
352
+ "step": 450
353
+ },
354
+ {
355
+ "epoch": 0.5888,
356
+ "grad_norm": 4.875,
357
+ "learning_rate": 3.4824797843665764e-06,
358
+ "loss": 0.8691292762756347,
359
+ "step": 460
360
+ },
361
+ {
362
+ "epoch": 0.6016,
363
+ "grad_norm": 5.1875,
364
+ "learning_rate": 3.3746630727762802e-06,
365
+ "loss": 0.6637392044067383,
366
+ "step": 470
367
+ },
368
+ {
369
+ "epoch": 0.6144,
370
+ "grad_norm": 4.75,
371
+ "learning_rate": 3.2668463611859836e-06,
372
+ "loss": 1.0880215644836426,
373
+ "step": 480
374
+ },
375
+ {
376
+ "epoch": 0.6272,
377
+ "grad_norm": 4.5625,
378
+ "learning_rate": 3.1590296495956874e-06,
379
+ "loss": 0.7366327285766602,
380
+ "step": 490
381
+ },
382
+ {
383
+ "epoch": 0.64,
384
+ "grad_norm": 5.46875,
385
+ "learning_rate": 3.0512129380053908e-06,
386
+ "loss": 0.8034601211547852,
387
+ "step": 500
388
+ },
389
+ {
390
+ "epoch": 0.64,
391
+ "eval_goktugtr-validation_cosine_accuracy": 0.8930000066757202,
392
+ "eval_loss": 0.6969029307365417,
393
+ "eval_runtime": 26.2197,
394
+ "eval_samples_per_second": 76.279,
395
+ "eval_steps_per_second": 9.535,
396
+ "step": 500
397
+ },
398
+ {
399
+ "epoch": 0.6528,
400
+ "grad_norm": 5.28125,
401
+ "learning_rate": 2.943396226415094e-06,
402
+ "loss": 0.7920682907104493,
403
+ "step": 510
404
+ },
405
+ {
406
+ "epoch": 0.6656,
407
+ "grad_norm": 4.96875,
408
+ "learning_rate": 2.835579514824798e-06,
409
+ "loss": 0.8281051635742187,
410
+ "step": 520
411
+ },
412
+ {
413
+ "epoch": 0.6784,
414
+ "grad_norm": 5.25,
415
+ "learning_rate": 2.7277628032345013e-06,
416
+ "loss": 0.9947348594665527,
417
+ "step": 530
418
+ },
419
+ {
420
+ "epoch": 0.6912,
421
+ "grad_norm": 4.6875,
422
+ "learning_rate": 2.6199460916442047e-06,
423
+ "loss": 0.9334335327148438,
424
+ "step": 540
425
+ },
426
+ {
427
+ "epoch": 0.704,
428
+ "grad_norm": 5.5,
429
+ "learning_rate": 2.512129380053908e-06,
430
+ "loss": 1.0346774101257323,
431
+ "step": 550
432
+ },
433
+ {
434
+ "epoch": 0.7168,
435
+ "grad_norm": 5.15625,
436
+ "learning_rate": 2.404312668463612e-06,
437
+ "loss": 0.9480579376220704,
438
+ "step": 560
439
+ },
440
+ {
441
+ "epoch": 0.7296,
442
+ "grad_norm": 5.625,
443
+ "learning_rate": 2.2964959568733152e-06,
444
+ "loss": 0.6826355457305908,
445
+ "step": 570
446
+ },
447
+ {
448
+ "epoch": 0.7424,
449
+ "grad_norm": 5.25,
450
+ "learning_rate": 2.1886792452830186e-06,
451
+ "loss": 1.3600321769714356,
452
+ "step": 580
453
+ },
454
+ {
455
+ "epoch": 0.7552,
456
+ "grad_norm": 5.0625,
457
+ "learning_rate": 2.080862533692722e-06,
458
+ "loss": 0.8289908409118653,
459
+ "step": 590
460
+ },
461
+ {
462
+ "epoch": 0.768,
463
+ "grad_norm": 6.5625,
464
+ "learning_rate": 1.9730458221024258e-06,
465
+ "loss": 0.9872503280639648,
466
+ "step": 600
467
+ },
468
+ {
469
+ "epoch": 0.7808,
470
+ "grad_norm": 5.40625,
471
+ "learning_rate": 1.8652291105121293e-06,
472
+ "loss": 0.7281249046325684,
473
+ "step": 610
474
+ },
475
+ {
476
+ "epoch": 0.7936,
477
+ "grad_norm": 5.1875,
478
+ "learning_rate": 1.7574123989218327e-06,
479
+ "loss": 0.9853657722473145,
480
+ "step": 620
481
+ },
482
+ {
483
+ "epoch": 0.8,
484
+ "eval_goktugtr-validation_cosine_accuracy": 0.8939999938011169,
485
+ "eval_loss": 0.6965240836143494,
486
+ "eval_runtime": 26.199,
487
+ "eval_samples_per_second": 76.339,
488
+ "eval_steps_per_second": 9.542,
489
+ "step": 625
490
+ },
491
+ {
492
+ "epoch": 0.8064,
493
+ "grad_norm": 4.53125,
494
+ "learning_rate": 1.6495956873315365e-06,
495
+ "loss": 0.8656760215759277,
496
+ "step": 630
497
+ },
498
+ {
499
+ "epoch": 0.8192,
500
+ "grad_norm": 5.875,
501
+ "learning_rate": 1.5417789757412399e-06,
502
+ "loss": 1.5203048706054687,
503
+ "step": 640
504
+ },
505
+ {
506
+ "epoch": 0.832,
507
+ "grad_norm": 5.65625,
508
+ "learning_rate": 1.4339622641509432e-06,
509
+ "loss": 0.9369791984558106,
510
+ "step": 650
511
+ },
512
+ {
513
+ "epoch": 0.8448,
514
+ "grad_norm": 5.03125,
515
+ "learning_rate": 1.3261455525606468e-06,
516
+ "loss": 0.7103929042816162,
517
+ "step": 660
518
+ },
519
+ {
520
+ "epoch": 0.8576,
521
+ "grad_norm": 6.875,
522
+ "learning_rate": 1.2183288409703502e-06,
523
+ "loss": 0.9066259384155273,
524
+ "step": 670
525
+ },
526
+ {
527
+ "epoch": 0.8704,
528
+ "grad_norm": 5.1875,
529
+ "learning_rate": 1.110512129380054e-06,
530
+ "loss": 0.7295275688171386,
531
+ "step": 680
532
+ },
533
+ {
534
+ "epoch": 0.8832,
535
+ "grad_norm": 5.25,
536
+ "learning_rate": 1.0026954177897574e-06,
537
+ "loss": 0.8187677383422851,
538
+ "step": 690
539
+ },
540
+ {
541
+ "epoch": 0.896,
542
+ "grad_norm": 5.84375,
543
+ "learning_rate": 8.94878706199461e-07,
544
+ "loss": 0.764503288269043,
545
+ "step": 700
546
+ },
547
+ {
548
+ "epoch": 0.9088,
549
+ "grad_norm": 4.875,
550
+ "learning_rate": 7.870619946091643e-07,
551
+ "loss": 0.8578934669494629,
552
+ "step": 710
553
+ },
554
+ {
555
+ "epoch": 0.9216,
556
+ "grad_norm": 0.07373046875,
557
+ "learning_rate": 6.792452830188678e-07,
558
+ "loss": 0.716743278503418,
559
+ "step": 720
560
+ },
561
+ {
562
+ "epoch": 0.9344,
563
+ "grad_norm": 0.010498046875,
564
+ "learning_rate": 5.714285714285714e-07,
565
+ "loss": 0.0003363490104675293,
566
+ "step": 730
567
+ },
568
+ {
569
+ "epoch": 0.9472,
570
+ "grad_norm": 0.0118408203125,
571
+ "learning_rate": 4.6361185983827487e-07,
572
+ "loss": 0.00033761262893676757,
573
+ "step": 740
574
+ },
575
+ {
576
+ "epoch": 0.96,
577
+ "grad_norm": 0.361328125,
578
+ "learning_rate": 3.557951482479784e-07,
579
+ "loss": 0.0005402326583862305,
580
+ "step": 750
581
+ },
582
+ {
583
+ "epoch": 0.96,
584
+ "eval_goktugtr-validation_cosine_accuracy": 0.8924999833106995,
585
+ "eval_loss": 0.6961512565612793,
586
+ "eval_runtime": 26.8581,
587
+ "eval_samples_per_second": 74.466,
588
+ "eval_steps_per_second": 9.308,
589
+ "step": 750
590
+ },
591
+ {
592
+ "epoch": 0.9728,
593
+ "grad_norm": 0.00182342529296875,
594
+ "learning_rate": 2.4797843665768193e-07,
595
+ "loss": 0.0005559921264648438,
596
+ "step": 760
597
+ },
598
+ {
599
+ "epoch": 0.9856,
600
+ "grad_norm": 0.037841796875,
601
+ "learning_rate": 1.4016172506738543e-07,
602
+ "loss": 0.0004771590232849121,
603
+ "step": 770
604
+ },
605
+ {
606
+ "epoch": 0.9984,
607
+ "grad_norm": 0.0019989013671875,
608
+ "learning_rate": 3.234501347708895e-08,
609
+ "loss": 0.002035796642303467,
610
+ "step": 780
611
+ },
612
+ {
613
+ "epoch": 1.0,
614
+ "eval_goktugtr-validation_cosine_accuracy": 0.8934999704360962,
615
+ "eval_loss": 0.69606614112854,
616
+ "eval_runtime": 27.0611,
617
+ "eval_samples_per_second": 73.907,
618
+ "eval_steps_per_second": 9.238,
619
+ "step": 782
620
+ },
621
+ {
622
+ "epoch": 1.0,
623
+ "step": 782,
624
+ "total_flos": 0.0,
625
+ "train_loss": 0.8376862271057676,
626
+ "train_runtime": 2528.4185,
627
+ "train_samples_per_second": 19.775,
628
+ "train_steps_per_second": 0.309
629
+ }
630
+ ],
631
+ "logging_steps": 10,
632
+ "max_steps": 782,
633
+ "num_input_tokens_seen": 0,
634
+ "num_train_epochs": 1,
635
+ "save_steps": 125,
636
+ "stateful_callbacks": {
637
+ "TrainerControl": {
638
+ "args": {
639
+ "should_epoch_stop": false,
640
+ "should_evaluate": false,
641
+ "should_log": false,
642
+ "should_save": true,
643
+ "should_training_stop": true
644
+ },
645
+ "attributes": {}
646
+ }
647
+ },
648
+ "total_flos": 0.0,
649
+ "train_batch_size": 16,
650
+ "trial_name": null,
651
+ "trial_params": null
652
+ }
sentence_bert_config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "transformer_task": "feature-extraction",
3
+ "modality_config": {
4
+ "text": {
5
+ "method": "forward",
6
+ "method_output_name": "last_hidden_state"
7
+ }
8
+ },
9
+ "module_output_name": "token_embeddings"
10
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bd5f1ae5d7b01aadec7b28edcb1b218ff7ac3b73345cd73b40f463c9c3bab1a4
3
+ size 33385259
tokenizer_config.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "backend": "tokenizers",
3
+ "boi_token": "<start_of_image>",
4
+ "bos_token": "<bos>",
5
+ "clean_up_tokenization_spaces": false,
6
+ "eoi_token": "<end_of_image>",
7
+ "eos_token": "<eos>",
8
+ "image_token": "<image_soft_token>",
9
+ "is_local": true,
10
+ "local_files_only": false,
11
+ "mask_token": "<mask>",
12
+ "max_length": 256,
13
+ "model_max_length": 256,
14
+ "model_specific_special_tokens": {
15
+ "boi_token": "<start_of_image>",
16
+ "eoi_token": "<end_of_image>",
17
+ "image_token": "<image_soft_token>"
18
+ },
19
+ "pad_to_multiple_of": null,
20
+ "pad_token": "<pad>",
21
+ "pad_token_type_id": 0,
22
+ "padding_side": "left",
23
+ "sp_model_kwargs": null,
24
+ "spaces_between_special_tokens": false,
25
+ "stride": 0,
26
+ "tokenizer_class": "GemmaTokenizer",
27
+ "truncation_side": "right",
28
+ "truncation_strategy": "longest_first",
29
+ "unk_token": "<unk>",
30
+ "use_default_system_prompt": false
31
+ }
training/evaluate_suite.py ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Run a pinned five-task Turkish retrieval suite with official MTEB evaluators."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ from pathlib import Path
9
+
10
+ import mteb
11
+ import torch
12
+ from mteb.models import SentenceTransformerEncoderWrapper
13
+ from sentence_transformers import SentenceTransformer
14
+
15
+ from goktugtr.text import HARIER_TASK
16
+
17
+ TASK_NAMES = [
18
+ "TurHistQuadRetrieval",
19
+ "XQuADRetrieval",
20
+ "WebFAQRetrieval",
21
+ "MKQARetrieval",
22
+ "BelebeleRetrieval",
23
+ ]
24
+
25
+
26
+ def parse_args() -> argparse.Namespace:
27
+ parser = argparse.ArgumentParser()
28
+ parser.add_argument("--model", required=True)
29
+ parser.add_argument("--revision")
30
+ parser.add_argument("--label")
31
+ parser.add_argument("--output", type=Path, required=True)
32
+ parser.add_argument("--batch-size", type=int, default=16)
33
+ parser.add_argument("--max-seq-length", type=int, default=512)
34
+ parser.add_argument(
35
+ "--prompt-style",
36
+ choices=["auto", "plain", "harrier", "e5"],
37
+ default="auto",
38
+ help="Select the query/document format explicitly for fair local-model evaluation.",
39
+ )
40
+ parser.add_argument("--tasks", nargs="+", choices=TASK_NAMES, default=TASK_NAMES)
41
+ parser.add_argument("--overwrite", action="store_true")
42
+ return parser.parse_args()
43
+
44
+
45
+ def prompts_for(model_id: str, style: str = "auto") -> dict[str, str] | None:
46
+ if style == "plain":
47
+ return None
48
+ if style == "harrier":
49
+ return {
50
+ "Retrieval-query": f"Instruct: {HARIER_TASK}\nQuery: ",
51
+ "Retrieval-document": "",
52
+ }
53
+ if style == "e5":
54
+ return {"Retrieval-query": "query: ", "Retrieval-document": "passage: "}
55
+ normalized = model_id.casefold()
56
+ if "harrier" in normalized or "goktugtr" in normalized:
57
+ return {
58
+ "Retrieval-query": f"Instruct: {HARIER_TASK}\nQuery: ",
59
+ "Retrieval-document": "",
60
+ }
61
+ if "e5" in normalized:
62
+ return {"Retrieval-query": "query: ", "Retrieval-document": "passage: "}
63
+ return None
64
+
65
+
66
+ def build_tasks(task_names: list[str] | None = None) -> list:
67
+ selected = task_names or TASK_NAMES
68
+ return [
69
+ mteb.get_task(
70
+ task_name=name,
71
+ languages=["tur"],
72
+ exclusive_language_filter=True,
73
+ )
74
+ for name in selected
75
+ ]
76
+
77
+
78
+ def main() -> None:
79
+ args = parse_args()
80
+ args.output.parent.mkdir(parents=True, exist_ok=True)
81
+ tasks = build_tasks(args.tasks)
82
+ model = SentenceTransformer(
83
+ args.model,
84
+ revision=args.revision,
85
+ model_kwargs={"dtype": torch.bfloat16},
86
+ )
87
+ model.max_seq_length = args.max_seq_length
88
+ parameter_count = sum(parameter.numel() for parameter in model.parameters())
89
+ wrapper = SentenceTransformerEncoderWrapper(
90
+ model=model,
91
+ model_prompts=prompts_for(args.model, args.prompt_style),
92
+ )
93
+ result = mteb.evaluate(
94
+ wrapper,
95
+ tasks,
96
+ cache=None,
97
+ overwrite_strategy="always" if args.overwrite else "only-missing",
98
+ encode_kwargs={
99
+ "batch_size": args.batch_size,
100
+ "normalize_embeddings": True,
101
+ },
102
+ show_progress_bar=True,
103
+ co2_tracker=False,
104
+ public_only=True,
105
+ )
106
+ task_scores = {}
107
+ for task_result in result.task_results:
108
+ task_scores[task_result.task_name] = float(task_result.get_score())
109
+ task_metadata = []
110
+ for task in tasks:
111
+ metadata = task.metadata.model_dump(mode="json")
112
+ task_metadata.append(
113
+ {
114
+ "name": metadata["name"],
115
+ "dataset": metadata["dataset"],
116
+ "license": metadata["license"],
117
+ "domains": metadata["domains"],
118
+ "eval_splits": metadata["eval_splits"],
119
+ "subsets": list(task.hf_subsets),
120
+ }
121
+ )
122
+ payload = {
123
+ "suite": "goktugtr-turkish-retrieval-suite-v1",
124
+ "language_filter": "turkish_only_exclusive",
125
+ "model": args.label or args.model,
126
+ "model_source": args.model,
127
+ "model_revision": args.revision,
128
+ "parameters": parameter_count,
129
+ "embedding_dimension": model.get_sentence_embedding_dimension(),
130
+ "inference_dtype": "bfloat16",
131
+ "normalized_embeddings": True,
132
+ "prompt_style": args.prompt_style,
133
+ "device": torch.cuda.get_device_name(0) if torch.cuda.is_available() else "cpu",
134
+ "mteb_version": mteb.__version__,
135
+ "task_main_scores": task_scores,
136
+ "macro_average": sum(task_scores.values()) / len(task_scores),
137
+ "tasks": task_metadata,
138
+ "raw_mteb_result": result.model_dump(mode="json"),
139
+ }
140
+ args.output.write_text(
141
+ json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
142
+ )
143
+ print(
144
+ json.dumps(
145
+ {k: v for k, v in payload.items() if k != "raw_mteb_result"},
146
+ ensure_ascii=False,
147
+ indent=2,
148
+ )
149
+ )
150
+
151
+
152
+ if __name__ == "__main__":
153
+ main()
training/mine_hard_negatives.py ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Mine difficult, model-selected negatives without touching benchmark data."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import hashlib
8
+ import json
9
+ import re
10
+ import time
11
+ from pathlib import Path
12
+
13
+ import faiss
14
+ import numpy as np
15
+ import torch
16
+ from datasets import Dataset, load_dataset
17
+ from sentence_transformers import SentenceTransformer
18
+
19
+ from goktugtr.text import training_query
20
+
21
+ TOKEN_RE = re.compile(r"\w+", re.UNICODE)
22
+
23
+
24
+ def parse_args() -> argparse.Namespace:
25
+ parser = argparse.ArgumentParser()
26
+ parser.add_argument("--model", default="outputs/goktugtr-270m/final")
27
+ parser.add_argument("--train", type=Path, default=Path("data/processed/train.parquet"))
28
+ parser.add_argument(
29
+ "--validation", type=Path, default=Path("data/processed/validation.parquet")
30
+ )
31
+ parser.add_argument("--output-dir", type=Path, default=Path("data/hard-negatives-v1"))
32
+ parser.add_argument("--max-rows", type=int, default=50_000)
33
+ parser.add_argument("--candidate-rows", type=int, default=100_000)
34
+ parser.add_argument("--batch-size", type=int, default=32)
35
+ parser.add_argument("--search-k", type=int, default=32)
36
+ parser.add_argument("--query-style", choices=["harrier", "e5", "plain"], default="harrier")
37
+ parser.add_argument("--max-positive-overlap", type=float, default=0.80)
38
+ return parser.parse_args()
39
+
40
+
41
+ def normalized(text: str) -> str:
42
+ return " ".join(text.casefold().split())
43
+
44
+
45
+ def token_jaccard(first: str, second: str) -> float:
46
+ left = set(TOKEN_RE.findall(first.casefold()))
47
+ right = set(TOKEN_RE.findall(second.casefold()))
48
+ if not left and not right:
49
+ return 1.0
50
+ return len(left & right) / max(1, len(left | right))
51
+
52
+
53
+ def select_hard_negative(
54
+ positive: str,
55
+ original_negative: str,
56
+ candidates: list[str],
57
+ candidate_indices: list[int],
58
+ scores: list[float],
59
+ *,
60
+ max_positive_overlap: float,
61
+ ) -> tuple[str, float | None, int | None]:
62
+ """Pick the highest-ranked plausible negative, falling back to the labeled one."""
63
+ positive_norm = normalized(positive)
64
+ for rank, (candidate_index, score) in enumerate(
65
+ zip(candidate_indices, scores, strict=True), start=1
66
+ ):
67
+ candidate = candidates[candidate_index]
68
+ candidate_norm = normalized(candidate)
69
+ if not candidate_norm or candidate_norm == positive_norm:
70
+ continue
71
+ if token_jaccard(positive, candidate) >= max_positive_overlap:
72
+ continue
73
+ return candidate, float(score), rank
74
+ return original_negative, None, None
75
+
76
+
77
+ def sha256(path: Path) -> str:
78
+ digest = hashlib.sha256()
79
+ with path.open("rb") as handle:
80
+ for chunk in iter(lambda: handle.read(1024 * 1024), b""):
81
+ digest.update(chunk)
82
+ return digest.hexdigest()
83
+
84
+
85
+ def main() -> None:
86
+ args = parse_args()
87
+ args.output_dir.mkdir(parents=True, exist_ok=True)
88
+ full_train = load_dataset("parquet", data_files=str(args.train), split="train")
89
+ mining_rows = full_train.select(range(min(args.max_rows, len(full_train))))
90
+ candidate_rows = full_train.select(range(min(args.candidate_rows, len(full_train))))
91
+ candidates = list(dict.fromkeys(candidate_rows["negative"]))
92
+
93
+ model = SentenceTransformer(args.model, model_kwargs={"dtype": torch.bfloat16})
94
+ model.max_seq_length = 256
95
+ queries = [training_query(text, args.query_style) for text in mining_rows["query"]]
96
+
97
+ started = time.perf_counter()
98
+ candidate_embeddings = model.encode(
99
+ candidates,
100
+ batch_size=args.batch_size,
101
+ normalize_embeddings=True,
102
+ convert_to_numpy=True,
103
+ show_progress_bar=True,
104
+ ).astype("float32")
105
+ query_embeddings = model.encode(
106
+ queries,
107
+ batch_size=args.batch_size,
108
+ normalize_embeddings=True,
109
+ convert_to_numpy=True,
110
+ show_progress_bar=True,
111
+ ).astype("float32")
112
+
113
+ index = faiss.IndexHNSWFlat(candidate_embeddings.shape[1], 32, faiss.METRIC_INNER_PRODUCT)
114
+ index.hnsw.efConstruction = 80
115
+ index.hnsw.efSearch = 128
116
+ index.add(candidate_embeddings)
117
+ scores, indices = index.search(query_embeddings, min(args.search_k, len(candidates)))
118
+
119
+ output_rows: list[dict[str, object]] = []
120
+ mined_count = 0
121
+ chosen_scores: list[float] = []
122
+ chosen_ranks: list[int] = []
123
+ for row, row_indices, row_scores in zip(mining_rows, indices, scores, strict=True):
124
+ negative, score, rank = select_hard_negative(
125
+ row["positive"],
126
+ row["negative"],
127
+ candidates,
128
+ row_indices.tolist(),
129
+ row_scores.tolist(),
130
+ max_positive_overlap=args.max_positive_overlap,
131
+ )
132
+ if rank is not None:
133
+ mined_count += 1
134
+ chosen_scores.append(float(score))
135
+ chosen_ranks.append(rank)
136
+ output_rows.append(
137
+ {
138
+ "id": row["id"],
139
+ "query": row["query"],
140
+ "positive": row["positive"],
141
+ "negative": negative,
142
+ "original_negative": row["negative"],
143
+ "source": row["source"],
144
+ "mining_score": score,
145
+ "mining_rank": rank,
146
+ }
147
+ )
148
+
149
+ train_output = args.output_dir / "train.parquet"
150
+ validation_output = args.output_dir / "validation.parquet"
151
+ Dataset.from_list(output_rows).to_parquet(str(train_output))
152
+ validation = load_dataset("parquet", data_files=str(args.validation), split="train")
153
+ validation.to_parquet(str(validation_output))
154
+ elapsed = time.perf_counter() - started
155
+ report = {
156
+ "method": "dense_hnsw_search_over_original_labeled_negatives",
157
+ "miner_model": args.model,
158
+ "query_style": args.query_style,
159
+ "benchmark_data_used": False,
160
+ "rows": len(output_rows),
161
+ "candidate_documents": len(candidates),
162
+ "search_k": args.search_k,
163
+ "max_positive_token_jaccard": args.max_positive_overlap,
164
+ "mined_rows": mined_count,
165
+ "fallback_rows": len(output_rows) - mined_count,
166
+ "mean_selected_cosine": float(np.mean(chosen_scores)) if chosen_scores else None,
167
+ "mean_selected_rank": float(np.mean(chosen_ranks)) if chosen_ranks else None,
168
+ "seconds": elapsed,
169
+ "files": {
170
+ "train.parquet": {"bytes": train_output.stat().st_size, "sha256": sha256(train_output)},
171
+ "validation.parquet": {
172
+ "bytes": validation_output.stat().st_size,
173
+ "sha256": sha256(validation_output),
174
+ },
175
+ },
176
+ }
177
+ (args.output_dir / "mining-report.json").write_text(
178
+ json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
179
+ )
180
+ print(json.dumps(report, ensure_ascii=False, indent=2))
181
+
182
+
183
+ if __name__ == "__main__":
184
+ main()
training/train.py ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Fine-tune a Turkish dense retriever with reproducible settings."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ import json
8
+ import platform
9
+ import random
10
+ import re
11
+ import time
12
+ from pathlib import Path
13
+
14
+ import datasets
15
+ import numpy as np
16
+ import sentence_transformers
17
+ import torch
18
+ import transformers
19
+ import yaml
20
+ from datasets import load_dataset
21
+ from sentence_transformers import (
22
+ SentenceTransformer,
23
+ SentenceTransformerTrainer,
24
+ SentenceTransformerTrainingArguments,
25
+ losses,
26
+ )
27
+ from sentence_transformers.evaluation import TripletEvaluator
28
+ from sentence_transformers.training_args import BatchSamplers
29
+
30
+ from goktugtr.text import training_query
31
+
32
+
33
+ def seed_everything(seed: int) -> None:
34
+ random.seed(seed)
35
+ np.random.seed(seed)
36
+ torch.manual_seed(seed)
37
+ torch.cuda.manual_seed_all(seed)
38
+
39
+
40
+ def parse_args() -> argparse.Namespace:
41
+ parser = argparse.ArgumentParser()
42
+ parser.add_argument("--config", type=Path, default=Path("configs/train_270m.yaml"))
43
+ parser.add_argument("--data-dir", type=Path, default=Path("data/processed"))
44
+ parser.add_argument("--output-dir", type=Path, default=Path("outputs/goktugtr-270m"))
45
+ parser.add_argument("--max-train-rows", type=int)
46
+ parser.add_argument("--max-steps", type=int, default=-1)
47
+ return parser.parse_args()
48
+
49
+
50
+ def latest_complete_checkpoint(output_dir: Path) -> Path | None:
51
+ """Return the newest checkpoint that contains all trainer resume state."""
52
+ candidates: list[tuple[int, Path]] = []
53
+ for path in output_dir.glob("checkpoint-*"):
54
+ match = re.fullmatch(r"checkpoint-(\d+)", path.name)
55
+ if not match:
56
+ continue
57
+ required = (
58
+ "model.safetensors",
59
+ "optimizer.pt",
60
+ "scheduler.pt",
61
+ "trainer_state.json",
62
+ "rng_state.pth",
63
+ )
64
+ if all((path / filename).is_file() for filename in required):
65
+ candidates.append((int(match.group(1)), path))
66
+ return max(candidates, default=(0, None), key=lambda item: item[0])[1]
67
+
68
+
69
+ def main() -> None:
70
+ args = parse_args()
71
+ config = yaml.safe_load(args.config.read_text(encoding="utf-8"))
72
+ seed_everything(int(config["seed"]))
73
+ args.output_dir.mkdir(parents=True, exist_ok=True)
74
+
75
+ dataset = load_dataset(
76
+ "parquet",
77
+ data_files={
78
+ "train": str(args.data_dir / "train.parquet"),
79
+ "validation": str(args.data_dir / "validation.parquet"),
80
+ },
81
+ )
82
+ train = dataset["train"]
83
+ if args.max_train_rows:
84
+ train = train.select(range(min(args.max_train_rows, len(train))))
85
+
86
+ def add_prompt(row: dict[str, str]) -> dict[str, str]:
87
+ return {
88
+ "anchor": training_query(row["query"], config.get("query_style", "harrier")),
89
+ "positive": row["positive"],
90
+ "negative": row["negative"],
91
+ }
92
+
93
+ remove_columns = dataset["train"].column_names
94
+ train = train.map(add_prompt, remove_columns=remove_columns, desc="Formatting train queries")
95
+ validation = dataset["validation"].map(
96
+ add_prompt, remove_columns=remove_columns, desc="Formatting validation queries"
97
+ )
98
+ train = train.select_columns(["anchor", "positive", "negative"])
99
+ validation = validation.select_columns(["anchor", "positive", "negative"])
100
+
101
+ model_kwargs = {"dtype": torch.bfloat16} if bool(config["bf16"]) else {}
102
+ processor_kwargs = {"padding_side": config.get("padding_side", "right")}
103
+ model = SentenceTransformer(
104
+ config["base_model"],
105
+ revision=config.get("base_model_revision"),
106
+ model_kwargs=model_kwargs,
107
+ processor_kwargs=processor_kwargs,
108
+ )
109
+ model.max_seq_length = int(config["max_seq_length"])
110
+
111
+ evaluator = TripletEvaluator(
112
+ anchors=validation["anchor"],
113
+ positives=validation["positive"],
114
+ negatives=validation["negative"],
115
+ name="goktugtr-validation",
116
+ batch_size=8,
117
+ show_progress_bar=True,
118
+ )
119
+ baseline = evaluator(model, output_path=str(args.output_dir), epoch=0, steps=0)
120
+ (args.output_dir / "baseline_triplet.json").write_text(
121
+ json.dumps(baseline, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
122
+ )
123
+
124
+ training_args = SentenceTransformerTrainingArguments(
125
+ output_dir=str(args.output_dir),
126
+ num_train_epochs=float(config["epochs"]),
127
+ max_steps=args.max_steps,
128
+ per_device_train_batch_size=int(config["per_device_batch_size"]),
129
+ per_device_eval_batch_size=8,
130
+ gradient_accumulation_steps=int(config["gradient_accumulation_steps"]),
131
+ learning_rate=float(config["learning_rate"]),
132
+ warmup_steps=float(config["warmup_ratio"]),
133
+ bf16=bool(config["bf16"]),
134
+ tf32=True,
135
+ gradient_checkpointing=bool(config["gradient_checkpointing"]),
136
+ gradient_checkpointing_kwargs={"use_reentrant": False},
137
+ optim="adamw_torch_fused",
138
+ batch_sampler=BatchSamplers.NO_DUPLICATES,
139
+ eval_strategy="steps",
140
+ eval_steps=int(config["eval_steps"]),
141
+ save_strategy="steps",
142
+ save_steps=int(config["save_steps"]),
143
+ save_total_limit=2,
144
+ logging_steps=int(config["logging_steps"]),
145
+ dataloader_num_workers=2,
146
+ dataloader_pin_memory=True,
147
+ report_to="none",
148
+ run_name=config["project_name"],
149
+ seed=int(config["seed"]),
150
+ )
151
+ if config.get("loss") == "cached_multiple_negatives_ranking":
152
+ loss = losses.CachedMultipleNegativesRankingLoss(
153
+ model,
154
+ mini_batch_size=int(config.get("loss_mini_batch_size", 2)),
155
+ scale=20.0,
156
+ )
157
+ else:
158
+ loss = losses.MultipleNegativesRankingLoss(model, scale=20.0)
159
+ trainer = SentenceTransformerTrainer(
160
+ model=model,
161
+ args=training_args,
162
+ train_dataset=train,
163
+ eval_dataset=validation,
164
+ loss=loss,
165
+ evaluator=evaluator,
166
+ )
167
+ resume_checkpoint = latest_complete_checkpoint(args.output_dir)
168
+ if resume_checkpoint:
169
+ print(f"Resuming from complete checkpoint: {resume_checkpoint}", flush=True)
170
+ torch.cuda.reset_peak_memory_stats()
171
+ training_started = time.perf_counter()
172
+ train_output = trainer.train(
173
+ resume_from_checkpoint=str(resume_checkpoint) if resume_checkpoint else None
174
+ )
175
+ training_seconds = time.perf_counter() - training_started
176
+ trainer.state.save_to_json(str(args.output_dir / "trainer_state.json"))
177
+ final_dir = args.output_dir / "final"
178
+ model.save_pretrained(str(final_dir), safe_serialization=True)
179
+ final_metrics = evaluator(model, output_path=str(args.output_dir), epoch=1, steps=-1)
180
+ (args.output_dir / "final_triplet.json").write_text(
181
+ json.dumps(final_metrics, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
182
+ )
183
+ environment = {
184
+ "python": platform.python_version(),
185
+ "torch": torch.__version__,
186
+ "transformers": transformers.__version__,
187
+ "sentence_transformers": sentence_transformers.__version__,
188
+ "datasets": datasets.__version__,
189
+ "cuda": torch.version.cuda,
190
+ "gpu": torch.cuda.get_device_name(0) if torch.cuda.is_available() else None,
191
+ "gpu_total_memory_gb": (
192
+ round(torch.cuda.get_device_properties(0).total_memory / 2**30, 3)
193
+ if torch.cuda.is_available()
194
+ else None
195
+ ),
196
+ "config": config,
197
+ "train_rows": len(train),
198
+ "validation_rows": len(validation),
199
+ "training_seconds": training_seconds,
200
+ "resumed_from_checkpoint": (
201
+ str(resume_checkpoint) if resume_checkpoint is not None else None
202
+ ),
203
+ "training_metrics": train_output.metrics,
204
+ "max_gpu_memory_gb": round(torch.cuda.max_memory_allocated() / 2**30, 3),
205
+ }
206
+ (args.output_dir / "environment.json").write_text(
207
+ json.dumps(environment, ensure_ascii=False, indent=2) + "\n", encoding="utf-8"
208
+ )
209
+ print(json.dumps({"baseline": baseline, "final": final_metrics}, indent=2))
210
+
211
+
212
+ if __name__ == "__main__":
213
+ main()
training/train.yaml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ project_name: goktugtr-retrieval-270m-v2-hard-negatives
2
+ base_model: outputs/goktugtr-270m/final
3
+ base_model_revision: null
4
+ query_style: harrier
5
+ padding_side: left
6
+ dataset_id: local/goktugtr-hard-negatives-v1
7
+ seed: 3407
8
+ max_seq_length: 256
9
+ train_rows: 50000
10
+ validation_rows: 2000
11
+ epochs: 1
12
+ learning_rate: 8.0e-6
13
+ warmup_ratio: 0.05
14
+ per_device_batch_size: 16
15
+ gradient_accumulation_steps: 4
16
+ loss: cached_multiple_negatives_ranking
17
+ loss_mini_batch_size: 8
18
+ gradient_checkpointing: true
19
+ bf16: true
20
+ eval_steps: 125
21
+ save_steps: 125
22
+ logging_steps: 10