
Kenning Turkish Legal
Turkish legal retrieval embeddings, fine-tuned from EmbeddingGemma 2. A RuneLab embedding model, not a Hati or Sköll model.
ReleasedApache 2.00.3B
Kenning Turkish Legal turns Turkish legal text into embeddings: lists of numbers that let a search match meaning, not only exact words. It is built for finding the right contracts, case law and regulation, for example as the first retrieval step in a RAG pipeline. It is made by RuneLab and is not a Hati or Sköll model.
It is fine-tuned from Google’s EmbeddingGemma 2 (271M parameters) and was released on October 7, 2026 under the Apache 2.0 license. In our evaluation on the Mizan legal benchmark it scores above its base model on the legal mean and on contracts, caselaw and regulation. Against bge-m3 the picture is mixed: slightly below on the legal mean and on contracts, above on caselaw and regulation.
At a glance
Quick facts
#- Parameters
- 0.3B
- License
- Apache 2.0
- Release date
- Parameters
- 0.3B (the base model has 271M)
- Base model
- Google EmbeddingGemma 2
- Embedding dimension
- Evaluated at 768 (truncate_dim=768); the card does not state the native dimension
- Weights
- F32 safetensors
- Task
- Turkish legal retrieval: contracts, case law, regulation
- Languages
- Turkish, English (tagged); multilingual results on 6 tasks
- License
- Apache 2.0
- Release date
- (the base model: October 6, 2026)
- Model on Hugging Face
- runelab-ai/kenning-turkish-legal-v1
These figures are as stated on the model card. The card gives no memory requirement for Kenning, so none is listed here.
Use it well
What it is for
#Intended use
#- Semantic search over Turkish legal documents: contracts, case law and regulation
- First-stage retrieval in RAG pipelines
- Candidate retrieval for legal research tools, with human review
Not meant for
#- General Turkish embedding work
- Semantic text similarity (STS) as the main goal
- Legal corpora from other languages or jurisdictions
Results should be checked by people. Kenning finds candidate passages; it does not give legal advice.
Want to see how this kind of search works, with a map you can move around? Read the post Finding the right clause.
In our evaluation
Benchmarks
#Every number in this section comes from our evaluation, as reported on the model card. The score is nDCG@10 (higher is better, 100 at most), measured at 768 dimensions: it rewards putting the right passages near the top of the first ten results. The
Mizan: Turkish legal retrieval
#Mizan has three legal tasks (contracts, caselaw and regulation) and their mean.
Mizan, nDCG@10 at 768 dimensions: base model, Kenning and bge-m3
Score, from 0 to 100
Hover, tap or focus a row to read it.
- Base model
- Kenning
- bge-m3
Bars run from 0 to 100. Changes are as the card states them.
| Task | Base model | Kenning Turkish Legal | bge-m3 | Change |
|---|---|---|---|---|
| Legal mean | 48.44 | 50.94 | 51.14 | +2.50 |
| Contracts | 76.73 | 81.27 | 86.08 | +4.54 |
| Caselaw | 29.67 | 30.51 | 29.30 | +0.84 |
| Regulation | 38.91 | 41.04 | 38.04 | +2.13 |
Bars run from 0 to 100. Changes are as the card states them.
Kenning improves on its base model on every line: +2.50 on the legal mean, +4.54 on contracts, +0.84 on caselaw and +2.13 on regulation. Next to bge-m3 it is slightly below on the legal mean (50.94 against 51.14) and clearly below on contracts (81.27 against 86.08), and above on caselaw (30.51 against 29.30) and regulation (41.04 against 38.04).
So is Kenning better than bge-m3?
Not across the board. In our evaluation it wins on caselaw and regulation, and it trails on contracts and on the legal mean. Test both on your own documents before you decide.
Outside legal search
#The changes are small either way: STSbTR −1.16, the Turkish 14-task mean +0.17, the English 10-task mean −0.25 and the multilingual 6-task mean +0.27.
General benchmarks, base model and Kenning
Score, from 0 to 100
Hover, tap or focus a row to read it.
- Base model
- Kenning
Bars run from 0 to 100. Changes are as the card states them.
| Task | Base model | Kenning Turkish Legal | Change |
|---|---|---|---|
| STSbTR | 78.89 | 77.73 | −1.16 |
| Turkish, 14-task mean | 66.59 | 66.75 | +0.17 |
| English, 10-task mean | 67.23 | 66.98 | −0.25 |
| Multilingual, 6-task mean | 75.93 | 76.21 | +0.27 |
Bars run from 0 to 100. Changes are as the card states them.
Try it
How to run it
#Install the pinned versions. The card notes that torchvision and pillow are needed to load EmbeddingGemma 2 models.
pip install "transformers==5.19.0" "sentence-transformers==6.1.0" torchvision pillow
Then search. Two details matter: queries get the prompt task: search result | query: , and documents go through encode_document. The card evaluated Kenning at 768 dimensions, so the example sets truncate_dim=768.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("runelab-ai/kenning-turkish-legal-v1", truncate_dim=768)
query_prompt = "task: search result | query: "
queries = ["..."] # your questions, in Turkish
documents = ["...", "..."] # your legal text passages
query_embeddings = model.encode(queries, prompt=query_prompt)
document_embeddings = model.encode_document(documents)
scores = model.similarity(query_embeddings, document_embeddings)
print(scores)
Under the hood
How it was trained
#Kenning was fine-tuned with contrastive learning on about 17k pairs, using CachedMultipleNegativesRanking inside a Matryoshka loss. The settings from the card:
- Batch size
- 256
- Precision
- bf16
- Learning rate
- 2e-5
- Epochs
- 1
- Released weights
- averaged 50/50 with the base weights
The last line matters: the weights you download are an even blend of the fine-tuned weights and the base model’s weights.
The name
The name
#A kenning is an Old Norse poetic device: it names a thing by a figurative compound, such as “whale-road” for the sea. An embedding does something alike for text: it restates what a passage means in a compressed form. Kenning is not a Hati or Sköll model. It is a separate RuneLab model that borrows its name from the same Norse world.

