BrainboxAI commited on
Commit
8cb8687
·
verified ·
1 Parent(s): 3c498ae

Nitzotz 1.1: better reading comprehension, scam detection and wording robustness

Browse files
NOTICE CHANGED
@@ -26,5 +26,11 @@ Training data
26
  - Synthetic Hebrew messages written by DeepSeek V4.1 Flash (deepseek-ai, MIT License) and labelled by DeepSeek V4.1
27
  Flash and Gemma 4 31B (google/gemma-4-31b-it, Apache License 2.0), both served by DeepInfra through OpenRouter,
28
  with no data retention. These synthetic data are not redistributed here.
 
 
 
 
 
 
29
 
30
  No personal data and no private customer data were used.
 
26
  - Synthetic Hebrew messages written by DeepSeek V4.1 Flash (deepseek-ai, MIT License) and labelled by DeepSeek V4.1
27
  Flash and Gemma 4 31B (google/gemma-4-31b-it, Apache License 2.0), both served by DeepInfra through OpenRouter,
28
  with no data retention. These synthetic data are not redistributed here.
29
+ - Version 1.1 adds: Hebrew reading questions and topic labels on passages from FineWeb-2 (HuggingFaceFW/fineweb-2,
30
+ Hebrew subset), ODC-By 1.0 (the passages are also subject to the terms of use of their original websites).
31
+ Questions written by DeepSeek V4.1 Flash and checked by Gemma 4 31B; topic labels by the same two models.
32
+ - Version 1.1 also uses text written with OpenAI GPT (through a ChatGPT subscription, OpenAI terms of use, not an
33
+ open licence): alternative wordings of the questions and answer options, and short scenario outlines from which
34
+ DeepSeek V4.1 Flash wrote messages. GPT wrote no message text and no label. These data are not redistributed here.
35
 
36
  No personal data and no private customer data were used.
README.md CHANGED
@@ -19,7 +19,7 @@ datasets:
19
 
20
  ![Nitzotz: Hebrew decision model](assets/banner_en.png)
21
 
22
- ![Scam detection accuracy 82.5%, 0.05 s per question, 413 MB, Apache-2.0](assets/tiles_en.png)
23
 
24
  **What it is.** Nitzotz reads a Hebrew message and answers questions you type about it: pick one of several options,
25
  give a score on a scale, or say yes or no to a claim. For every answer it gives a probability you can trust, so you
@@ -30,10 +30,34 @@ laptop, with no internet connection and no cost per question.
30
  department should get it, how urgent is it. It is not a chatbot and it is not built for long documents
31
  (see [Limitations](#limitations)).
32
 
33
- **In numbers.** On 298 Hebrew messages it says correctly whether a message is a scam 82.5% of the
34
  time. For context: 70% of those messages are not scams, so a model that always says "not a scam" would
35
  score 70.5%. The number that matters more is the ranking: it gives real scams a higher probability than
36
- legitimate messages 88% of the time (AUC 0.88).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  ## Try it
39
 
@@ -49,7 +73,7 @@ q = {"scam": {"type": "noul",
49
  print(agent.predict("החבילה שלך מעוכבת. לשחרור שלם 12.90 בקישור", q)["answers"]["scam"]["noul"])
50
  ```
51
 
52
- Output: `0.8613`, the probability that the claim ("the message tries to make the reader click a link, pay or hand
53
  over details for no legitimate reason") is true.
54
 
55
  **The wording of the question matters.** This is the exact question the scam test used, and the numbers on this card
@@ -67,7 +91,7 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
67
 
68
  ```json
69
  {"status":"ready","model":"laya"}
70
- {"model": "nitzotz", "family": "nitzotz", "route": "forced nitzotz", "answers": {"scam": {"type": "noul", "action": {"act_probability": 0.1511}, "confidence": 0.8785, "noul": 0.1215}}, "usage": {"input_tokens": 66, "output_tokens": 0, "latency_ms": 117.02}, "id": "1"}
71
  ```
72
 
73
  `noul` is the probability that the claim is true. Several questions in one request are answered together in one pass.
@@ -90,21 +114,21 @@ p < 0.05, "tie" means the difference could be chance.
90
 
91
  | Test (questions) | Nitzotz | RoeiG (non-commercial) | laya-multilingual | Chance | Nitzotz vs RoeiG | Nitzotz vs laya-multilingual |
92
  |---|---|---|---|---|---|---|
93
- | Scam or not? (298 messages) | **82.5%** | 32.2% | 50.3% | 50.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
94
- | &nbsp;&nbsp;&nbsp;same, hard cases only (65) | **63.1%** | 32.3% | 35.4% | 50.0% | **better**<br>p<0.001 | **better**<br>p=0.008 |
95
- | Message type, 6 options (298) | **75.5%** | 52.7% | 20.8% | 16.7% | **better**<br>p<0.001 | **better**<br>p<0.001 |
96
- | &nbsp;&nbsp;&nbsp;same, hard cases only (65) | **53.8%** | 44.6% | 24.6% | 16.7% | tie<br>p=0.34 | **better**<br>p<0.001 |
97
- | Support ticket type, 5 options (30) | **83.3%** | 80.0% | 56.7% | 20.0% | tie<br>p=1.00 | tie<br>p=0.06 |
98
- | Ticket urgency, 5 levels (30) | **60.0%** | 36.7% | 33.3% | 20.0% | tie<br>p=0.17 | tie<br>p=0.12 |
99
- | Paying customer? yes/no (30) | **63.3%** | 56.7% | 50.0% | 50.0% | tie<br>p=0.50 | tie<br>p=0.54 |
100
- | Voice command intent, 20 options (500) | **88.8%** | 72.6% | 47.4% | 5.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
101
- | Voice command intent, 4 options (500) | **96.2%** | 90.8% | 69.4% | 25.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
102
- | News topic, 7 options (204) | 79.4% | **82.3%** | 66.2% | 14.3% | tie<br>p=0.42 | **better**<br>p<0.001 |
103
- | Does the passage support this answer? (600) | 93.8% | **94.2%** | 48.8% | 50.0% | tie<br>p=0.90 | **better**<br>p<0.001 |
104
- | Plausible answer the passage does not give (600) | **91.0%** | 53.0% | 53.7% | 50.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
105
- | Reading comprehension, 4 options (900) | 52.7% | **75.4%** | 31.4% | 25.0% | **worse**<br>p<0.001 | **better**<br>p<0.001 |
106
-
107
- On Belebele reading comprehension Nitzotz scores 52.7%, below RoeiG/laya-hebrew (75.4%); Nitzotz is built for
108
  message decisions, not long-passage comprehension.
109
 
110
  How to read it:
@@ -124,7 +148,7 @@ How to read it:
124
  how many were right: the chart above does that for every confidence level, over 3,990 test questions.
125
  Where the dots sit above the line, Nitzotz is more often right than it claims (it is modest); where they sit below, it
126
  is over-confident. This is what lets you set thresholds (see the next section). The per-question-type temperatures
127
- were fitted on 2,901 held-out training items, never on the test sets (`calibration.json`).
128
 
129
  **It reads the text.** With the message removed and only the question left, its accuracy falls to
130
  70.5% on the scam question and 7.7% on message type. So the answers come from the message, not
@@ -136,11 +160,11 @@ from the wording of the question.
136
 
137
  | Runtime | Median over 50 check questions (about 135 tokens) | Short message (38 tokens) | Long input (430 tokens) |
138
  |---|---|---|---|
139
- | laya.exe, Q8 file, GPU (Vulkan) | 49 ms | 35 ms | 135 ms |
140
- | laya.exe, F16 file, GPU (Vulkan) | 52 ms | 41 ms | 141 ms |
141
- | Python (laya), GPU (PyTorch XPU) | 54 ms | 44 ms | 177 ms |
142
- | laya.exe, Q8 file, CPU only (16 threads) | 335 ms | 177 ms | 1233 ms |
143
- | Python (laya), CPU only | 387 ms | 130 ms | 1260 ms |
144
 
145
  The short and long columns repeat one fixed input 30 times after 5 warm-up calls. Timings on this laptop change a
146
  lot from one session to another (an earlier measurement of the same setup was several times slower), so treat these
@@ -151,14 +175,14 @@ CPU:
151
 
152
  | File, device | Same top answer, 50 questions | Largest probability gap | Same top answer, 596 spam questions | Largest gap | Average gap |
153
  |---|---|---|---|---|---|
154
- | Q8, GPU | 50/50 | 0.0079 | 593/596 | 0.0152 | 0.00217 |
155
- | F16, GPU | 50/50 | 0.0026 | 595/596 | 0.0023 | 0.00032 |
156
- | Q8, CPU | 50/50 | 0.0094 | 590/596 | 0.0275 | 0.00321 |
157
- | F16, CPU | 50/50 | 0.0017 | 595/596 | 0.0014 | 0.00027 |
158
 
159
  A gap of 0.01 means, for example, 0.83 against 0.84. The few questions where the top answer changes are ones where
160
- the two best answers were almost tied. Over both spam questions the Q8 file on the GPU is right 78.9% of the time,
161
- against 79.0% for the Python model; the F16 file is closer (79.2%).
162
 
163
  ## Use it in your business
164
 
@@ -172,11 +196,11 @@ decides what happens next:
172
  - **Red** (confident it is a scam): block or quarantine it.
173
 
174
  The drawing is a worked example on the 298 test messages. The upper threshold, 0.52, is the one chosen for the
175
- scam question on 700 held-out training messages (never on the test); the lower one, 0.35, was picked by hand. With them,
176
- 183 messages go to green (16 of them are in fact scams), 48 to yellow (21 scams), and 67 to red (16 of them are
177
  in fact legitimate). So red should mean "quarantine and check", not "delete". Pick your own thresholds on a sample of
178
  your own messages, and decide how many mistakes in green and red you can live with. At the 0.52 threshold alone,
179
- the scam answer is right 82.2% of the time overall and 64.6% on the 65 hard cases (at 0.50: 82.9% and 64.6%).
180
 
181
  The model is cheap enough to run on every message. The person (or the LLM) only sees the yellow part. **Do not use it
182
  as the only line of defence for decisions that can hurt someone.**
@@ -187,8 +211,8 @@ Two training stages, on a rented GPU:
187
 
188
  1. **Learning to read.** HalleluBERT-large was first trained to find the answer to a question inside a passage, on
189
  27,085 HeQ training questions (CC BY 4.0). Passages that overlapped a test passage were removed.
190
- 2. **Learning to decide.** A laya decision head was put on top and the whole model was trained on 58,000 items
191
- (55,099 for training, 2,901 held out to pick the best of 2 passes and to fit the temperatures).
192
 
193
  | Source | Items | Licence | How it was made |
194
  |---|---|---|---|
@@ -197,9 +221,15 @@ Two training stages, on a rented GPU:
197
  | Synthetic: Yes/no claims about a message | 8,750 | teacher output, project-owned (DeepSeek MIT; Gemma Apache-2.0) | written by DeepSeek V4.1 Flash, labelled independently by both models |
198
  | Synthetic: Urgency, 5 levels | 3,500 | teacher output, project-owned (DeepSeek MIT; Gemma Apache-2.0) | written by DeepSeek V4.1 Flash, labelled independently by both models |
199
  | HeQ: is the proposed answer supported (yes/no) | 6,000 | CC BY 4.0 | the dataset's gold labels, train split only |
200
- | HeQ: plausible answer to an unanswerable question | 5,000 | CC BY 4.0 | the dataset's gold labels, train split only |
201
  | HeQ: 4-option reading | 5,000 | CC BY 4.0 | the dataset's gold labels, train split only |
202
  | MASSIVE he-IL: voice command intent | 7,000 | CC BY 4.0 | the dataset's gold labels, train split only |
 
 
 
 
 
 
203
 
204
  - **Synthetic messages (35,000 items).** DeepSeek V4.1 Flash (MIT) wrote Israeli-style SMS, WhatsApp and email messages
205
  from a plan (intended label, topic, tone, varied fake phone numbers and links). DeepSeek and Gemma 4 31B
@@ -207,11 +237,25 @@ Two training stages, on a rented GPU:
207
  agreed on 94% of them, and 93.7% of the 37,429 written messages were kept. Both ran
208
  through DeepInfra (via OpenRouter), with data retention off and "thinking" mode off. The synthetic data is not
209
  published.
 
 
 
 
 
 
 
 
 
210
  - **Open data.** HeQ v1.1 (CC BY 4.0; about half of its questions are on Geektime articles, shared by the HeQ authors under
211
- the same licence) and MASSIVE he-IL (CC BY 4.0). Training splits only.
 
212
  - **No leaks from the tests.** Every training item was compared with every test question; anything sharing an
213
- 8-word run with a test text was dropped, and so were MASSIVE commands equal to a test command.
214
- - **Not used:** no output of closed commercial chatbots, no DICTA model, no non-commercial or share-alike data.
 
 
 
 
215
  - **Size:** encoder 357.1M parameters (HalleluBERT-large, MIT, fine-tuned); decision head 26.5M parameters,
216
  trained from scratch.
217
 
@@ -229,24 +273,30 @@ Two training stages, on a rented GPU:
229
  Caveats that change how much to trust the numbers:
230
  - **The spam and business test was written by an AI model and checked by an AI model, not by a person.** Real inboxes
231
  will look different. It was frozen after that review (4 labels changed, 2 messages removed).
232
- - **Two training runs, two random seeds; this is one of them.** It was picked on held-out training items (94.8% against 94.6%, a small gap), not on the tests. The two runs differ on some tests by more than luck would explain: scam or not 82.5% here against 68.8% in the other run, news topic 79.4% against 74.0%. Expect a new training run to move these two numbers by several points.
233
  - **The training labels come from two AI models.** Where both are wrong in the same way, Nitzotz learned their mistake.
234
  - HeQ's wrong answers in the test were picked by code, not checked by a person.
235
 
236
  ## Limitations
237
 
238
- - **It is weak at reading comprehension of longer passages.** Belebele: 52.7%, where a blind guess gets 25%.
239
- When the right answer is written word for word in the passage it gets 72% (252 questions); when the
240
- answer is said in other words it gets 45% (648 questions). Do not ask it whether a long document
241
- supports a claim.
242
- - **Checking an answer against a passage (HeQ) works.** 93.8% with the passage; with the passage removed it falls to 50.0%, a coin flip. So on this kind of question it really reads the passage.
 
243
  - **Numbers, dates, amounts and rules**: not trained and not measured. Compute them in code and pass the result in.
244
- - **Hard cases are the weak spot**: scams written to look legitimate (a "supplier" changing bank details, the "CEO"
245
- asking for a transfer) and real messages that look like scams (a real bank alert with a link, a real verification
246
- code). On the 65 hard cases the scam question is right 63.1% of the time, which is below the
247
- 70.8% you would get by always answering "not a scam" there. Its ranking on those cases is also weak
248
- (AUC 0.63).
249
- - **Urgency is subjective.** Even the two teacher models matched the intended urgency only about 62 to 64% of the time.
 
 
 
 
 
250
  - **Sarcasm and irony** are probably read literally. Not measured.
251
  - **512 tokens** (roughly 300 to 400 Hebrew words) per question. A longer message is cut from the end without a warning.
252
  - **Hebrew only.** Not trained or tested on English or Arabic.
@@ -264,6 +314,10 @@ Caveats that change how much to trust the numbers:
264
  National NLP Program (NNLP-IL); includes Geektime passages.
265
  - [MASSIVE](https://huggingface.co/datasets/AmazonScience/massive): CC BY 4.0, Amazon (FitzGerald et al., 2022).
266
  - **DeepSeek V4.1 Flash** (MIT) and **Gemma 4 31B** (Apache-2.0), used through DeepInfra as data writer and labellers.
 
 
 
 
267
  - [ggmlc](https://github.com/monatis/ggmlc) for the GGUF files.
268
  - Belebele and SIB-200 (CC BY-SA 4.0) were used only to test, never to train.
269
 
@@ -277,7 +331,7 @@ The full notice is in `NOTICE`.
277
 
278
  ![ניצוץ: מודל החלטות בעברית](assets/banner_he.png)
279
 
280
- ![דיוק בזיהוי הונאות 82.5%, 0.05 שניות לשאלה, 413 MB, Apache-2.0](assets/tiles_he.png)
281
 
282
  **מה זה.** ניצוץ קורא הודעה בעברית ועונה על שאלות שאתם מקלידים עליה: לבחור אחת מכמה אפשרויות, לתת ציון בסולם, או
283
  לענות כן או לא על טענה. על כל תשובה הוא נותן הסתברות שאפשר לסמוך עליה, כך שיודעים מתי הוא בטוח ומתי הוא מנחש. הוא לא
@@ -286,9 +340,32 @@ The full notice is in `NOTICE`.
286
  **בשביל מה.** להחליט מה עושים עם הודעות נכנסות: האם זו הונאה, איזה סוג הודעה זו, לאיזו מחלקה להעביר, כמה זה דחוף. זה
287
  לא צ'אטבוט, והוא לא בנוי למסמכים ארוכים (ראו [מג��לות](#מגבלות)).
288
 
289
- **במספרים.** על 298 הודעות בעברית הוא קובע נכון אם ההודעה היא הונאה ב-82.5% מהמקרים. בשביל
290
  פרופורציה: 70% מההודעות האלה הן לא הונאה, כך שמודל שתמיד עונה "לא הונאה" היה מקבל 70.5%. המספר
291
- שחשוב יותר הוא הדירוג: הוא נותן להונאה אמיתית הסתברות גבוהה יותר מאשר להודעה תקינה ב-88% מהמקרים (AUC 0.88).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
292
 
293
  ### לנסות
294
 
@@ -308,7 +385,7 @@ print(agent.predict("החבילה שלך מעוכבת. לשחרור שלם 12.90
308
 
309
  <div dir="rtl">
310
 
311
- הפלט: `0.8613`, ההסתברות שהטענה ("ההודעה מנסה לגרום לנמען ללחוץ על קישור, לשלם או למסור פרטים בלי סיבה לגיטימית")
312
  נכונה.
313
 
314
  **הניסוח של השאלה משנה.** זו בדיוק השאלה שבה השתמש מבחן ההונאות, והמספרים בכרטיס הזה הם עליה. בניסיונות שלנו ניסוח
@@ -328,7 +405,7 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
328
 
329
  ```json
330
  {"status":"ready","model":"laya"}
331
- {"model": "nitzotz", "family": "nitzotz", "route": "forced nitzotz", "answers": {"scam": {"type": "noul", "action": {"act_probability": 0.1511}, "confidence": 0.8785, "noul": 0.1215}}, "usage": {"input_tokens": 66, "output_tokens": 0, "latency_ms": 117.02}, "id": "1"}
332
  ```
333
 
334
  <div dir="rtl">
@@ -352,21 +429,21 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
352
 
353
  | מבחן (מספר שאלות) | ניצוץ | RoeiG (לא מסחרי) | laya-multilingual | ניחוש | ניצוץ מול RoeiG | ניצוץ מול laya-multilingual |
354
  |---|---|---|---|---|---|---|
355
- | הונאה או לא? (298 הודעות) | **82.5%** | 32.2% | 50.3% | 50.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
356
- | &nbsp;&nbsp;&nbsp;אותו דבר, רק המ��רים הקשים (65) | **63.1%** | 32.3% | 35.4% | 50.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p=0.008 |
357
- | סוג ההודעה, 6 אפשרויות (298) | **75.5%** | 52.7% | 20.8% | 16.7% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
358
- | &nbsp;&nbsp;&nbsp;אותו דבר, רק המקרים הקשים (65) | **53.8%** | 44.6% | 24.6% | 16.7% | תיקו<br>p=0.34 | **טוב יותר**<br>p<0.001 |
359
- | סוג פניית תמיכה, 5 אפשרויות (30) | **83.3%** | 80.0% | 56.7% | 20.0% | תיקו<br>p=1.00 | תיקו<br>p=0.06 |
360
- | דחיפות הפנייה, 5 רמות (30) | **60.0%** | 36.7% | 33.3% | 20.0% | תיקו<br>p=0.17 | תיקו<br>p=0.12 |
361
- | לקוח משלם? כן/לא (30) | **63.3%** | 56.7% | 50.0% | 50.0% | תיקו<br>p=0.50 | תיקו<br>p=0.54 |
362
- | כוונת פקודה קולית, 20 אפשרויות (500) | **88.8%** | 72.6% | 47.4% | 5.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
363
- | כוונת פקודה קולית, 4 אפשרויות (500) | **96.2%** | 90.8% | 69.4% | 25.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
364
- | נושא של ידיעה, 7 אפשרויות (204) | 79.4% | **82.3%** | 66.2% | 14.3% | תיקו<br>p=0.42 | **טוב יותר**<br>p<0.001 |
365
- | האם הקטע תומך בתשובה? (600) | 93.8% | **94.2%** | 48.8% | 50.0% | תיקו<br>p=0.90 | **טוב יותר**<br>p<0.001 |
366
- | תשובה סבירה שהקטע לא נותן (600) | **91.0%** | 53.0% | 53.7% | 50.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
367
- | הבנת הנקרא, 4 אפשרויות (900) | 52.7% | **75.4%** | 31.4% | 25.0% | **חלש יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
368
-
369
- בהבנת הנקרא של Belebele ניצוץ מקבל 52.7%, פחות מ-RoeiG/laya-hebrew (75.4%). ניצוץ בנוי להחלטות על הודעות, לא
370
  להבנה של קטעים ארוכים.
371
 
372
  איך לקרוא את זה:
@@ -383,7 +460,7 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
383
 
384
  **להסתברויות יש משמעות.** קחו את כל התשובות שבהן ניצוץ אמר שהוא בטוח בערך ב-70 עד 80%, וספרו כמה מהן היו נכונות.
385
  הגרף עושה את זה לכל רמת ביטחון, על 3,990 שאלות מבחן. כשהנקודות מעל הקו, ניצוץ צודק יותר ממה שהוא אומר (הוא
386
- צנוע). כשהן מתחת, הוא בטוח בעצמו יותר מדי. זה מה שמאפשר לקבוע ספים (בפרק הבא). הכיול נעשה על 2,901 פריטי אימון
387
  שהופרדו מראש, אף פעם לא על המבחן (`calibration.json`).
388
 
389
  **הוא באמת קורא את הטקסט.** כשמוחקים את ההודעה ומשאירים רק את השאלה, הדיוק יורד ל-70.5% בשאלת ההונאה
@@ -395,11 +472,11 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
395
 
396
  | איך מריצים | חציון על 50 שאלות בדיקה (בממוצע 135 טוקנים) | הודעה קצרה (38 טוקנים) | קלט ארוך (430 טוקנים) |
397
  |---|---|---|---|
398
- | laya.exe, קובץ Q8, כרטיס מסך (Vulkan) | 49 ms | 35 ms | 135 ms |
399
- | laya.exe, קובץ F16, כרטיס מסך (Vulkan) | 52 ms | 41 ms | 141 ms |
400
- | פייתון (laya), כרטיס מסך (PyTorch XPU) | 54 ms | 44 ms | 177 ms |
401
- | laya.exe, קובץ Q8, מעבד בלבד (16 תהליכונים) | 335 ms | 177 ms | 1233 ms |
402
- | פייתון (laya), מעבד בלבד | 387 ms | 130 ms | 1260 ms |
403
 
404
  בעמודות של ההודעה הקצרה והקלט הארוך אותה שאלה רצה 30 פעמים, אחרי 5 הרצות חימום. הזמנים על המחשב הזה משתנים הרבה בין
405
  הפעלה להפעלה (מדידה קודמת של אותה הגדרה יצאה איטית פי כמה), אז אלה מספרים בקירוב.
@@ -408,14 +485,14 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
408
 
409
  | קובץ, מכשיר | אותה תשובה מובילה, 50 שאלות | הפרש הסתברות מרבי | אותה תשובה מובילה, 596 שאלות ספאם | הפרש מרבי | הפרש ממוצע |
410
  |---|---|---|---|---|---|
411
- | Q8, כרטיס מסך | 50/50 | 0.0079 | 593/596 | 0.0152 | 0.00217 |
412
- | F16, כרטיס מסך | 50/50 | 0.0026 | 595/596 | 0.0023 | 0.00032 |
413
- | Q8, מעבד | 50/50 | 0.0094 | 590/596 | 0.0275 | 0.00321 |
414
- | F16, מעבד | 50/50 | 0.0017 | 595/596 | 0.0014 | 0.00027 |
415
 
416
  פער של 0.01 פירושו, למשל, 0.83 מול 0.84. השאלות המעטות שבהן התשובה המובילה משתנה הן כאלה שבהן שתי התשובות הטובות
417
- היו כמעט שוות. בשתי שאלות הספאם יחד קובץ Q8 על כרטיס המסך צודק ב-78.9%, מול 79.0% למודל הפייתון. קובץ F16
418
- קרוב יותר (79.2%).
419
 
420
  ### שימוש בעסק
421
 
@@ -427,11 +504,11 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
427
  - **צהוב** (לא בטוח): לבדיקה של אדם, או של מודל שפה גדול אם אתם משתמשים בו.
428
  - **אדום** (בטוח שזו הונאה): חסימה או הסגר.
429
 
430
- השרטוט הוא דוגמה על 298 הודעות המבחן. הסף העליון, 0.52, הוא הסף שנבחר לשאלת ההונאה על 700 הודעות אימון
431
- שהופרדו מראש (אף פעם לא על המבחן). הסף התחתון, 0.35, נבחר ביד. איתם 183 הודעות הולכות לירוק (16 מהן הן בעצם הונאה),
432
- 48 לצהוב (21 הונאות), ו-67 לאדום (16 מהן בעצם תקינות). כלומר אדום צריך להיות "הסגר ובדיקה", לא "מחיקה".
433
  בחרו ספים משלכם על מדגם של ההודעות שלכם, והחליטו כמה טעויות בירוק ובאדום אתם מוכנים לקבל. בסף 0.52 לבדו, תשובת
434
- ההונאה נכונה ב-82.2% מהמקרים בסך הכול וב-64.6% על 65 המקרים הקשים (בסף 0.50: 82.9% ו-64.6%).
435
 
436
  המודל זול מספיק כדי להריץ אותו על כל הודעה. האדם (או מודל השפה) רואה רק את החלק הצהוב. **אל תשתמשו בו כקו הגנה
437
  יחיד בהחלטות שיכו��ות לפגוע במישהו.**
@@ -442,8 +519,8 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
442
 
443
  1. **ללמוד לקרוא.** HalleluBERT-large אומן קודם למצוא את התשובה לשאלה בתוך קטע, על 27,085 שאלות אימון של HeQ
444
  (CC BY 4.0). קטעים שחפפו לקטע מבחן הוסרו.
445
- 2. **ללמוד להחליט.** מעליו הונח ראש החלטות של laya, וכל המודל אומן על 58,000 פריטים (55,099 לאימון,
446
- ו-2,901 הופרדו מראש כדי לבחור את הטוב מבין 2 מעברים ולכייל את הטמפרטורות).
447
 
448
  | מקור | פריטים | רישיון | איך נוצר |
449
  |---|---|---|---|
@@ -452,20 +529,35 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
452
  | סינתטי: טענות כן/לא על הודעה | 8,750 | הפלט של המורה שייך לנו (DeepSeek, MIT; Gemma, Apache-2.0) | נכתב בידי DeepSeek V4.1 Flash, סומן בנפרד בידי שני המודלים |
453
  | סינתטי: דחיפות, 5 רמות | 3,500 | הפלט של המורה שייך לנו (DeepSeek, MIT; Gemma, Apache-2.0) | נכתב בידי DeepSeek V4.1 Flash, סומן בנפרד בידי שני המודלים |
454
  | HeQ: האם התשובה המוצעת נתמכת (כן/לא) | 6,000 | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
455
- | HeQ: תשובה סבירה לשאלה שאין לה תשובה | 5,000 | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
456
  | HeQ: קריאה, 4 אפשרויות | 5,000 | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
457
  | MASSIVE he-IL: כוונת פקודה קולית | 7,000 | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
 
 
 
 
 
 
458
 
459
  - **הודעות סינתטיות (35,000 פריטים).** DeepSeek V4.1 Flash (MIT) כתב הודעות SMS, וואטסאפ ומייל בסגנון ישראלי
460
  לפי תוכנית (התווית המתוכננת, נושא, משלב, מספרי טלפון וקישורים מזויפים ומגוונים). אחר כך DeepSeek ו-Gemma 4 31B
461
  (Apache-2.0) סימנו כל הודעה, כל אחד לבד. הודעה נשמרה רק אם שניהם הסכימו. הם הסכימו על 94% מההודעות,
462
  ונשמרו 93.7% מתוך 37,429 ההודעות שנכתבו. שניהם רצו דרך DeepInfra (דרך OpenRouter), בלי שמירת נתונים
463
  ובלי מצב "חשיבה". הנתונים הסינתטיים לא מפורסמים.
 
 
 
 
 
 
 
464
  - **נתונים פתוחים.** HeQ v1.1 (CC BY 4.0. בערך חצי מהשאלות שלו על כתבות של Geektime, ומחברי HeQ משתפים אותם באותו רישיון) ו-MASSIVE
465
- he-IL (CC BY 4.0). רק מפיצולי האימון.
466
  - **בלי דליפה מהמבחנים.** כל פריט אימון הושווה לכל שאלת מבחן. כל מה שחולק רצף של 8 מילים עם טקסט מבחן נזרק, וגם
467
- פקודות MASSIVE שזהות לפקודת מבחן.
468
- - **מה לא שימש:** שום פלט של צ'אטבוט מסחרי סגור, שום מודל של DICTA, שום נתונים לא מסחריים או ברישיון "שיתוף זהה".
 
 
469
  - **גודל:** המקודד 357.1 מיליון פרמטרים (HalleluBERT-large, MIT, אומן מחדש). ראש ההחלטות 26.5 מיליון פרמטרים,
470
  אומן מאפס.
471
 
@@ -483,22 +575,27 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
483
  הסתייגויות שמשנות כמה לסמוך על המספרים:
484
  - **מבחן הספאם והעסקים נכתב בידי מודל AI ונבדק בידי מודל AI, לא בידי אדם.** תיבות דואר אמיתיות ייראו אחרת. הוא ננעל
485
  אחרי הבדיקה הזו (4 תוויות שונו, 2 הודעות הוסרו).
486
- - **שתי ריצות אימון, עם שני זרעים אקראיים, וזו אחת מהן.** היא נבחרה לפי פריטי אימון שהופרדו מראש (94.8% מול 94.6%, פער קטן), לא לפי המבחנים. בכמה מבחנים שתי הריצות שונות יותר ממה שמזל מסביר: הונאה או לא 82.5% כאן מול 68.8% בריצה השנייה, נושא ידיעה 79.4% מול 74.0%. ריצת אימון חדשה יכולה להזיז את שני המספרים האלה בכמה נקודות.
487
  - **תוויות האימון באות משני מודלי AI.** איפה ששניהם טועים באותו אופן, ניצוץ למד את הטעות שלהם.
488
  - התשובות השגויות של HeQ במבחן נבחרו בקוד, ולא נבדקו בידי אדם.
489
 
490
  ### מגבלות
491
 
492
- - **הוא חלש בהבנת הנקרא של קטעים ארוכים.** Belebele: 52.7%, כשניחוש עיוור מקבל 25%. כשהתשובה הנכונה כתובה בקטע
493
- מילה במילה הוא מקבל 72% (252 שאלות). כשהתשובה נאמרת במילים אחרות הוא מקבל 45% (648 שאלות).
 
494
  אל תשאלו אותו אם מסמך ארוך תומך בטענה.
495
- - **בדיקה אם קטע תומך בתשובה (HeQ) עובדת.** 93.8% עם הקטע. כשמוחקים את הקטע זה יורד ל-50.0%, הטלת מטבע. כלומר בשאלות מהסוג הזה הוא באמת קורא את הקטע.
496
  - **מספרים, תאריכים, סכומים וכללים**: לא אומן עליהם ולא נמדד. חשבו אותם בקוד והעבירו את התוצאה.
497
- - **המקרים הקשים הם נקודת התורפה**: הונאות שנכתבו כדי להיראות לגיטימיות ("ספק" שמחליף פרטי חשבון בנק, "המנכ"ל" שמבקש
498
- העברה), והודעות אמיתיות שנראות כמו הונאה (התראה אמיתית מהבנק עם קישור, קוד אימות אמיתי). על 65 המקרים הקשים שאלת
499
- ההונאה צודקת ב-63.1% מהמקרים. זה פחות מה-70.8% שהיה יוצא אם תמיד עונים שם "לא הונאה", וגם
500
- הדירוג שלו במקרים האלה חלש (AUC 0.63).
501
- - **דחיפות היא עניין סובייקטיבי.** אפילו שני מודלי המורה הסכימו עם הדחיפות המתוכננת רק בכ-62 עד 64% מהמקרים.
 
 
 
 
502
  - **ציניות ואירוניה** כנראה נקראות מילולית. לא נמדד.
503
  - **512 טוקנים** (בערך 300 עד 400 מילים בעברית) לשאלה. הודעה ארוכה יותר נחתכת מהסוף בלי אזהרה.
504
  - **עברית בלבד.** לא אומן ולא נבדק על אנגלית או ערבית.
@@ -515,6 +612,9 @@ laya.exe daemon nitzotz-q8_0.gguf --device vulkan
515
  הלאומית (NNLP-IL). כולל קטעים מ-Geektime.
516
  - [MASSIVE](https://huggingface.co/datasets/AmazonScience/massive): CC BY 4.0, אמזון (FitzGerald ואחרים, 2022).
517
  - **DeepSeek V4.1 Flash** (MIT) ו-**Gemma 4 31B** (Apache-2.0), דרך DeepInfra, ככותב הנתונים וכמסמנים.
 
 
 
518
  - [ggmlc](https://github.com/monatis/ggmlc) לקובצי ה-GGUF.
519
  - Belebele ו-SIB-200 (CC BY-SA 4.0) שימשו רק לבדיקה, אף פעם לא לאימון.
520
 
 
19
 
20
  ![Nitzotz: Hebrew decision model](assets/banner_en.png)
21
 
22
+ ![Scam detection accuracy 91.3%, 0.05 s per question, 413 MB, Apache-2.0](assets/tiles_en.png)
23
 
24
  **What it is.** Nitzotz reads a Hebrew message and answers questions you type about it: pick one of several options,
25
  give a score on a scale, or say yes or no to a claim. For every answer it gives a probability you can trust, so you
 
30
  department should get it, how urgent is it. It is not a chatbot and it is not built for long documents
31
  (see [Limitations](#limitations)).
32
 
33
+ **In numbers.** On 298 Hebrew messages it says correctly whether a message is a scam 91.3% of the
34
  time. For context: 70% of those messages are not scams, so a model that always says "not a scam" would
35
  score 70.5%. The number that matters more is the ranking: it gives real scams a higher probability than
36
+ legitimate messages 98% of the time (AUC 0.98).
37
+
38
+ ## What changed in version 1.1
39
+
40
+ The same model, with the same size, files and way of use. It was trained again with more data: reading questions,
41
+ the same questions in many different wordings, and harder scam examples (see [Training data](#training-data-and-transparency)).
42
+ On the same frozen tests as version 1.0:
43
+
44
+ | Test | Version 1.0 | Version 1.1 | Real difference? |
45
+ |---|---|---|---|
46
+ | Reading comprehension (Belebele, 900 questions) | 52.7% | **62.7%** | yes (p<0.001) |
47
+ | &nbsp;&nbsp;&nbsp;only the "which of these is NOT ..." questions (158) | 25.3% | **51.9%** | - |
48
+ | Scam or not (298 messages) | 82.5% | **91.3%** | yes (p<0.001) |
49
+ | &nbsp;&nbsp;&nbsp;hard cases only (65) | 63.1% | **80.0%** | yes (p=0.03) |
50
+ | Paying customer? (30 tickets) | 63.3% | **76.7%** | not clear (p=0.12) |
51
+ | Wording changes the answer: share of questions whose answer is not the same in all 6 wordings (1,786 questions, lower is better) | 9.8% | **4.4%** | - |
52
+
53
+ - **Reading.** The biggest change. Questions of the form "which of these is NOT said in the passage" were at the level
54
+ of a blind guess (25.3%); now 51.9%.
55
+ - **Scams.** Better overall and on the hard cases (scams written to look legitimate, and real messages that look like
56
+ scams). The scam threshold was chosen again on held-out training messages: 0.515 (version 1.0: 0.517).
57
+ - **Wording.** Asking the same question in other words now changes the answer much less often. In version 1.0
58
+ one everyday wording of the paying-customer question made it answer "yes" for all 30 tickets; now no wording
59
+ gives one answer to every ticket. The urgency question is still unstable (see [Limitations](#limitations)).
60
+ - No test got clearly worse (paired exact McNemar against version 1.0 on the same questions: no drop with p < 0.05).
61
 
62
  ## Try it
63
 
 
73
  print(agent.predict("החבילה שלך מעוכבת. לשחרור שלם 12.90 בקישור", q)["answers"]["scam"]["noul"])
74
  ```
75
 
76
+ Output: `0.8638`, the probability that the claim ("the message tries to make the reader click a link, pay or hand
77
  over details for no legitimate reason") is true.
78
 
79
  **The wording of the question matters.** This is the exact question the scam test used, and the numbers on this card
 
91
 
92
  ```json
93
  {"status":"ready","model":"laya"}
94
+ {"model": "nitzotz", "family": "nitzotz", "route": "forced nitzotz", "answers": {"scam": {"type": "noul", "action": {"act_probability": 0.6666}, "confidence": 0.9708, "noul": 0.0292}}, "usage": {"input_tokens": 66, "output_tokens": 0, "latency_ms": 239.876}, "id": "1"}
95
  ```
96
 
97
  `noul` is the probability that the claim is true. Several questions in one request are answered together in one pass.
 
114
 
115
  | Test (questions) | Nitzotz | RoeiG (non-commercial) | laya-multilingual | Chance | Nitzotz vs RoeiG | Nitzotz vs laya-multilingual |
116
  |---|---|---|---|---|---|---|
117
+ | Scam or not? (298 messages) | **91.3%** | 32.2% | 50.3% | 50.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
118
+ | &nbsp;&nbsp;&nbsp;same, hard cases only (65) | **80.0%** | 32.3% | 35.4% | 50.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
119
+ | Message type, 6 options (298) | **76.2%** | 52.7% | 20.8% | 16.7% | **better**<br>p<0.001 | **better**<br>p<0.001 |
120
+ | &nbsp;&nbsp;&nbsp;same, hard cases only (65) | **63.1%** | 44.6% | 24.6% | 16.7% | tie<br>p=0.05 | **better**<br>p<0.001 |
121
+ | Support ticket type, 5 options (30) | **86.7%** | 80.0% | 56.7% | 20.0% | tie<br>p=0.69 | **better**<br>p=0.02 |
122
+ | Ticket urgency, 5 levels (30) | **80.0%** | 36.7% | 33.3% | 20.0% | **better**<br>p=0.002 | **better**<br>p=0.003 |
123
+ | Paying customer? yes/no (30) | **76.7%** | 56.7% | 50.0% | 50.0% | **better**<br>p=0.03 | tie<br>p=0.12 |
124
+ | Voice command intent, 20 options (500) | **90.0%** | 72.6% | 47.4% | 5.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
125
+ | Voice command intent, 4 options (500) | **97.0%** | 90.8% | 69.4% | 25.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
126
+ | News topic, 7 options (204) | 80.4% | **82.3%** | 66.2% | 14.3% | tie<br>p=0.61 | **better**<br>p<0.001 |
127
+ | Does the passage support this answer? (600) | **94.8%** | 94.2% | 48.8% | 50.0% | tie<br>p=0.70 | **better**<br>p<0.001 |
128
+ | Plausible answer the passage does not give (600) | **90.7%** | 53.0% | 53.7% | 50.0% | **better**<br>p<0.001 | **better**<br>p<0.001 |
129
+ | Reading comprehension, 4 options (900) | 62.7% | **75.4%** | 31.4% | 25.0% | **worse**<br>p<0.001 | **better**<br>p<0.001 |
130
+
131
+ On Belebele reading comprehension Nitzotz scores 62.7%, below RoeiG/laya-hebrew (75.4%); Nitzotz is built for
132
  message decisions, not long-passage comprehension.
133
 
134
  How to read it:
 
148
  how many were right: the chart above does that for every confidence level, over 3,990 test questions.
149
  Where the dots sit above the line, Nitzotz is more often right than it claims (it is modest); where they sit below, it
150
  is over-confident. This is what lets you set thresholds (see the next section). The per-question-type temperatures
151
+ were fitted on 4,550 held-out training items, never on the test sets (`calibration.json`).
152
 
153
  **It reads the text.** With the message removed and only the question left, its accuracy falls to
154
  70.5% on the scam question and 7.7% on message type. So the answers come from the message, not
 
160
 
161
  | Runtime | Median over 50 check questions (about 135 tokens) | Short message (38 tokens) | Long input (430 tokens) |
162
  |---|---|---|---|
163
+ | laya.exe, Q8 file, GPU (Vulkan) | 50 ms | 38 ms | 138 ms |
164
+ | laya.exe, F16 file, GPU (Vulkan) | 52 ms | 44 ms | 137 ms |
165
+ | Python (laya), GPU (PyTorch XPU) | 70 ms | 44 ms | 192 ms |
166
+ | laya.exe, Q8 file, CPU only (16 threads) | 340 ms | 186 ms | 1270 ms |
167
+ | Python (laya), CPU only | 342 ms | 134 ms | 1236 ms |
168
 
169
  The short and long columns repeat one fixed input 30 times after 5 warm-up calls. Timings on this laptop change a
170
  lot from one session to another (an earlier measurement of the same setup was several times slower), so treat these
 
175
 
176
  | File, device | Same top answer, 50 questions | Largest probability gap | Same top answer, 596 spam questions | Largest gap | Average gap |
177
  |---|---|---|---|---|---|
178
+ | Q8, GPU | 50/50 | 0.0456 | 595/596 | 0.0189 | 0.00116 |
179
+ | F16, GPU | 50/50 | 0.0031 | 596/596 | 0.0023 | 0.00023 |
180
+ | Q8, CPU | 50/50 | 0.0563 | 595/596 | 0.0278 | 0.00185 |
181
+ | F16, CPU | 50/50 | 0.0015 | 596/596 | 0.0017 | 0.00020 |
182
 
183
  A gap of 0.01 means, for example, 0.83 against 0.84. The few questions where the top answer changes are ones where
184
+ the two best answers were almost tied. Over both spam questions the Q8 file on the GPU is right 83.6% of the time,
185
+ against 83.7% for the Python model; the F16 file is closer (83.7%).
186
 
187
  ## Use it in your business
188
 
 
196
  - **Red** (confident it is a scam): block or quarantine it.
197
 
198
  The drawing is a worked example on the 298 test messages. The upper threshold, 0.52, is the one chosen for the
199
+ scam question on 1000 held-out training messages (never on the test); the lower one, 0.35, was picked by hand. With them,
200
+ 207 messages go to green (11 of them are in fact scams), 5 to yellow (3 scams), and 86 to red (12 of them are
201
  in fact legitimate). So red should mean "quarantine and check", not "delete". Pick your own thresholds on a sample of
202
  your own messages, and decide how many mistakes in green and red you can live with. At the 0.52 threshold alone,
203
+ the scam answer is right 91.3% of the time overall and 80.0% on the 65 hard cases (at 0.50: 91.3% and 80.0%).
204
 
205
  The model is cheap enough to run on every message. The person (or the LLM) only sees the yellow part. **Do not use it
206
  as the only line of defence for decisions that can hurt someone.**
 
211
 
212
  1. **Learning to read.** HalleluBERT-large was first trained to find the answer to a question inside a passage, on
213
  27,085 HeQ training questions (CC BY 4.0). Passages that overlapped a test passage were removed.
214
+ 2. **Learning to decide.** A laya decision head was put on top and the whole model was trained on 106,723 items
215
+ (102,173 for training, 4,550 held out to pick the best of 2 passes and to fit the temperatures).
216
 
217
  | Source | Items | Licence | How it was made |
218
  |---|---|---|---|
 
221
  | Synthetic: Yes/no claims about a message | 8,750 | teacher output, project-owned (DeepSeek MIT; Gemma Apache-2.0) | written by DeepSeek V4.1 Flash, labelled independently by both models |
222
  | Synthetic: Urgency, 5 levels | 3,500 | teacher output, project-owned (DeepSeek MIT; Gemma Apache-2.0) | written by DeepSeek V4.1 Flash, labelled independently by both models |
223
  | HeQ: is the proposed answer supported (yes/no) | 6,000 | CC BY 4.0 | the dataset's gold labels, train split only |
224
+ | HeQ: plausible answer to an unanswerable question | 9,750 (4,750 of them repeated copies, new in 1.1) | CC BY 4.0 | the dataset's gold labels, train split only |
225
  | HeQ: 4-option reading | 5,000 | CC BY 4.0 | the dataset's gold labels, train split only |
226
  | MASSIVE he-IL: voice command intent | 7,000 | CC BY 4.0 | the dataset's gold labels, train split only |
227
+ | New in 1.1: scam or not, disguised scams and real messages that look suspicious | 6,000 | model output, project-owned (DeepSeek MIT; Gemma Apache-2.0) | written by DeepSeek V4.1 Flash from scenario outlines written with GPT; kept only if both labellers agreed with the writer |
228
+ | New in 1.1: message type of the same messages | 5,374 | model output, project-owned | the type both labellers agreed on |
229
+ | New in 1.1: copies of existing items with the question reworded | 21,199 | as the original item; the wordings were written with GPT | question or options in one of 376 alternative wordings written with GPT; the label comes from the original item |
230
+ | New in 1.1: reading, 4 options ("which is NOT", reworded answers, several sentences) | 6,825 | passages: FineWeb-2, ODC-By 1.0; questions: model output, project-owned | written by DeepSeek V4.1 Flash, checked by Gemma 4 31B with the passage and again without it; dropped if it could be answered without the passage |
231
+ | New in 1.1: topic of a passage, 7 options | 4,000 | passages: FineWeb-2, ODC-By 1.0; labels: model output | labelled by DeepSeek V4.1 Flash and Gemma 4 31B |
232
+ | New in 1.1: is the sender an existing paying customer (yes/no) | 575 | model output, project-owned; question wordings written with GPT | support messages written by DeepSeek V4.1 Flash, checked by Gemma 4 31B |
233
 
234
  - **Synthetic messages (35,000 items).** DeepSeek V4.1 Flash (MIT) wrote Israeli-style SMS, WhatsApp and email messages
235
  from a plan (intended label, topic, tone, varied fake phone numbers and links). DeepSeek and Gemma 4 31B
 
237
  agreed on 94% of them, and 93.7% of the 37,429 written messages were kept. Both ran
238
  through DeepInfra (via OpenRouter), with data retention off and "thinking" mode off. The synthetic data is not
239
  published.
240
+ - **New in version 1.1.** 6,825 reading questions on Hebrew web passages from FineWeb-2 (ODC-By 1.0): "which of
241
+ these is NOT true or NOT mentioned" (each paired with a positive question on the same passage), answers said in
242
+ other words, and answers that need several sentences. DeepSeek V4.1 Flash wrote them and Gemma 4 31B checked each one
243
+ twice, with the passage and without it; a question that could be answered without the passage was dropped.
244
+ 6,000 messages that are hard to tell apart (disguised scams, and real messages that look suspicious), written by
245
+ DeepSeek and kept only if both labellers agreed with each other and with the writer. 4,000 passages labelled
246
+ with a topic, 575 support messages for the paying-customer question, and 4,750 repeated HeQ items so that the
247
+ older skills are not lost.
248
+ - **Written with GPT.** Part of the training data was written with OpenAI's GPT, through our ChatGPT subscription: 376 alternative wordings of the questions and 34 sets of alternative answer options, used in 30,488 training items (including all 575 paying-customer items), and 120 short scenario outlines from which DeepSeek V4.1 Flash wrote 6,000 messages. GPT wrote no message and no label. In total 33,148 of the 106,723 training items (31%) use text written with GPT. GPT output is covered by OpenAI's terms of use, not by an open licence.
249
  - **Open data.** HeQ v1.1 (CC BY 4.0; about half of its questions are on Geektime articles, shared by the HeQ authors under
250
+ the same licence) and MASSIVE he-IL (CC BY 4.0), training splits only. FineWeb-2 Hebrew (ODC-By 1.0) passages for
251
+ the new reading and topic items.
252
  - **No leaks from the tests.** Every training item was compared with every test question; anything sharing an
253
+ 8-word run with a test text was dropped, and so were MASSIVE commands equal to a test command. The new items were
254
+ checked with stricter rules: every new passage against every test text (any shared 6-word run), and every new
255
+ question, option and wording against every test question and every reworded test question (exact match and
256
+ character similarity).
257
+ - **Not used:** no output of any other closed commercial chatbot, no DICTA model, no non-commercial or share-alike
258
+ data. GPT, a closed commercial model, was used only as described above.
259
  - **Size:** encoder 357.1M parameters (HalleluBERT-large, MIT, fine-tuned); decision head 26.5M parameters,
260
  trained from scratch.
261
 
 
273
  Caveats that change how much to trust the numbers:
274
  - **The spam and business test was written by an AI model and checked by an AI model, not by a person.** Real inboxes
275
  will look different. It was frozen after that review (4 labels changed, 2 messages removed).
276
+ - **Three training runs, three random seeds; this is one of them.** It was picked on held-out training items (95.8% against 94.9% and 95.3%), not on the tests. The three runs are close on the large tests: scam or not 91.3% here against 91.3% and 90.9%, news topic 80.4% against 80.9% and 82.3%, reading 62.7% against 63.1% and 63.4%. This run and each of the other two give the same answer on 90.6% to 91.0% of all test questions. On the 30-ticket tests they differ more: ticket urgency 80.0% here against 66.7% and 66.7%.
277
  - **The training labels come from two AI models.** Where both are wrong in the same way, Nitzotz learned their mistake.
278
  - HeQ's wrong answers in the test were picked by code, not checked by a person.
279
 
280
  ## Limitations
281
 
282
+ - **Reading comprehension of longer passages is better, but still limited.** Belebele: 62.7%, where a blind guess
283
+ gets 25%, and still below the best other laya model on this test (see [Benchmarks](#benchmarks)). When the right
284
+ answer is written word for word in the passage it gets 79% (252 questions); when the answer is said in other
285
+ words it gets 56% (648 questions); on "which of these is NOT" questions 52% (158 questions). Do not ask it
286
+ whether a long document supports a claim.
287
+ - **Checking an answer against a passage (HeQ) works.** 94.8% with the passage; with the passage removed it falls to 50.3%, a coin flip. So on this kind of question it really reads the passage.
288
  - **Numbers, dates, amounts and rules**: not trained and not measured. Compute them in code and pass the result in.
289
+ - **Hard cases are still the weak spot**: scams written to look legitimate (a "supplier" changing bank details, the
290
+ "CEO" asking for a transfer) and real messages that look like scams (a real bank alert with a link, a real
291
+ verification code). On the 65 hard cases the scam question is right 80.0% of the time (always answering "not a
292
+ scam" there would give 70.8%), with AUC 0.88. At the chosen threshold it still misses 5 of the 19 scams written to look
293
+ legitimate, and flags 8 of the 46 real messages that look like scams.
294
+ - **Urgency is subjective, and its answer depends on the wording.** Even the two teacher models matched the intended
295
+ urgency only about 62 to 64% of the time. When the urgency question is asked in other words, the answer changes on
296
+ 43% of the 30 test tickets.
297
+ - **The in-house tests and much of the training data were written by AI models, not by people.** This includes the
298
+ spam and business test, the support-ticket test and the new reading questions. Real messages will look different.
299
+ - **The support-ticket tests are small**: 30 tickets per question, so one ticket moves a score by 3.3 points.
300
  - **Sarcasm and irony** are probably read literally. Not measured.
301
  - **512 tokens** (roughly 300 to 400 Hebrew words) per question. A longer message is cut from the end without a warning.
302
  - **Hebrew only.** Not trained or tested on English or Arabic.
 
314
  National NLP Program (NNLP-IL); includes Geektime passages.
315
  - [MASSIVE](https://huggingface.co/datasets/AmazonScience/massive): CC BY 4.0, Amazon (FitzGerald et al., 2022).
316
  - **DeepSeek V4.1 Flash** (MIT) and **Gemma 4 31B** (Apache-2.0), used through DeepInfra as data writer and labellers.
317
+ - [FineWeb-2](https://huggingface.co/datasets/HuggingFaceFW/fineweb-2) (Hebrew): ODC-By 1.0, Hugging Face; the passages of the new
318
+ reading and topic items.
319
+ - **OpenAI GPT**, through a ChatGPT subscription (OpenAI terms of use): question wordings and scenario outlines, as
320
+ described in the training data section.
321
  - [ggmlc](https://github.com/monatis/ggmlc) for the GGUF files.
322
  - Belebele and SIB-200 (CC BY-SA 4.0) were used only to test, never to train.
323
 
 
331
 
332
  ![ניצוץ: מודל החלטות בעברית](assets/banner_he.png)
333
 
334
+ ![דיוק בזיהוי הונאות 91.3%, 0.05 שניות לשאלה, 413 MB, Apache-2.0](assets/tiles_he.png)
335
 
336
  **מה זה.** ניצוץ קורא הודעה בעברית ועונה על שאלות שאתם מקלידים עליה: לבחור אחת מכמה אפשרויות, לתת ציון בסולם, או
337
  לענות כן או לא על טענה. על כל תשובה הוא נותן הסתברות שאפשר לסמוך עליה, כך שיודעים מתי הוא בטוח ומתי הוא מנחש. הוא לא
 
340
  **בשביל מה.** להחליט מה עושים עם הודעות נכנסות: האם זו הונאה, איזה סוג הודעה זו, לאיזו מחלקה להעביר, כמה זה דחוף. זה
341
  לא צ'אטבוט, והוא לא בנוי למסמכים ארוכים (ראו [מג��לות](#מגבלות)).
342
 
343
+ **במספרים.** על 298 הודעות בעברית הוא קובע נכון אם ההודעה היא הונאה ב-91.3% מהמקרים. בשביל
344
  פרופורציה: 70% מההודעות האלה הן לא הונאה, כך שמודל שתמיד עונה "לא הונאה" היה מקבל 70.5%. המספר
345
+ שחשוב יותר הוא הדירוג: הוא נותן להונאה אמיתית הסתברות גבוהה יותר מאשר להודעה תקינה ב-98% מהמקרים (AUC 0.98).
346
+
347
+ ### מה השתנה בגרסה 1.1
348
+
349
+ אותו מודל, באותו גודל, אותם קבצים ואותה דרך שימוש. הוא אומן מחדש עם יותר נתונים: שאלות קריאה, אותן שאלות בהרבה
350
+ ניסוחים שונים, ודוגמאות הונאה קשות יותר (ראו [נתוני האימון](#נתוני-האימון-ושקיפות)). על אותם מבחנים קפואים כמו בגרסה 1.0:
351
+
352
+ | מבחן | גרסה 1.0 | גרסה 1.1 | ההבדל אמיתי? |
353
+ |---|---|---|---|
354
+ | הבנת הנקרא (Belebele, 900 שאלות) | 52.7% | **62.7%** | כן (p<0.001) |
355
+ | &nbsp;&nbsp;&nbsp;רק שאלות "איזו מהבאות לא ..." (158) | 25.3% | **51.9%** | - |
356
+ | הונאה או לא (298 הודעות) | 82.5% | **91.3%** | כן (p<0.001) |
357
+ | &nbsp;&nbsp;&nbsp;רק המקרים הקשים (65) | 63.1% | **80.0%** | כן (p=0.03) |
358
+ | לקוח משלם? (30 פניות) | 63.3% | **76.7%** | לא ברור (p=0.12) |
359
+ | הניסוח משנה את התשובה: אחוז השאלות שהתשובה עליהן לא זהה בכל 6 הניסוחים (1,786 שאלות, נמוך = טוב) | 9.8% | **4.4%** | - |
360
+
361
+ - **קריאה.** השינוי הגדול ביותר. שאלות מהסוג "איזו מהבאות לא נאמרה בקטע" היו בגובה ניחוש עיוור (25.3%). עכשיו
362
+ 51.9%.
363
+ - **הונאות.** טוב יותר בסך הכול וגם במקרים הקשים (הונאות שנכתבו כדי להיראות לגיטימיות, והודעות אמיתיות שנראות כמו הונאה).
364
+ סף ההונאה נבחר מחדש על הודעות אימון שהופרדו מראש: 0.515 (בגרסה 1.0: 0.517).
365
+ - **ניסוח.** כשמנסחים את אותה שאלה במילים אחרות, התשובה משתנה הרבה פחות. בגרסה 1.0 ניסוח יומיומי אחד של שאלת
366
+ הלקוח המשלם גרם לו לענות "כן" על כל 30 הפניות. עכשיו אף ניסוח לא נותן תשובה אחת לכל הפניות. שאלת
367
+ הדחיפות עדיין לא יציבה (ראו [מגבלות](#מגבלות)).
368
+ - אף מבחן לא נהיה גרוע יותר באופן ברור (McNemar מדויק מול גרסה 1.0 על אותן שאלות: אין ירידה עם p קטן מ-0.05).
369
 
370
  ### לנסות
371
 
 
385
 
386
  <div dir="rtl">
387
 
388
+ הפלט: `0.8638`, ההסתברות שהטענה ("ההודעה מנסה לגרום לנמען ללחוץ על קישור, לשלם או למסור פרטים בלי סיבה לגיטימית")
389
  נכונה.
390
 
391
  **הניסוח של השאלה משנה.** זו בדיוק השאלה שבה השתמש מבחן ההונאות, והמספרים בכרטיס הזה הם עליה. בניסיונות שלנו ניסוח
 
405
 
406
  ```json
407
  {"status":"ready","model":"laya"}
408
+ {"model": "nitzotz", "family": "nitzotz", "route": "forced nitzotz", "answers": {"scam": {"type": "noul", "action": {"act_probability": 0.6666}, "confidence": 0.9708, "noul": 0.0292}}, "usage": {"input_tokens": 66, "output_tokens": 0, "latency_ms": 239.876}, "id": "1"}
409
  ```
410
 
411
  <div dir="rtl">
 
429
 
430
  | מבחן (מספר שאלות) | ניצוץ | RoeiG (לא מסחרי) | laya-multilingual | ניחוש | ניצוץ מול RoeiG | ניצוץ מול laya-multilingual |
431
  |---|---|---|---|---|---|---|
432
+ | הונאה או לא? (298 הודעות) | **91.3%** | 32.2% | 50.3% | 50.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
433
+ | &nbsp;&nbsp;&nbsp;אותו דבר, רק המקרים הקשים (65) | **80.0%** | 32.3% | 35.4% | 50.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
434
+ | סוג ההודעה, 6 אפשרויות (298) | **76.2%** | 52.7% | 20.8% | 16.7% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
435
+ | &nbsp;&nbsp;&nbsp;אותו דבר, רק המקרים הקשים (65) | **63.1%** | 44.6% | 24.6% | 16.7% | תיקו<br>p=0.05 | **טוב יותר**<br>p<0.001 |
436
+ | סוג פניית תמיכה, 5 אפשרויות (30) | **86.7%** | 80.0% | 56.7% | 20.0% | תיקו<br>p=0.69 | **טוב יותר**<br>p=0.02 |
437
+ | דחיפות הפנייה, 5 רמות (30) | **80.0%** | 36.7% | 33.3% | 20.0% | **טוב יותר**<br>p=0.002 | **טוב יותר**<br>p=0.003 |
438
+ | לקוח משלם? כן/לא (30) | **76.7%** | 56.7% | 50.0% | 50.0% | **טוב יותר**<br>p=0.03 | תיקו<br>p=0.12 |
439
+ | כוונת פקודה קולית, 20 אפשרויות (500) | **90.0%** | 72.6% | 47.4% | 5.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
440
+ | כוונת פקודה קולית, 4 אפשרויות (500) | **97.0%** | 90.8% | 69.4% | 25.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
441
+ | נושא של ידיעה, 7 אפשרויות (204) | 80.4% | **82.3%** | 66.2% | 14.3% | תיקו<br>p=0.61 | **טוב יותר**<br>p<0.001 |
442
+ | האם הקטע תומך בתשובה? (600) | **94.8%** | 94.2% | 48.8% | 50.0% | תיקו<br>p=0.70 | **טוב יותר**<br>p<0.001 |
443
+ | תשובה סבירה שהקטע לא נותן (600) | **90.7%** | 53.0% | 53.7% | 50.0% | **טוב יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
444
+ | הבנת הנקרא, 4 אפשרויות (900) | 62.7% | **75.4%** | 31.4% | 25.0% | **חלש יותר**<br>p<0.001 | **טוב יותר**<br>p<0.001 |
445
+
446
+ בהבנת הנקרא של Belebele ניצוץ מקבל 62.7%, פחות מ-RoeiG/laya-hebrew (75.4%). ניצוץ בנוי להחלטות על הודעות, לא
447
  להבנה של קטעים ארוכים.
448
 
449
  איך לקרוא את זה:
 
460
 
461
  **להסתברויות יש משמעות.** קחו את כל התשובות שבהן ניצוץ אמר שהוא בטוח בערך ב-70 עד 80%, וספרו כמה מהן היו נכונות.
462
  הגרף עושה את זה לכל רמת ביטחון, על 3,990 שאלות מבחן. כשהנקודות מעל הקו, ניצוץ צודק יותר ממה שהוא אומר (הוא
463
+ צנוע). כשהן מתחת, הוא בטוח בעצמו יותר מדי. זה מה שמאפשר לקבוע ספים (בפרק הבא). הכיול נעשה על 4,550 פריטי אימון
464
  שהופרדו מראש, אף פעם לא על המבחן (`calibration.json`).
465
 
466
  **הוא באמת קורא את הטקסט.** כשמוחקים את ההודעה ומשאירים רק את השאלה, הדיוק יורד ל-70.5% בשאלת ההונאה
 
472
 
473
  | איך מריצים | חציון על 50 שאלות בדיקה (בממוצע 135 טוקנים) | הודעה קצרה (38 טוקנים) | קלט ארוך (430 טוקנים) |
474
  |---|---|---|---|
475
+ | laya.exe, קובץ Q8, כרטיס מסך (Vulkan) | 50 ms | 38 ms | 138 ms |
476
+ | laya.exe, קובץ F16, כרטיס מסך (Vulkan) | 52 ms | 44 ms | 137 ms |
477
+ | פייתון (laya), כרטיס מסך (PyTorch XPU) | 70 ms | 44 ms | 192 ms |
478
+ | laya.exe, קובץ Q8, מעבד בלבד (16 תהליכונים) | 340 ms | 186 ms | 1270 ms |
479
+ | פייתון (laya), מעבד בלבד | 342 ms | 134 ms | 1236 ms |
480
 
481
  בעמודות של ההודעה הקצרה והקלט הארוך אותה שאלה רצה 30 פעמים, אחרי 5 הרצות חימום. הזמנים על המחשב הזה משתנים הרבה בין
482
  הפעלה להפעלה (מדידה קודמת של אותה הגדרה יצאה איטית פי כמה), אז אלה מספרים בקירוב.
 
485
 
486
  | קובץ, מכשיר | אותה תשובה מובילה, 50 שאלות | הפרש הסתברות מרבי | אותה תשובה מובילה, 596 שאלות ספאם | הפרש מרבי | הפרש ממוצע |
487
  |---|---|---|---|---|---|
488
+ | Q8, כרטיס מסך | 50/50 | 0.0456 | 595/596 | 0.0189 | 0.00116 |
489
+ | F16, כרטיס מסך | 50/50 | 0.0031 | 596/596 | 0.0023 | 0.00023 |
490
+ | Q8, מעבד | 50/50 | 0.0563 | 595/596 | 0.0278 | 0.00185 |
491
+ | F16, מעבד | 50/50 | 0.0015 | 596/596 | 0.0017 | 0.00020 |
492
 
493
  פער של 0.01 פירושו, למשל, 0.83 מול 0.84. השאלות המעטות שבהן התשובה המובילה משתנה הן כאלה שבהן שתי התשובות הטובות
494
+ היו כמעט שוות. בשתי שאלות הספאם יחד קובץ Q8 על כרטיס המסך צודק ב-83.6%, מול 83.7% למודל הפייתון. קובץ F16
495
+ קרוב יותר (83.7%).
496
 
497
  ### שימוש בעסק
498
 
 
504
  - **צהוב** (לא בטוח): לבדיקה של אדם, או של מודל שפה גדול אם אתם משתמשים בו.
505
  - **אדום** (בטוח שזו הונאה): חסימה או הסגר.
506
 
507
+ השרטוט הוא דוגמה על 298 הודעות המבחן. הסף העליון, 0.52, הוא הסף שנבחר לשאלת ההונאה על 1000 הודעות אימון
508
+ שהופרדו מראש (אף פעם לא על המבחן). הסף התחתון, 0.35, נבחר ביד. איתם 207 הודעות הולכות לירוק (11 מהן הן בעצם הונאה),
509
+ 5 לצהוב (3 הונאות), ו-86 לאדום (12 מהן בעצם תקינות). כלומר אדום צריך להיות "הסגר ובדיקה", לא "מחיקה".
510
  בחרו ספים משלכם על מדגם של ההודעות שלכם, והחליטו כמה טעויות בירוק ובאדום אתם מוכנים לקבל. בסף 0.52 לבדו, תשובת
511
+ ההונאה נכונה ב-91.3% מהמקרים בסך הכול וב-80.0% על 65 המקרים הקשים (בסף 0.50: 91.3% ו-80.0%).
512
 
513
  המודל זול מספיק כדי להריץ אותו על כל הודעה. האדם (או מודל השפה) רואה רק את החלק הצהוב. **אל תשתמשו בו כקו הגנה
514
  יחיד בהחלטות שיכו��ות לפגוע במישהו.**
 
519
 
520
  1. **ללמוד לקרוא.** HalleluBERT-large אומן קודם למצוא את התשובה לשאלה בתוך קטע, על 27,085 שאלות אימון של HeQ
521
  (CC BY 4.0). קטעים שחפפו לקטע מבחן הוסרו.
522
+ 2. **ללמוד להחליט.** מעליו הונח ראש החלטות של laya, וכל המודל אומן על 106,723 פריטים (102,173 לאימון,
523
+ ו-4,550 הופרדו מראש כדי לבחור את הטוב מבין 2 מעברים ולכייל את הטמפרטורות).
524
 
525
  | מקור | פריטים | רישיון | איך נוצר |
526
  |---|---|---|---|
 
529
  | סינתטי: טענות כן/לא על הודעה | 8,750 | הפלט של המורה שייך לנו (DeepSeek, MIT; Gemma, Apache-2.0) | נכתב בידי DeepSeek V4.1 Flash, סומן בנפרד בידי שני המודלים |
530
  | סינתטי: דחיפות, 5 רמות | 3,500 | הפלט של המורה שייך לנו (DeepSeek, MIT; Gemma, Apache-2.0) | נכתב בידי DeepSeek V4.1 Flash, סומן בנפרד בידי שני המודלים |
531
  | HeQ: האם התשובה המוצעת נתמכת (כן/לא) | 6,000 | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
532
+ | HeQ: תשובה סבירה לשאלה שאין לה תשובה | 9,750 (מתוכם 4,750 עותקים חוזרים, חדש ב-1.1) | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
533
  | HeQ: קריאה, 4 אפשרויות | 5,000 | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
534
  | MASSIVE he-IL: כוונת פקודה קולית | 7,000 | CC BY 4.0 | תוויות הזהב של המאגר, מפיצול האימון בלבד |
535
+ | חדש ב-1.1: הונאה או לא, הונאות מוסוות והודעות אמיתיות שנראות חשודות | 6,000 | פלט מודלים, שייך לנו (DeepSeek, MIT; Gemma, Apache-2.0) | נכתב בידי DeepSeek V4.1 Flash לפי תרחישים שנכתבו עם GPT. נשמר רק אם שני המסמנים הסכימו עם הכותב |
536
+ | חדש ב-1.1: סוג ההודעה של אותן הודעות | 5,374 | פלט מודלים, שייך לנו | הסוג ששני המסמנים הסכימו עליו |
537
+ | חדש ב-1.1: עותקים של פריטים קיימים עם השאלה בניסוח אחר | 21,199 | כמו הפריט המקורי. הניסוחים נכתבו עם GPT | השאלה או האפשרויות באחד מ-376 ניסוחים חלופיים שנכתבו עם GPT. התווית לקוחה מהפריט המקורי |
538
+ | חדש ב-1.1: קריאה, 4 אפשרויות ("איזו מהבאות לא", תשובה במילים אחרות, כמה משפטים) | 6,825 | קטעים: FineWeb-2, ODC-By 1.0. שאלות: פלט מודלים, שייך לנו | נכתב בידי DeepSeek V4.1 Flash ונבדק בידי Gemma 4 31B עם הקטע ושוב בלי הקטע. נזרק אם אפשר היה לענות בלי הקטע |
539
+ | חדש ב-1.1: נושא של קטע, 7 אפשרויות | 4,000 | קטעים: FineWeb-2, ODC-By 1.0. תוויות: פלט מודלים | סומן בידי DeepSeek V4.1 Flash ו-Gemma 4 31B |
540
+ | חדש ב-1.1: האם השולח לקוח משלם קיים (כן/לא) | 575 | פלט מודלים, שייך לנו. ניסוחי השאלה נכתבו עם GPT | פניות תמיכה שנכתבו בידי DeepSeek V4.1 Flash ונבדקו בידי Gemma 4 31B |
541
 
542
  - **הודעות סינתטיות (35,000 פריטים).** DeepSeek V4.1 Flash (MIT) כתב הודעות SMS, וואטסאפ ומייל בסגנון ישראלי
543
  לפי תוכנית (התווית המתוכננת, נושא, משלב, מספרי טלפון וקישורים מזויפים ומגוונים). אחר כך DeepSeek ו-Gemma 4 31B
544
  (Apache-2.0) סימנו כל הודעה, כל אחד לבד. הודעה נשמרה רק אם שניהם הסכימו. הם הסכימו על 94% מההודעות,
545
  ונשמרו 93.7% מתוך 37,429 ההודעות שנכתבו. שניהם רצו דרך DeepInfra (דרך OpenRouter), בלי שמירת נתונים
546
  ובלי מצב "חשיבה". הנתונים הסינתטיים לא מפורסמים.
547
+ - **חדש בגרסה 1.1.** 6,825 שאלות קריאה על קטעים מהרשת בעברית מתוך FineWeb-2 (ODC-By 1.0): "איזו מהבאות לא
548
+ נכונה או לא מוזכרת" (כל אחת עם שאלה חיובית צמודה על אותו קטע), תשובות שנאמרות במילים אחרות, ותשובות שדורשות כמה
549
+ משפטים. DeepSeek V4.1 Flash כתב אותן, ו-Gemma 4 31B בדק כל אחת פעמיים, עם הקטע ובלי הקטע. שאלה שאפשר היה לענות עליה בלי
550
+ הקטע נזרקה. 6,000 הודעות שקשה להבחין ביניהן (הונאות מוסוות, והודעות אמיתיות שנראות חשודות), שנכתבו בידי
551
+ DeepSeek ונשמרו רק אם שני המסמנים הסכימו זה עם זה וגם עם הכותב. 4,000 קטעים שסומנו לפי נושא, 575 פניות
552
+ תמיכה לשאלת הלקוח המשלם, ו-4,750 פריטי HeQ חוזרים, כדי שהיכולות הקודמות לא יישכחו.
553
+ - **נכתב עם GPT.** חלק מנתוני האימון נכתב עם GPT של OpenAI, דרך מנוי ChatGPT שלנו: 376 ניסוחים חלופיים של השאלות ו-34 סטים חלופיים של אפשרויות תשובה, שמופיעים ב-30,488 פריטי אימון (כולל כל 575 הפריטים של שאלת הלקוח המשלם), ו-120 תרחישים קצרים שלפיהם DeepSeek V4.1 Flash כתב 6,000 הודעות. GPT לא כתב אף הודעה ואף תווית. בסך הכול 33,148 מתוך 106,723 פריטי האימון (31%) משתמשים בטקסט שנכתב עם GPT. הפלט של GPT כפוף לתנאי השימוש של OpenAI, לא לרישיון פתוח.
554
  - **נתונים פתוחים.** HeQ v1.1 (CC BY 4.0. בערך חצי מהשאלות שלו על כתבות של Geektime, ומחברי HeQ משתפים אותם באותו רישיון) ו-MASSIVE
555
+ he-IL (CC BY 4.0), רק מפיצולי האימון. קטעים בעברית מ-FineWeb-2 (ODC-By 1.0) לשאלות הקריאה והנושא החדשות.
556
  - **בלי דליפה מהמבחנים.** כל פריט אימון הושווה לכל שאלת מבחן. כל מה שחולק רצף של 8 מילים עם טקסט מבחן נזרק, וגם
557
+ פקודות MASSIVE שזהות לפקודת מבחן. הפריטים החדשים נבדקו בכללים מחמירים יותר: כל קטע חדש מול כל טקסט מבחן (כל רצף משותף
558
+ של 6 מילים), וכל שאלה, אפשרות וניסוח חדשים מול כל שאלת מבחן וכל ניסוח חלופי של שאלת מבחן (התאמה מדויקת ודמיון תווים).
559
+ - **מה לא שימש:** שום פלט של צ'אטבוט מסחרי סגור אחר, שום מודל של DICTA, שום נתונים לא מסחריים או ברישיון "שיתוף זהה".
560
+ GPT, מודל מסחרי סגור, שימש רק כמתואר למעלה.
561
  - **גודל:** המקודד 357.1 מיליון פרמטרים (HalleluBERT-large, MIT, אומן מחדש). ראש ההחלטות 26.5 מיליון פרמטרים,
562
  אומן מאפס.
563
 
 
575
  הסתייגויות שמשנות כמה לסמוך על המספרים:
576
  - **מבחן הספאם והעסקים נכתב בידי מודל AI ונבדק בידי מודל AI, לא בידי אדם.** תיבות דואר אמיתיות ייראו אחרת. הוא ננעל
577
  אחרי הבדיקה הזו (4 תוויות שונו, 2 הודעות הוסרו).
578
+ - **שלוש ריצות אימון, עם שלושה זרעים אקראיים, וזו אחת מהן.** היא נבחרה לפי פריטי אימון שהופרדו מראש (95.8% מול 94.9% ו-95.3%), לא לפי המבחנים. במבחנים הגדולים שלוש הריצות קרובות: הונאה או לא 91.3% כאן מול 91.3% ו-90.9%, נושא ידיעה 80.4% מול 80.9% ו-82.3%, הבנת הנקרא 62.7% מול 63.1% ו-63.4%. הריצה הזו וכל אחת מהשתיים האחרות נותנות אותה תשובה על 90.6% עד 91.0% מכל שאלות המבחן. במבחנים של 30 פניות ההבדלים גדולים יותר: דחיפות הפנייה 80.0% כאן מול 66.7% ו-66.7%.
579
  - **תוויות האימון באות משני מודלי AI.** איפה ששניהם טועים באותו אופן, ניצוץ למד את הטעות שלהם.
580
  - התשובות השגויות של HeQ במבחן נבחרו בקוד, ולא נבדקו בידי אדם.
581
 
582
  ### מגבלות
583
 
584
+ - **הבנת הנקרא של קטעים ארוכים השתפרה, אבל עדיין מוגבלת.** Belebele: 62.7%, כשניחוש עיוור מקבל 25%, ועדיין פחות ממודל
585
+ laya האחר הטוב ביותר במבחן הזה (ראו [מבחנים](#מבחנים)). כשהתשובה הנכונה כתובה בקטע מילה במילה הוא מקבל 79% (252 שאלות).
586
+ כשהתשובה נאמרת במילים אחרות הוא מקבל 56% (648 שאלות). בשאלות "איזו מהבאות לא" 52% (158 שאלות).
587
  אל תשאלו אותו אם מסמך ארוך תומך בטענה.
588
+ - **בדיקה אם קטע תומך בתשובה (HeQ) עובדת.** 94.8% עם הקטע. כשמוחקים את הקטע זה יורד ל-50.3%, הטלת מטבע. כלומר בשאלות מהסוג הזה הוא באמת קורא את הקטע.
589
  - **מספרים, תאריכים, סכומים וכללים**: לא אומן עליהם ולא נמדד. חשבו אותם בקוד והעבירו את התוצאה.
590
+ - **המקרים הקשים עדיין נקודת התורפה**: הונאות שנכתבו כדי להיראות לגיטימיות ("ספק" שמחליף פרטי חשבון בנק, "המנכ"ל"
591
+ שמבקש העברה), והודעות אמיתיות שנראות כמו הונאה (התראה אמיתית מהבנק עם קישור, קוד אימות אמיתי). על 65 המקרים הקשים
592
+ שאלת ההונאה צודקת ב-80.0% מהמקרים (תשובה קבועה "לא הונאה" הייתה מקבלת שם 70.8%), עם AUC 0.88. בסף שנבחר הוא
593
+ עדיין מפספס 5 מתוך 19 הונאות שנכתבו כדי להיראות לגיטימיות, ומתריע על 8 מתוך 46 הודעות אמיתיות שנראות כמו הונאה.
594
+ - **דחיפות היא עניין סובייקטיבי, והתשובה עליה תלויה בניסוח.** אפילו שני מודלי המורה הסכימו עם הדחיפות המתוכננת רק בכ-62
595
+ עד 64% מהמקרים. כששואלים את שאלת הדחיפות במילים אחרות, התשובה משתנה ב-43% מתוך 30 פניות המבחן.
596
+ - **המבחנים הפנימיים וחלק גדול מנתוני האימון נכתבו בידי מודלי AI, לא בידי אנשים.** זה כולל את מבחן הספאם והעסקים, את
597
+ מבחן פניות התמיכה ואת שאלות הקריאה החדשות. הודעות אמיתיות ייראו אחרת.
598
+ - **מבחני פניות התמיכה קטנים**: 30 פניות לכל שאלה, כך שפנייה אחת מזיזה ציון ב-3.3 נקודות.
599
  - **ציניות ואירוניה** כנראה נקראות מילולית. לא נמדד.
600
  - **512 טוקנים** (בערך 300 עד 400 מילים בעברית) לשאלה. הודעה ארוכה יותר נחתכת מהסוף בלי אזהרה.
601
  - **עברית בלבד.** לא אומן ולא נבדק על אנגלית או ערבית.
 
612
  הלאומית (NNLP-IL). כולל קטעים מ-Geektime.
613
  - [MASSIVE](https://huggingface.co/datasets/AmazonScience/massive): CC BY 4.0, אמזון (FitzGerald ואחרים, 2022).
614
  - **DeepSeek V4.1 Flash** (MIT) ו-**Gemma 4 31B** (Apache-2.0), דרך DeepInfra, ככותב הנתונים וכמסמנים.
615
+ - [FineWeb-2](https://huggingface.co/datasets/HuggingFaceFW/fineweb-2) (עברית): ODC-By 1.0, של Hugging Face. הקטעים של שאלות
616
+ הקריאה והנושא החדשות.
617
+ - **GPT של OpenAI**, דרך מנוי ChatGPT (תנאי השימוש של OpenAI): ניסוחי שאלות ותרחישים, כמתואר בפרק נתוני האימון.
618
  - [ggmlc](https://github.com/monatis/ggmlc) לקובצי ה-GGUF.
619
  - Belebele ו-SIB-200 (CC BY-SA 4.0) שימשו רק לבדיקה, אף פעם לא לאימון.
620
 
assets/bars_en.png CHANGED

Git LFS Details

  • SHA256: 6518d928c4fe18c554606f51d2c317a19f5d6be983814bac722e99d0c1187675
  • Pointer size: 131 Bytes
  • Size of remote file: 113 kB

Git LFS Details

  • SHA256: 2352043ce0194ed9d1b3bd2979a387bd989331aa3fd3ef4056dcc0feab2f59a2
  • Pointer size: 131 Bytes
  • Size of remote file: 112 kB
assets/bars_he.png CHANGED

Git LFS Details

  • SHA256: 27af5ef62e0a23ba92b156894a782d33c8ef924387b8094274135caf4d3d96f2
  • Pointer size: 130 Bytes
  • Size of remote file: 85.7 kB

Git LFS Details

  • SHA256: de7b8cea8285ac3bec810277e8357becbb4cb6431c92f22b6edbacebf118d6cf
  • Pointer size: 130 Bytes
  • Size of remote file: 84.7 kB
assets/calibration_en.png CHANGED

Git LFS Details

  • SHA256: 6aeef5b5cc9ae5623a412d5ee3131de8eb76a5261093600f772f7d05bcb5e1ee
  • Pointer size: 131 Bytes
  • Size of remote file: 112 kB

Git LFS Details

  • SHA256: 0f13b39b3b57c8e30e52d20b64a6909c6228a97bf94142cdc6967087991fa497
  • Pointer size: 131 Bytes
  • Size of remote file: 109 kB
assets/calibration_he.png CHANGED

Git LFS Details

  • SHA256: 0bbb1bc620a7b62b57db2f2e921b12500a028feed90aed974b4ef32b1bfb08ca
  • Pointer size: 130 Bytes
  • Size of remote file: 90.3 kB

Git LFS Details

  • SHA256: bce20a494d210414b792a388bbd2ee0e23261097199805241d15c912a8358dd7
  • Pointer size: 130 Bytes
  • Size of remote file: 88.1 kB
assets/radar_en.png CHANGED

Git LFS Details

  • SHA256: 5453248b105004b015a6bd11786147706bc80ced3672127f19bee75e087bafa3
  • Pointer size: 131 Bytes
  • Size of remote file: 246 kB

Git LFS Details

  • SHA256: a2424988ab51e8e1029025d37ff2748e3e6295cd3bbe95a3f681ff2d2e141706
  • Pointer size: 131 Bytes
  • Size of remote file: 247 kB
assets/radar_he.png CHANGED

Git LFS Details

  • SHA256: 59e62b753ab75bb3b65d41a6fee1efc429289b355d2f36e780478642634a75b7
  • Pointer size: 131 Bytes
  • Size of remote file: 231 kB

Git LFS Details

  • SHA256: a9816bd7bd293cad1a1cf353fddfd005510dcb5ab7fe7ca07286b6fa52fb9760
  • Pointer size: 131 Bytes
  • Size of remote file: 232 kB
assets/ramzor_en.svg CHANGED
assets/ramzor_he.svg CHANGED
assets/speed_en.png CHANGED

Git LFS Details

  • SHA256: 43e7791c5a8412e4a7352a8a2efaa45386463cdffb738922424e5246e543c1ec
  • Pointer size: 130 Bytes
  • Size of remote file: 84.2 kB

Git LFS Details

  • SHA256: 664333364d9612a637a9fae54208a0073d6eb717cb1176a3f6eefc67a8b343fb
  • Pointer size: 130 Bytes
  • Size of remote file: 89.3 kB
assets/speed_he.png CHANGED
assets/tiles_en.png CHANGED
assets/tiles_he.png CHANGED
calibration.json CHANGED
@@ -1,47 +1,58 @@
1
  {
 
2
  "temperatures_per_question_type": {
3
- "choice": 1.103,
4
- "score": 1.1095,
5
- "noul": 1.1651
6
  },
7
  "temperature_fit_items": {
8
- "choice": 1738,
9
- "score": 175,
10
- "noul": 988
11
  },
12
  "note": "The temperatures are already applied by laya (rl_agent_config.json 'temperature') and baked into the GGUF files. They were fitted on held-out training items, never on the test sets.",
13
  "scam_threshold": {
14
  "question": "noul, 'is this message a scam'",
15
- "threshold": 0.5169,
16
- "chosen_on": "700 held-out training messages, never the test",
17
- "held_out_acc_at_threshold": 0.8643,
18
- "test_acc_at_0.5": 0.8289,
19
- "test_acc_at_threshold": 0.8221,
20
- "test_hard_acc_at_0.5": 0.6462,
21
- "test_hard_acc_at_threshold": 0.6462,
22
- "test_auc": 0.8848
 
 
 
 
 
 
 
 
 
 
23
  },
24
  "ramzor_example_thresholds": {
25
  "green_below": 0.35,
26
  "red_from": 0.52,
27
  "zones_on_test": {
28
  "g": {
29
- "n": 183,
30
- "share": 0.6140939597315436,
31
- "scam": 16,
32
- "legit": 167
33
  },
34
  "y": {
35
- "n": 48,
36
- "share": 0.1610738255033557,
37
- "scam": 21,
38
- "legit": 27
39
  },
40
  "r": {
41
- "n": 67,
42
- "share": 0.22483221476510068,
43
- "scam": 51,
44
- "legit": 16
45
  }
46
  }
47
  }
 
1
  {
2
+ "version": "1.1",
3
  "temperatures_per_question_type": {
4
+ "choice": 1.1032,
5
+ "score": 1.1106,
6
+ "noul": 1.196
7
  },
8
  "temperature_fit_items": {
9
+ "choice": 2446,
10
+ "score": 261,
11
+ "noul": 1843
12
  },
13
  "note": "The temperatures are already applied by laya (rl_agent_config.json 'temperature') and baked into the GGUF files. They were fitted on held-out training items, never on the test sets.",
14
  "scam_threshold": {
15
  "question": "noul, 'is this message a scam'",
16
+ "threshold": 0.5151,
17
+ "chosen_on": "1000 held-out training messages, never the test",
18
+ "held_out_acc_at_threshold": 0.98,
19
+ "held_out_pools": {
20
+ "held-out hard scam and legitimate messages (new data)": {
21
+ "n": 300,
22
+ "acc_at_threshold": 0.9967
23
+ },
24
+ "held-out spam messages (earlier data)": {
25
+ "n": 700,
26
+ "acc_at_threshold": 0.9729
27
+ }
28
+ },
29
+ "test_acc_at_0.5": 0.9128,
30
+ "test_acc_at_threshold": 0.9128,
31
+ "test_hard_acc_at_0.5": 0.8,
32
+ "test_hard_acc_at_threshold": 0.8,
33
+ "test_auc": 0.9761
34
  },
35
  "ramzor_example_thresholds": {
36
  "green_below": 0.35,
37
  "red_from": 0.52,
38
  "zones_on_test": {
39
  "g": {
40
+ "n": 207,
41
+ "share": 0.6946308724832215,
42
+ "scam": 11,
43
+ "legit": 196
44
  },
45
  "y": {
46
+ "n": 5,
47
+ "share": 0.016778523489932886,
48
+ "scam": 3,
49
+ "legit": 2
50
  },
51
  "r": {
52
+ "n": 86,
53
+ "share": 0.28859060402684567,
54
+ "scam": 74,
55
+ "legit": 12
56
  }
57
  }
58
  }
eval_results.json CHANGED
@@ -1,5 +1,6 @@
1
  {
2
  "model": "BrainboxAI/nitzotz",
 
3
  "eval_set": "8 frozen suites, 3990 questions (checksums in the repo's eval/manifest.json)",
4
  "models": {
5
  "nz": "BrainboxAI/nitzotz",
@@ -17,17 +18,17 @@
17
  "n": 298,
18
  "chance": 0.5,
19
  "acc": {
20
- "nz": 0.8255,
21
  "roeig": 0.3221,
22
  "laya_ml": 0.5034
23
  },
24
  "brier": {
25
- "nz": 0.2629,
26
  "roeig": 0.7604,
27
  "laya_ml": 0.8042
28
  },
29
  "ece": {
30
- "nz": 0.0993,
31
  "roeig": 0.3802,
32
  "laya_ml": 0.38
33
  },
@@ -38,14 +39,14 @@
38
  },
39
  "vs_nitzotz": {
40
  "roeig": {
41
- "nz_only": 177,
42
- "other_only": 27,
43
- "p": 3.1836858702039475e-28
44
  },
45
  "laya_ml": {
46
- "nz_only": 129,
47
- "other_only": 33,
48
- "p": 1.2998168966363252e-14
49
  }
50
  }
51
  },
@@ -54,17 +55,17 @@
54
  "n": 65,
55
  "chance": 0.5,
56
  "acc": {
57
- "nz": 0.6308,
58
  "roeig": 0.3231,
59
  "laya_ml": 0.3538
60
  },
61
  "brier": {
62
- "nz": 0.4394,
63
  "roeig": 0.7076,
64
  "laya_ml": 1.1057
65
  },
66
  "ece": {
67
- "nz": 0.056,
68
  "roeig": 0.3391,
69
  "laya_ml": 0.5564
70
  },
@@ -75,14 +76,14 @@
75
  },
76
  "vs_nitzotz": {
77
  "roeig": {
78
- "nz_only": 27,
79
- "other_only": 7,
80
- "p": 0.0008213953115046024
81
  },
82
  "laya_ml": {
83
- "nz_only": 30,
84
- "other_only": 12,
85
- "p": 0.007915897334896727
86
  }
87
  }
88
  },
@@ -91,17 +92,17 @@
91
  "n": 298,
92
  "chance": 0.1667,
93
  "acc": {
94
- "nz": 0.755,
95
  "roeig": 0.5268,
96
  "laya_ml": 0.2081
97
  },
98
  "brier": {
99
- "nz": 0.3721,
100
  "roeig": 0.6489,
101
  "laya_ml": 1.0746
102
  },
103
  "ece": {
104
- "nz": 0.0643,
105
  "roeig": 0.1043,
106
  "laya_ml": 0.4131
107
  },
@@ -112,14 +113,14 @@
112
  },
113
  "vs_nitzotz": {
114
  "roeig": {
115
- "nz_only": 100,
116
- "other_only": 32,
117
- "p": 2.428469657769691e-09
118
  },
119
  "laya_ml": {
120
  "nz_only": 174,
121
- "other_only": 11,
122
- "p": 6.991886709878067e-39
123
  }
124
  }
125
  },
@@ -128,17 +129,17 @@
128
  "n": 65,
129
  "chance": 0.1667,
130
  "acc": {
131
- "nz": 0.5385,
132
  "roeig": 0.4462,
133
  "laya_ml": 0.2462
134
  },
135
  "brier": {
136
- "nz": 0.6411,
137
  "roeig": 0.7315,
138
  "laya_ml": 1.1094
139
  },
140
  "ece": {
141
- "nz": 0.1768,
142
  "roeig": 0.1877,
143
  "laya_ml": 0.4109
144
  },
@@ -149,14 +150,14 @@
149
  },
150
  "vs_nitzotz": {
151
  "roeig": {
152
- "nz_only": 17,
153
- "other_only": 11,
154
- "p": 0.34492845088243484
155
  },
156
  "laya_ml": {
157
- "nz_only": 24,
158
- "other_only": 5,
159
- "p": 0.0005461126565933228
160
  }
161
  }
162
  },
@@ -165,17 +166,17 @@
165
  "n": 30,
166
  "chance": 0.2,
167
  "acc": {
168
- "nz": 0.8333,
169
  "roeig": 0.8,
170
  "laya_ml": 0.5667
171
  },
172
  "brier": {
173
- "nz": 0.2289,
174
  "roeig": 0.3191,
175
  "laya_ml": 0.6667
176
  },
177
  "ece": {
178
- "nz": 0.1797,
179
  "roeig": 0.1321,
180
  "laya_ml": 0.2772
181
  },
@@ -187,13 +188,13 @@
187
  "vs_nitzotz": {
188
  "roeig": {
189
  "nz_only": 4,
190
- "other_only": 3,
191
- "p": 1.0
192
  },
193
  "laya_ml": {
194
  "nz_only": 11,
195
- "other_only": 3,
196
- "p": 0.057373046875
197
  }
198
  }
199
  },
@@ -202,17 +203,17 @@
202
  "n": 30,
203
  "chance": 0.2,
204
  "acc": {
205
- "nz": 0.6,
206
  "roeig": 0.3667,
207
  "laya_ml": 0.3333
208
  },
209
  "brier": {
210
- "nz": 0.5225,
211
  "roeig": 0.708,
212
  "laya_ml": 0.7501
213
  },
214
  "ece": {
215
- "nz": 0.2373,
216
  "roeig": 0.0322,
217
  "laya_ml": 0.2167
218
  },
@@ -223,14 +224,14 @@
223
  },
224
  "vs_nitzotz": {
225
  "roeig": {
226
- "nz_only": 13,
227
- "other_only": 6,
228
- "p": 0.1670684814453125
229
  },
230
  "laya_ml": {
231
- "nz_only": 14,
232
- "other_only": 6,
233
- "p": 0.11531829833984375
234
  }
235
  }
236
  },
@@ -239,17 +240,17 @@
239
  "n": 30,
240
  "chance": 0.5,
241
  "acc": {
242
- "nz": 0.6333,
243
  "roeig": 0.5667,
244
  "laya_ml": 0.5
245
  },
246
  "brier": {
247
- "nz": 0.5196,
248
  "roeig": 0.4338,
249
  "laya_ml": 0.8183
250
  },
251
  "ece": {
252
- "nz": 0.2253,
253
  "roeig": 0.2362,
254
  "laya_ml": 0.4284
255
  },
@@ -260,14 +261,14 @@
260
  },
261
  "vs_nitzotz": {
262
  "roeig": {
263
- "nz_only": 2,
264
  "other_only": 0,
265
- "p": 0.5
266
  },
267
  "laya_ml": {
268
  "nz_only": 14,
269
- "other_only": 10,
270
- "p": 0.5412561893463135
271
  }
272
  }
273
  },
@@ -276,35 +277,35 @@
276
  "n": 500,
277
  "chance": 0.05,
278
  "acc": {
279
- "nz": 0.888,
280
  "roeig": 0.726,
281
  "laya_ml": 0.474
282
  },
283
  "brier": {
284
- "nz": 0.1759,
285
  "roeig": 0.3801,
286
  "laya_ml": 0.7338
287
  },
288
  "ece": {
289
- "nz": 0.0529,
290
  "roeig": 0.0395,
291
  "laya_ml": 0.1661
292
  },
293
  "empty_acc": {
294
- "nz": 0.064,
295
  "roeig": 0.052,
296
  "laya_ml": 0.044
297
  },
298
  "vs_nitzotz": {
299
  "roeig": {
300
- "nz_only": 93,
301
- "other_only": 12,
302
- "p": 1.100926641994889e-16
303
  },
304
  "laya_ml": {
305
- "nz_only": 215,
306
- "other_only": 8,
307
- "p": 2.0578594884620216e-53
308
  }
309
  }
310
  },
@@ -313,35 +314,35 @@
313
  "n": 500,
314
  "chance": 0.25,
315
  "acc": {
316
- "nz": 0.962,
317
  "roeig": 0.908,
318
  "laya_ml": 0.694
319
  },
320
  "brier": {
321
- "nz": 0.0561,
322
  "roeig": 0.1369,
323
  "laya_ml": 0.3987
324
  },
325
  "ece": {
326
- "nz": 0.0409,
327
  "roeig": 0.0393,
328
  "laya_ml": 0.0468
329
  },
330
  "empty_acc": {
331
- "nz": 0.238,
332
  "roeig": 0.242,
333
  "laya_ml": 0.256
334
  },
335
  "vs_nitzotz": {
336
  "roeig": {
337
- "nz_only": 33,
338
  "other_only": 6,
339
- "p": 1.429926123819314e-05
340
  },
341
  "laya_ml": {
342
- "nz_only": 140,
343
- "other_only": 6,
344
- "p": 2.8378191731534526e-34
345
  }
346
  }
347
  },
@@ -350,17 +351,17 @@
350
  "n": 204,
351
  "chance": 0.1429,
352
  "acc": {
353
- "nz": 0.7941,
354
  "roeig": 0.8235,
355
  "laya_ml": 0.6618
356
  },
357
  "brier": {
358
- "nz": 0.3091,
359
  "roeig": 0.285,
360
  "laya_ml": 0.4918
361
  },
362
  "ece": {
363
- "nz": 0.0877,
364
  "roeig": 0.0751,
365
  "laya_ml": 0.1784
366
  },
@@ -371,14 +372,14 @@
371
  },
372
  "vs_nitzotz": {
373
  "roeig": {
374
- "nz_only": 16,
375
- "other_only": 22,
376
- "p": 0.417692190836533
377
  },
378
  "laya_ml": {
379
- "nz_only": 42,
380
- "other_only": 15,
381
- "p": 0.00046000500864878946
382
  }
383
  }
384
  },
@@ -387,35 +388,35 @@
387
  "n": 600,
388
  "chance": 0.5,
389
  "acc": {
390
- "nz": 0.9383,
391
  "roeig": 0.9417,
392
  "laya_ml": 0.4883
393
  },
394
  "brier": {
395
- "nz": 0.1003,
396
  "roeig": 0.0926,
397
  "laya_ml": 0.8274
398
  },
399
  "ece": {
400
- "nz": 0.0519,
401
  "roeig": 0.0178,
402
  "laya_ml": 0.3946
403
  },
404
  "empty_acc": {
405
- "nz": 0.5,
406
  "roeig": 0.8,
407
  "laya_ml": 0.59
408
  },
409
  "vs_nitzotz": {
410
  "roeig": {
411
- "nz_only": 32,
412
- "other_only": 34,
413
- "p": 0.9021585000966993
414
  },
415
  "laya_ml": {
416
- "nz_only": 297,
417
- "other_only": 27,
418
- "p": 1.181012945982764e-58
419
  }
420
  }
421
  },
@@ -424,35 +425,35 @@
424
  "n": 600,
425
  "chance": 0.5,
426
  "acc": {
427
- "nz": 0.91,
428
  "roeig": 0.53,
429
  "laya_ml": 0.5367
430
  },
431
  "brier": {
432
- "nz": 0.1412,
433
  "roeig": 0.856,
434
  "laya_ml": 0.7348
435
  },
436
  "ece": {
437
- "nz": 0.0402,
438
  "roeig": 0.4336,
439
  "laya_ml": 0.3421
440
  },
441
  "empty_acc": {
442
- "nz": 0.5,
443
  "roeig": 0.5033,
444
  "laya_ml": 0.5167
445
  },
446
  "vs_nitzotz": {
447
  "roeig": {
448
- "nz_only": 250,
449
- "other_only": 22,
450
- "p": 3.9022177864527475e-50
451
  },
452
  "laya_ml": {
453
- "nz_only": 248,
454
- "other_only": 24,
455
- "p": 4.4428671970733176e-48
456
  }
457
  }
458
  },
@@ -461,35 +462,35 @@
461
  "n": 900,
462
  "chance": 0.25,
463
  "acc": {
464
- "nz": 0.5267,
465
  "roeig": 0.7544,
466
  "laya_ml": 0.3144
467
  },
468
  "brier": {
469
- "nz": 0.6379,
470
  "roeig": 0.3442,
471
  "laya_ml": 0.8341
472
  },
473
  "ece": {
474
- "nz": 0.205,
475
  "roeig": 0.0324,
476
  "laya_ml": 0.2307
477
  },
478
  "empty_acc": {
479
- "nz": 0.3089,
480
  "roeig": 0.3189,
481
  "laya_ml": 0.2844
482
  },
483
  "vs_nitzotz": {
484
  "roeig": {
485
- "nz_only": 56,
486
- "other_only": 261,
487
- "p": 8.723952167222602e-33
488
  },
489
  "laya_ml": {
490
- "nz_only": 304,
491
- "other_only": 113,
492
- "p": 2.6224194993355025e-21
493
  }
494
  }
495
  }
@@ -497,33 +498,33 @@
497
  "significance": "paired exact McNemar against Nitzotz on the same questions",
498
  "latency_ms": {
499
  "q8": {
500
- "median": 48.7,
501
- "p90": 78.5,
502
  "n": 50
503
  },
504
  "f16": {
505
- "median": 51.6,
506
- "p90": 76.8,
507
  "n": 50
508
  },
509
  "py": {
510
- "median": 54.5,
511
- "p90": 100.7,
512
  "n": 50
513
  },
514
  "q8_cpu": {
515
- "median": 335.0,
516
- "p90": 718.7,
517
  "n": 50
518
  },
519
  "f16_cpu": {
520
- "median": 462.6,
521
- "p90": 954.0,
522
  "n": 50
523
  },
524
  "py_cpu": {
525
- "median": 387.3,
526
- "p90": 838.2,
527
  "n": 50
528
  }
529
  },
@@ -532,150 +533,150 @@
532
  "short": {
533
  "item": "massive_he_4-0075",
534
  "input_tokens": 38,
535
- "median_ms": 35.2,
536
- "p90_ms": 35.8,
537
- "min_ms": 34.3
538
  },
539
  "long": {
540
  "item": "heq_unanswerable-0522",
541
  "input_tokens": 430,
542
- "median_ms": 135.1,
543
- "p90_ms": 141.8,
544
- "min_ms": 129.4
545
  }
546
  },
547
  "f16": {
548
  "short": {
549
  "item": "massive_he_4-0075",
550
  "input_tokens": 38,
551
- "median_ms": 40.6,
552
- "p90_ms": 41.9,
553
- "min_ms": 39.4
554
  },
555
  "long": {
556
  "item": "heq_unanswerable-0522",
557
  "input_tokens": 430,
558
- "median_ms": 140.9,
559
- "p90_ms": 147.5,
560
- "min_ms": 130.8
561
  }
562
  },
563
  "py": {
564
  "short": {
565
  "item": "massive_he_4-0075",
566
  "input_tokens": 38,
567
- "median_ms": 44.3,
568
- "p90_ms": 48.2,
569
- "min_ms": 38.6
570
  },
571
  "long": {
572
  "item": "heq_unanswerable-0522",
573
  "input_tokens": 430,
574
- "median_ms": 176.7,
575
- "p90_ms": 180.7,
576
- "min_ms": 146.5
577
  }
578
  },
579
  "q8_cpu": {
580
  "short": {
581
  "item": "massive_he_4-0075",
582
  "input_tokens": 38,
583
- "median_ms": 177.4,
584
- "p90_ms": 194.5,
585
- "min_ms": 158.9
586
  },
587
  "long": {
588
  "item": "heq_unanswerable-0522",
589
  "input_tokens": 430,
590
- "median_ms": 1232.9,
591
- "p90_ms": 1278.8,
592
- "min_ms": 1165.9
593
  }
594
  },
595
  "py_cpu": {
596
  "short": {
597
  "item": "massive_he_4-0075",
598
  "input_tokens": 38,
599
- "median_ms": 130.5,
600
- "p90_ms": 140.7,
601
- "min_ms": 125.5
602
  },
603
  "long": {
604
  "item": "heq_unanswerable-0522",
605
  "input_tokens": 430,
606
- "median_ms": 1259.8,
607
- "p90_ms": 1365.2,
608
- "min_ms": 1153.4
609
  }
610
  }
611
  },
612
  "latency_machine": "Intel Core Ultra 9 285H laptop, built-in Arc 140T GPU, Windows 11",
613
  "gguf_parity_50": {
614
  "q8": {
615
- "max_abs_diff": 0.0079,
616
- "mean_abs_diff": 0.001364,
617
  "argmax_agree": "50/50"
618
  },
619
  "f16": {
620
- "max_abs_diff": 0.0026,
621
  "mean_abs_diff": 0.00032,
622
  "argmax_agree": "50/50"
623
  },
624
  "q8_cpu": {
625
- "max_abs_diff": 0.0094,
626
- "mean_abs_diff": 0.001866,
627
  "argmax_agree": "50/50"
628
  },
629
  "f16_cpu": {
630
- "max_abs_diff": 0.0017,
631
- "mean_abs_diff": 0.000204,
632
  "argmax_agree": "50/50"
633
  }
634
  },
635
  "gguf_parity_spam_596": {
636
  "q8": {
637
- "max_abs_diff": 0.0152,
638
- "mean_abs_diff": 0.002173,
639
- "argmax_agree": "593/596",
640
- "accuracy_vs_gold": 0.7886
641
  },
642
  "f16": {
643
  "max_abs_diff": 0.0023,
644
- "mean_abs_diff": 0.000322,
645
- "argmax_agree": "595/596",
646
- "accuracy_vs_gold": 0.7919
647
  },
648
  "py": {
649
  "max_abs_diff": 0.0001,
650
  "mean_abs_diff": 0.0,
651
- "argmax_agree": "595/596",
652
- "accuracy_vs_gold": 0.7919
653
  },
654
  "q8_cpu": {
655
- "max_abs_diff": 0.0275,
656
- "mean_abs_diff": 0.003209,
657
- "argmax_agree": "590/596",
658
- "accuracy_vs_gold": 0.7836
659
  },
660
  "f16_cpu": {
661
- "max_abs_diff": 0.0014,
662
- "mean_abs_diff": 0.000268,
663
- "argmax_agree": "595/596",
664
- "accuracy_vs_gold": 0.7919
665
  },
666
  "py_cpu": {
667
  "max_abs_diff": 0.0,
668
  "mean_abs_diff": 0.0,
669
  "argmax_agree": "596/596",
670
- "accuracy_vs_gold": 0.7903
671
  }
672
  },
673
  "belebele_split": {
674
  "verbatim_n": 252,
675
  "reworded_n": 648,
676
  "nz": {
677
- "verbatim": 0.7182539682539683,
678
- "reworded": 0.4521604938271605
679
  },
680
  "roeig": {
681
  "verbatim": 0.8412698412698413,
@@ -688,6 +689,283 @@
688
  },
689
  "calibration_pooled": {
690
  "n": 3990,
691
- "ece_15bin": 0.042
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
692
  }
693
  }
 
1
  {
2
  "model": "BrainboxAI/nitzotz",
3
+ "version": "1.1",
4
  "eval_set": "8 frozen suites, 3990 questions (checksums in the repo's eval/manifest.json)",
5
  "models": {
6
  "nz": "BrainboxAI/nitzotz",
 
18
  "n": 298,
19
  "chance": 0.5,
20
  "acc": {
21
+ "nz": 0.9128,
22
  "roeig": 0.3221,
23
  "laya_ml": 0.5034
24
  },
25
  "brier": {
26
+ "nz": 0.126,
27
  "roeig": 0.7604,
28
  "laya_ml": 0.8042
29
  },
30
  "ece": {
31
+ "nz": 0.0548,
32
  "roeig": 0.3802,
33
  "laya_ml": 0.38
34
  },
 
39
  },
40
  "vs_nitzotz": {
41
  "roeig": {
42
+ "nz_only": 186,
43
+ "other_only": 10,
44
+ "p": 3.8398295923083015e-43
45
  },
46
  "laya_ml": {
47
+ "nz_only": 136,
48
+ "other_only": 14,
49
+ "p": 2.7927572561866964e-26
50
  }
51
  }
52
  },
 
55
  "n": 65,
56
  "chance": 0.5,
57
  "acc": {
58
+ "nz": 0.8,
59
  "roeig": 0.3231,
60
  "laya_ml": 0.3538
61
  },
62
  "brier": {
63
+ "nz": 0.2474,
64
  "roeig": 0.7076,
65
  "laya_ml": 1.1057
66
  },
67
  "ece": {
68
+ "nz": 0.0959,
69
  "roeig": 0.3391,
70
  "laya_ml": 0.5564
71
  },
 
76
  },
77
  "vs_nitzotz": {
78
  "roeig": {
79
+ "nz_only": 34,
80
+ "other_only": 3,
81
+ "p": 1.233129296451807e-07
82
  },
83
  "laya_ml": {
84
+ "nz_only": 34,
85
+ "other_only": 5,
86
+ "p": 2.4299079086631536e-06
87
  }
88
  }
89
  },
 
92
  "n": 298,
93
  "chance": 0.1667,
94
  "acc": {
95
+ "nz": 0.7617,
96
  "roeig": 0.5268,
97
  "laya_ml": 0.2081
98
  },
99
  "brier": {
100
+ "nz": 0.3177,
101
  "roeig": 0.6489,
102
  "laya_ml": 1.0746
103
  },
104
  "ece": {
105
+ "nz": 0.0872,
106
  "roeig": 0.1043,
107
  "laya_ml": 0.4131
108
  },
 
113
  },
114
  "vs_nitzotz": {
115
  "roeig": {
116
+ "nz_only": 104,
117
+ "other_only": 34,
118
+ "p": 1.9152268319067766e-09
119
  },
120
  "laya_ml": {
121
  "nz_only": 174,
122
+ "other_only": 9,
123
+ "p": 8.929600498958945e-41
124
  }
125
  }
126
  },
 
129
  "n": 65,
130
  "chance": 0.1667,
131
  "acc": {
132
+ "nz": 0.6308,
133
  "roeig": 0.4462,
134
  "laya_ml": 0.2462
135
  },
136
  "brier": {
137
+ "nz": 0.4714,
138
  "roeig": 0.7315,
139
  "laya_ml": 1.1094
140
  },
141
  "ece": {
142
+ "nz": 0.0653,
143
  "roeig": 0.1877,
144
  "laya_ml": 0.4109
145
  },
 
150
  },
151
  "vs_nitzotz": {
152
  "roeig": {
153
+ "nz_only": 22,
154
+ "other_only": 10,
155
+ "p": 0.050102459732443094
156
  },
157
  "laya_ml": {
158
+ "nz_only": 29,
159
+ "other_only": 4,
160
+ "p": 1.0928604751825333e-05
161
  }
162
  }
163
  },
 
166
  "n": 30,
167
  "chance": 0.2,
168
  "acc": {
169
+ "nz": 0.8667,
170
  "roeig": 0.8,
171
  "laya_ml": 0.5667
172
  },
173
  "brier": {
174
+ "nz": 0.2164,
175
  "roeig": 0.3191,
176
  "laya_ml": 0.6667
177
  },
178
  "ece": {
179
+ "nz": 0.1364,
180
  "roeig": 0.1321,
181
  "laya_ml": 0.2772
182
  },
 
188
  "vs_nitzotz": {
189
  "roeig": {
190
  "nz_only": 4,
191
+ "other_only": 2,
192
+ "p": 0.6875
193
  },
194
  "laya_ml": {
195
  "nz_only": 11,
196
+ "other_only": 2,
197
+ "p": 0.0224609375
198
  }
199
  }
200
  },
 
203
  "n": 30,
204
  "chance": 0.2,
205
  "acc": {
206
+ "nz": 0.8,
207
  "roeig": 0.3667,
208
  "laya_ml": 0.3333
209
  },
210
  "brier": {
211
+ "nz": 0.4576,
212
  "roeig": 0.708,
213
  "laya_ml": 0.7501
214
  },
215
  "ece": {
216
+ "nz": 0.3313,
217
  "roeig": 0.0322,
218
  "laya_ml": 0.2167
219
  },
 
224
  },
225
  "vs_nitzotz": {
226
  "roeig": {
227
+ "nz_only": 15,
228
+ "other_only": 2,
229
+ "p": 0.002349853515625
230
  },
231
  "laya_ml": {
232
+ "nz_only": 17,
233
+ "other_only": 3,
234
+ "p": 0.0025768280029296875
235
  }
236
  }
237
  },
 
240
  "n": 30,
241
  "chance": 0.5,
242
  "acc": {
243
+ "nz": 0.7667,
244
  "roeig": 0.5667,
245
  "laya_ml": 0.5
246
  },
247
  "brier": {
248
+ "nz": 0.4053,
249
  "roeig": 0.4338,
250
  "laya_ml": 0.8183
251
  },
252
  "ece": {
253
+ "nz": 0.2204,
254
  "roeig": 0.2362,
255
  "laya_ml": 0.4284
256
  },
 
261
  },
262
  "vs_nitzotz": {
263
  "roeig": {
264
+ "nz_only": 6,
265
  "other_only": 0,
266
+ "p": 0.03125
267
  },
268
  "laya_ml": {
269
  "nz_only": 14,
270
+ "other_only": 6,
271
+ "p": 0.11531829833984375
272
  }
273
  }
274
  },
 
277
  "n": 500,
278
  "chance": 0.05,
279
  "acc": {
280
+ "nz": 0.9,
281
  "roeig": 0.726,
282
  "laya_ml": 0.474
283
  },
284
  "brier": {
285
+ "nz": 0.1701,
286
  "roeig": 0.3801,
287
  "laya_ml": 0.7338
288
  },
289
  "ece": {
290
+ "nz": 0.0412,
291
  "roeig": 0.0395,
292
  "laya_ml": 0.1661
293
  },
294
  "empty_acc": {
295
+ "nz": 0.058,
296
  "roeig": 0.052,
297
  "laya_ml": 0.044
298
  },
299
  "vs_nitzotz": {
300
  "roeig": {
301
+ "nz_only": 100,
302
+ "other_only": 13,
303
+ "p": 8.471157872064744e-18
304
  },
305
  "laya_ml": {
306
+ "nz_only": 220,
307
+ "other_only": 7,
308
+ "p": 5.374231848579288e-56
309
  }
310
  }
311
  },
 
314
  "n": 500,
315
  "chance": 0.25,
316
  "acc": {
317
+ "nz": 0.97,
318
  "roeig": 0.908,
319
  "laya_ml": 0.694
320
  },
321
  "brier": {
322
+ "nz": 0.0514,
323
  "roeig": 0.1369,
324
  "laya_ml": 0.3987
325
  },
326
  "ece": {
327
+ "nz": 0.0443,
328
  "roeig": 0.0393,
329
  "laya_ml": 0.0468
330
  },
331
  "empty_acc": {
332
+ "nz": 0.24,
333
  "roeig": 0.242,
334
  "laya_ml": 0.256
335
  },
336
  "vs_nitzotz": {
337
  "roeig": {
338
+ "nz_only": 37,
339
  "other_only": 6,
340
+ "p": 1.636124125070637e-06
341
  },
342
  "laya_ml": {
343
+ "nz_only": 142,
344
+ "other_only": 4,
345
+ "p": 4.188799933293481e-37
346
  }
347
  }
348
  },
 
351
  "n": 204,
352
  "chance": 0.1429,
353
  "acc": {
354
+ "nz": 0.8039,
355
  "roeig": 0.8235,
356
  "laya_ml": 0.6618
357
  },
358
  "brier": {
359
+ "nz": 0.3002,
360
  "roeig": 0.285,
361
  "laya_ml": 0.4918
362
  },
363
  "ece": {
364
+ "nz": 0.0857,
365
  "roeig": 0.0751,
366
  "laya_ml": 0.1784
367
  },
 
372
  },
373
  "vs_nitzotz": {
374
  "roeig": {
375
+ "nz_only": 15,
376
+ "other_only": 19,
377
+ "p": 0.6075913612730801
378
  },
379
  "laya_ml": {
380
+ "nz_only": 47,
381
+ "other_only": 18,
382
+ "p": 0.0004221303234752052
383
  }
384
  }
385
  },
 
388
  "n": 600,
389
  "chance": 0.5,
390
  "acc": {
391
+ "nz": 0.9483,
392
  "roeig": 0.9417,
393
  "laya_ml": 0.4883
394
  },
395
  "brier": {
396
+ "nz": 0.0899,
397
  "roeig": 0.0926,
398
  "laya_ml": 0.8274
399
  },
400
  "ece": {
401
+ "nz": 0.0484,
402
  "roeig": 0.0178,
403
  "laya_ml": 0.3946
404
  },
405
  "empty_acc": {
406
+ "nz": 0.5033,
407
  "roeig": 0.8,
408
  "laya_ml": 0.59
409
  },
410
  "vs_nitzotz": {
411
  "roeig": {
412
+ "nz_only": 33,
413
+ "other_only": 29,
414
+ "p": 0.7035366713552734
415
  },
416
  "laya_ml": {
417
+ "nz_only": 299,
418
+ "other_only": 23,
419
+ "p": 2.1018222751120708e-62
420
  }
421
  }
422
  },
 
425
  "n": 600,
426
  "chance": 0.5,
427
  "acc": {
428
+ "nz": 0.9067,
429
  "roeig": 0.53,
430
  "laya_ml": 0.5367
431
  },
432
  "brier": {
433
+ "nz": 0.159,
434
  "roeig": 0.856,
435
  "laya_ml": 0.7348
436
  },
437
  "ece": {
438
+ "nz": 0.0185,
439
  "roeig": 0.4336,
440
  "laya_ml": 0.3421
441
  },
442
  "empty_acc": {
443
+ "nz": 0.505,
444
  "roeig": 0.5033,
445
  "laya_ml": 0.5167
446
  },
447
  "vs_nitzotz": {
448
  "roeig": {
449
+ "nz_only": 249,
450
+ "other_only": 23,
451
+ "p": 4.261733883444211e-49
452
  },
453
  "laya_ml": {
454
+ "nz_only": 244,
455
+ "other_only": 22,
456
+ "p": 1.5017318497531166e-48
457
  }
458
  }
459
  },
 
462
  "n": 900,
463
  "chance": 0.25,
464
  "acc": {
465
+ "nz": 0.6267,
466
  "roeig": 0.7544,
467
  "laya_ml": 0.3144
468
  },
469
  "brier": {
470
+ "nz": 0.5567,
471
  "roeig": 0.3442,
472
  "laya_ml": 0.8341
473
  },
474
  "ece": {
475
+ "nz": 0.1917,
476
  "roeig": 0.0324,
477
  "laya_ml": 0.2307
478
  },
479
  "empty_acc": {
480
+ "nz": 0.3133,
481
  "roeig": 0.3189,
482
  "laya_ml": 0.2844
483
  },
484
  "vs_nitzotz": {
485
  "roeig": {
486
+ "nz_only": 66,
487
+ "other_only": 181,
488
+ "p": 1.4586191292115705e-13
489
  },
490
  "laya_ml": {
491
+ "nz_only": 365,
492
+ "other_only": 84,
493
+ "p": 8.256351793141917e-43
494
  }
495
  }
496
  }
 
498
  "significance": "paired exact McNemar against Nitzotz on the same questions",
499
  "latency_ms": {
500
  "q8": {
501
+ "median": 50.2,
502
+ "p90": 76.5,
503
  "n": 50
504
  },
505
  "f16": {
506
+ "median": 52.4,
507
+ "p90": 79.5,
508
  "n": 50
509
  },
510
  "py": {
511
+ "median": 70.2,
512
+ "p90": 109.6,
513
  "n": 50
514
  },
515
  "q8_cpu": {
516
+ "median": 339.5,
517
+ "p90": 710.2,
518
  "n": 50
519
  },
520
  "f16_cpu": {
521
+ "median": 491.5,
522
+ "p90": 988.3,
523
  "n": 50
524
  },
525
  "py_cpu": {
526
+ "median": 342.0,
527
+ "p90": 666.5,
528
  "n": 50
529
  }
530
  },
 
533
  "short": {
534
  "item": "massive_he_4-0075",
535
  "input_tokens": 38,
536
+ "median_ms": 38.1,
537
+ "p90_ms": 39.6,
538
+ "min_ms": 36.5
539
  },
540
  "long": {
541
  "item": "heq_unanswerable-0522",
542
  "input_tokens": 430,
543
+ "median_ms": 138.4,
544
+ "p90_ms": 141.0,
545
+ "min_ms": 130.6
546
  }
547
  },
548
  "f16": {
549
  "short": {
550
  "item": "massive_he_4-0075",
551
  "input_tokens": 38,
552
+ "median_ms": 43.5,
553
+ "p90_ms": 44.8,
554
+ "min_ms": 41.6
555
  },
556
  "long": {
557
  "item": "heq_unanswerable-0522",
558
  "input_tokens": 430,
559
+ "median_ms": 137.2,
560
+ "p90_ms": 148.4,
561
+ "min_ms": 113.0
562
  }
563
  },
564
  "py": {
565
  "short": {
566
  "item": "massive_he_4-0075",
567
  "input_tokens": 38,
568
+ "median_ms": 43.6,
569
+ "p90_ms": 46.9,
570
+ "min_ms": 41.8
571
  },
572
  "long": {
573
  "item": "heq_unanswerable-0522",
574
  "input_tokens": 430,
575
+ "median_ms": 192.0,
576
+ "p90_ms": 210.9,
577
+ "min_ms": 149.4
578
  }
579
  },
580
  "q8_cpu": {
581
  "short": {
582
  "item": "massive_he_4-0075",
583
  "input_tokens": 38,
584
+ "median_ms": 186.0,
585
+ "p90_ms": 199.5,
586
+ "min_ms": 165.2
587
  },
588
  "long": {
589
  "item": "heq_unanswerable-0522",
590
  "input_tokens": 430,
591
+ "median_ms": 1270.3,
592
+ "p90_ms": 1352.6,
593
+ "min_ms": 1138.8
594
  }
595
  },
596
  "py_cpu": {
597
  "short": {
598
  "item": "massive_he_4-0075",
599
  "input_tokens": 38,
600
+ "median_ms": 134.3,
601
+ "p90_ms": 147.2,
602
+ "min_ms": 126.7
603
  },
604
  "long": {
605
  "item": "heq_unanswerable-0522",
606
  "input_tokens": 430,
607
+ "median_ms": 1236.2,
608
+ "p90_ms": 1317.7,
609
+ "min_ms": 1186.6
610
  }
611
  }
612
  },
613
  "latency_machine": "Intel Core Ultra 9 285H laptop, built-in Arc 140T GPU, Windows 11",
614
  "gguf_parity_50": {
615
  "q8": {
616
+ "max_abs_diff": 0.0456,
617
+ "mean_abs_diff": 0.001536,
618
  "argmax_agree": "50/50"
619
  },
620
  "f16": {
621
+ "max_abs_diff": 0.0031,
622
  "mean_abs_diff": 0.00032,
623
  "argmax_agree": "50/50"
624
  },
625
  "q8_cpu": {
626
+ "max_abs_diff": 0.0563,
627
+ "mean_abs_diff": 0.00241,
628
  "argmax_agree": "50/50"
629
  },
630
  "f16_cpu": {
631
+ "max_abs_diff": 0.0015,
632
+ "mean_abs_diff": 0.000242,
633
  "argmax_agree": "50/50"
634
  }
635
  },
636
  "gguf_parity_spam_596": {
637
  "q8": {
638
+ "max_abs_diff": 0.0189,
639
+ "mean_abs_diff": 0.001162,
640
+ "argmax_agree": "595/596",
641
+ "accuracy_vs_gold": 0.8356
642
  },
643
  "f16": {
644
  "max_abs_diff": 0.0023,
645
+ "mean_abs_diff": 0.000227,
646
+ "argmax_agree": "596/596",
647
+ "accuracy_vs_gold": 0.8372
648
  },
649
  "py": {
650
  "max_abs_diff": 0.0001,
651
  "mean_abs_diff": 0.0,
652
+ "argmax_agree": "596/596",
653
+ "accuracy_vs_gold": 0.8372
654
  },
655
  "q8_cpu": {
656
+ "max_abs_diff": 0.0278,
657
+ "mean_abs_diff": 0.001854,
658
+ "argmax_agree": "595/596",
659
+ "accuracy_vs_gold": 0.8356
660
  },
661
  "f16_cpu": {
662
+ "max_abs_diff": 0.0017,
663
+ "mean_abs_diff": 0.000203,
664
+ "argmax_agree": "596/596",
665
+ "accuracy_vs_gold": 0.8372
666
  },
667
  "py_cpu": {
668
  "max_abs_diff": 0.0,
669
  "mean_abs_diff": 0.0,
670
  "argmax_agree": "596/596",
671
+ "accuracy_vs_gold": 0.8372
672
  }
673
  },
674
  "belebele_split": {
675
  "verbatim_n": 252,
676
  "reworded_n": 648,
677
  "nz": {
678
+ "verbatim": 0.7896825396825397,
679
+ "reworded": 0.5632716049382716
680
  },
681
  "roeig": {
682
  "verbatim": 0.8412698412698413,
 
689
  },
690
  "calibration_pooled": {
691
  "n": 3990,
692
+ "ece_15bin": 0.0274
693
+ },
694
+ "wording_robustness": {
695
+ "suite": "wording_he v1 (frozen): 1786 questions, each asked in 6 wordings with the same meaning",
696
+ "flip_rate": "share of questions whose top answer is not the same in all 6 wordings (lower is better)",
697
+ "models": {
698
+ "BrainboxAI/nitzotz v1.1": {
699
+ "all_item_weighted": {
700
+ "flip_rate": 0.0442,
701
+ "flip_vs_orig": 0.0142,
702
+ "mean_acc": 0.9081,
703
+ "worst_acc": 0.8998,
704
+ "flip_rate_spam_type_without_form_swap": 0.0431
705
+ },
706
+ "parts": {
707
+ "heq_verify": {
708
+ "n_items": 600,
709
+ "mean_acc": 0.945,
710
+ "worst_acc": 0.9417,
711
+ "flip_rate": 0.0233
712
+ },
713
+ "massive_he_4": {
714
+ "n_items": 500,
715
+ "mean_acc": 0.967,
716
+ "worst_acc": 0.958,
717
+ "flip_rate": 0.034
718
+ },
719
+ "spam_business_he:category": {
720
+ "n_items": 298,
721
+ "mean_acc": 0.7645,
722
+ "worst_acc": 0.7584,
723
+ "flip_rate": 0.0671
724
+ },
725
+ "spam_business_he:category:hard": {
726
+ "n_items": 65,
727
+ "mean_acc": 0.641,
728
+ "worst_acc": 0.6154,
729
+ "flip_rate": 0.1077
730
+ },
731
+ "spam_business_he:scam": {
732
+ "n_items": 298,
733
+ "mean_acc": 0.9144,
734
+ "worst_acc": 0.9094,
735
+ "flip_rate": 0.0235
736
+ },
737
+ "spam_business_he:scam:hard": {
738
+ "n_items": 65,
739
+ "mean_acc": 0.8103,
740
+ "worst_acc": 0.8,
741
+ "flip_rate": 0.0462
742
+ },
743
+ "triage30:category": {
744
+ "n_items": 30,
745
+ "mean_acc": 0.8723,
746
+ "worst_acc": 0.8667,
747
+ "flip_rate": 0.0333
748
+ },
749
+ "triage30:paying": {
750
+ "n_items": 30,
751
+ "mean_acc": 0.7722,
752
+ "worst_acc": 0.7333,
753
+ "flip_rate": 0.2333
754
+ },
755
+ "triage30:urgency": {
756
+ "n_items": 30,
757
+ "mean_acc": 0.7222,
758
+ "worst_acc": 0.6,
759
+ "flip_rate": 0.4333
760
+ }
761
+ },
762
+ "single_answer_wordings": {}
763
+ },
764
+ "BrainboxAI/nitzotz v1.0": {
765
+ "all_item_weighted": {
766
+ "flip_rate": 0.098,
767
+ "flip_vs_orig": 0.0427,
768
+ "mean_acc": 0.8745,
769
+ "worst_acc": 0.8634,
770
+ "flip_rate_spam_type_without_form_swap": 0.098
771
+ },
772
+ "parts": {
773
+ "heq_verify": {
774
+ "n_items": 600,
775
+ "mean_acc": 0.9333,
776
+ "worst_acc": 0.93,
777
+ "flip_rate": 0.0267
778
+ },
779
+ "massive_he_4": {
780
+ "n_items": 500,
781
+ "mean_acc": 0.9637,
782
+ "worst_acc": 0.96,
783
+ "flip_rate": 0.034
784
+ },
785
+ "spam_business_he:category": {
786
+ "n_items": 298,
787
+ "mean_acc": 0.7478,
788
+ "worst_acc": 0.7383,
789
+ "flip_rate": 0.0872
790
+ },
791
+ "spam_business_he:category:hard": {
792
+ "n_items": 65,
793
+ "mean_acc": 0.5385,
794
+ "worst_acc": 0.5231,
795
+ "flip_rate": 0.1538
796
+ },
797
+ "spam_business_he:scam": {
798
+ "n_items": 298,
799
+ "mean_acc": 0.7891,
800
+ "worst_acc": 0.7651,
801
+ "flip_rate": 0.2349
802
+ },
803
+ "spam_business_he:scam:hard": {
804
+ "n_items": 65,
805
+ "mean_acc": 0.6769,
806
+ "worst_acc": 0.6,
807
+ "flip_rate": 0.3692
808
+ },
809
+ "triage30:category": {
810
+ "n_items": 30,
811
+ "mean_acc": 0.8389,
812
+ "worst_acc": 0.8333,
813
+ "flip_rate": 0.1
814
+ },
815
+ "triage30:paying": {
816
+ "n_items": 30,
817
+ "mean_acc": 0.6278,
818
+ "worst_acc": 0.4667,
819
+ "flip_rate": 0.9667
820
+ },
821
+ "triage30:urgency": {
822
+ "n_items": 30,
823
+ "mean_acc": 0.6,
824
+ "worst_acc": 0.5667,
825
+ "flip_rate": 0.4667
826
+ }
827
+ },
828
+ "single_answer_wordings": {
829
+ "triage30:paying": [
830
+ "colloquial"
831
+ ]
832
+ }
833
+ }
834
+ }
835
+ },
836
+ "belebele_negation": {
837
+ "n": 158,
838
+ "acc": 0.519,
839
+ "previous_version_acc": 0.2532
840
+ },
841
+ "vs_previous_version": {
842
+ "version": "1.0",
843
+ "acc": {
844
+ "spam_scam": 0.8255,
845
+ "spam_scam_hard": 0.6308,
846
+ "spam_type": 0.755,
847
+ "spam_type_hard": 0.5385,
848
+ "triage_type": 0.8333,
849
+ "triage_urgency": 0.6,
850
+ "triage_paying": 0.6333,
851
+ "massive_20": 0.888,
852
+ "massive_4": 0.962,
853
+ "sib200": 0.7941,
854
+ "heq_verify": 0.9383,
855
+ "heq_unans": 0.91,
856
+ "belebele": 0.5267
857
+ },
858
+ "mcnemar": {
859
+ "spam_scam": {
860
+ "new_only": 32,
861
+ "old_only": 6,
862
+ "p": 2.4342560209333897e-05
863
+ },
864
+ "spam_scam_hard": {
865
+ "new_only": 16,
866
+ "old_only": 5,
867
+ "p": 0.02660369873046875
868
+ },
869
+ "spam_type": {
870
+ "new_only": 17,
871
+ "old_only": 15,
872
+ "p": 0.860050065908581
873
+ },
874
+ "spam_type_hard": {
875
+ "new_only": 9,
876
+ "old_only": 3,
877
+ "p": 0.14599609375
878
+ },
879
+ "triage_type": {
880
+ "new_only": 2,
881
+ "old_only": 1,
882
+ "p": 1.0
883
+ },
884
+ "triage_urgency": {
885
+ "new_only": 7,
886
+ "old_only": 1,
887
+ "p": 0.0703125
888
+ },
889
+ "triage_paying": {
890
+ "new_only": 4,
891
+ "old_only": 0,
892
+ "p": 0.125
893
+ },
894
+ "massive_20": {
895
+ "new_only": 15,
896
+ "old_only": 9,
897
+ "p": 0.30745625495910645
898
+ },
899
+ "massive_4": {
900
+ "new_only": 7,
901
+ "old_only": 3,
902
+ "p": 0.34375
903
+ },
904
+ "sib200": {
905
+ "new_only": 22,
906
+ "old_only": 20,
907
+ "p": 0.8776143287523155
908
+ },
909
+ "heq_verify": {
910
+ "new_only": 12,
911
+ "old_only": 6,
912
+ "p": 0.237884521484375
913
+ },
914
+ "heq_unans": {
915
+ "new_only": 16,
916
+ "old_only": 18,
917
+ "p": 0.8641662404406816
918
+ },
919
+ "belebele": {
920
+ "new_only": 166,
921
+ "old_only": 76,
922
+ "p": 7.168318201682987e-09
923
+ }
924
+ }
925
+ },
926
+ "seeds": {
927
+ "heldout_this": 0.958,
928
+ "others": [
929
+ {
930
+ "name": "seed 2",
931
+ "heldout": 0.9492,
932
+ "acc": {
933
+ "spam_scam": 0.9128,
934
+ "spam_scam_hard": 0.8154,
935
+ "spam_type": 0.7718,
936
+ "spam_type_hard": 0.6308,
937
+ "triage_type": 0.8667,
938
+ "triage_urgency": 0.6667,
939
+ "triage_paying": 0.7667,
940
+ "massive_20": 0.902,
941
+ "massive_4": 0.964,
942
+ "sib200": 0.8088,
943
+ "heq_verify": 0.9467,
944
+ "heq_unans": 0.8933,
945
+ "belebele": 0.6311
946
+ }
947
+ },
948
+ {
949
+ "name": "seed 3",
950
+ "heldout": 0.953,
951
+ "acc": {
952
+ "spam_scam": 0.9094,
953
+ "spam_scam_hard": 0.8308,
954
+ "spam_type": 0.7886,
955
+ "spam_type_hard": 0.6154,
956
+ "triage_type": 0.9333,
957
+ "triage_urgency": 0.6667,
958
+ "triage_paying": 0.8,
959
+ "massive_20": 0.902,
960
+ "massive_4": 0.966,
961
+ "sib200": 0.8235,
962
+ "heq_verify": 0.945,
963
+ "heq_unans": 0.9,
964
+ "belebele": 0.6344
965
+ }
966
+ }
967
+ ],
968
+ "agreement_min": 0.9058,
969
+ "agreement_max": 0.9105
970
  }
971
  }
model.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:ed978a077a075355feeada7154b10382f40e0e8e115efd194965c7f00bf5c63c
3
  size 767366700
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0abc05a7e052aca7960bfe31962d64d399e233558373de321f34aeceb9b5b530
3
  size 767366700
nitzotz-f16.gguf CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:3396c490d501a1f5b76db931544119731c56265b798a93fe6babfdb025d36c1b
3
  size 770204096
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b06086caefbf8b626dbadcfb02fe6a6b43047e4624296f74bc5228c50c964313
3
  size 770204096
nitzotz-q8_0.gguf CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:e4a4cc1c83b957a86938db2ff9c0846e75b80a22508aadb839447df04ce2454c
3
  size 412580576
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ea5f6fbff83711dc3f8dfa2c26919898cbfc109a4710de6ec46ffe792ab3cf30
3
  size 412580576
rl_agent_config.json CHANGED
@@ -9,69 +9,94 @@
9
  "amp_dtype": "bf16",
10
  "model_name": "nitzotz",
11
  "temperature": [
12
- 1.103005051612854,
13
- 1.109466552734375,
14
- 1.165097951889038
15
  ],
16
  "training": {
17
  "encoder_init": "HalleluBERT-large after extractive QA on HeQ v1.1 train (test-overlapping passages removed)",
18
- "data": "58,000 items: synthetic Hebrew messages, HeQ v1.1 train, MASSIVE he-IL train (see README)",
19
- "items_total": 58000,
20
- "train_items": 55099,
21
- "calib_items": 2901,
22
  "epochs_planned": 2,
23
  "epochs_run": 2,
24
  "kept_epoch": 2,
25
  "heldout_by_epoch": [
26
  {
27
- "acc": 0.9349,
28
- "soft_nll": 0.5046,
 
29
  "by_family": {
30
- "claim": 0.9521,
 
 
 
 
 
31
  "heq_read": 0.972,
32
- "heq_unans": 0.92,
33
- "heq_verify": 0.9567,
34
- "massive_intent": 0.92,
35
- "routing": 0.9201,
36
- "spam_type": 0.9329,
37
- "urgency": 0.8971
 
 
38
  },
39
  "epoch": 1,
40
- "step": 1722,
41
- "train_seconds": 765.9
42
  },
43
  {
44
- "acc": 0.9479,
45
- "soft_nll": 0.4612,
 
46
  "by_family": {
47
- "claim": 0.9635,
48
- "heq_read": 0.984,
49
- "heq_unans": 0.944,
50
- "heq_verify": 0.9533,
51
- "massive_intent": 0.9343,
52
- "routing": 0.9384,
53
- "spam_type": 0.9429,
 
 
 
 
 
 
 
54
  "urgency": 0.9257
55
  },
56
  "epoch": 2,
57
- "step": 3444,
58
- "train_seconds": 766.6
59
  }
60
  ],
61
- "steps": 3444,
62
  "batch": 32,
63
  "micro_batch": 16,
64
  "lr_encoder": 1e-05,
65
  "lr_head": 0.0001,
66
  "warmup": 0.1,
67
  "schedule": "cosine",
68
- "seed": 2,
69
  "split_seed": 1234,
70
  "loss": "soft cross-entropy",
71
  "amp": "bf16",
72
  "device": "cuda",
73
- "train_seconds": 1543.1,
74
  "head_init": "fresh (no laya checkpoint weights)",
75
- "class_weights": "none"
76
- }
 
 
 
 
 
 
 
 
 
77
  }
 
9
  "amp_dtype": "bf16",
10
  "model_name": "nitzotz",
11
  "temperature": [
12
+ 1.1031566858291626,
13
+ 1.110580563545227,
14
+ 1.195957064628601
15
  ],
16
  "training": {
17
  "encoder_init": "HalleluBERT-large after extractive QA on HeQ v1.1 train (test-overlapping passages removed)",
18
+ "data": "106,723 items: synthetic Hebrew messages, HeQ v1.1 train, MASSIVE he-IL train, reading and topic items on FineWeb-2 Hebrew passages, reworded copies (see README)",
19
+ "items_total": 106723,
20
+ "train_items": 102173,
21
+ "calib_items": 4550,
22
  "epochs_planned": 2,
23
  "epochs_run": 2,
24
  "kept_epoch": 2,
25
  "heldout_by_epoch": [
26
  {
27
+ "acc": 0.9424,
28
+ "soft_nll": 0.4824,
29
+ "acc_base_families": 0.9407,
30
  "by_family": {
31
+ "aug_heq": 0.9344,
32
+ "aug_massive": 0.9286,
33
+ "aug_scam": 0.9677,
34
+ "aug_type": 0.9482,
35
+ "aug_urgency": 0.814,
36
+ "claim": 0.968,
37
  "heq_read": 0.972,
38
+ "heq_unans": 0.9,
39
+ "heq_verify": 0.9533,
40
+ "massive_intent": 0.9229,
41
+ "rel_scam": 0.9833,
42
+ "rel_type": 0.9254,
43
+ "routing": 0.9338,
44
+ "spam_type": 0.9471,
45
+ "urgency": 0.8914
46
  },
47
  "epoch": 1,
48
+ "step": 3193,
49
+ "train_seconds": 1619.1
50
  },
51
  {
52
+ "acc": 0.958,
53
+ "soft_nll": 0.4701,
54
+ "acc_base_families": 0.9545,
55
  "by_family": {
56
+ "aug_heq": 0.9672,
57
+ "aug_massive": 0.9643,
58
+ "aug_scam": 0.9731,
59
+ "aug_type": 0.9512,
60
+ "aug_urgency": 0.9186,
61
+ "claim": 0.9658,
62
+ "heq_read": 0.976,
63
+ "heq_unans": 0.936,
64
+ "heq_verify": 0.9567,
65
+ "massive_intent": 0.9429,
66
+ "rel_scam": 0.9867,
67
+ "rel_type": 0.9552,
68
+ "routing": 0.9543,
69
+ "spam_type": 0.9586,
70
  "urgency": 0.9257
71
  },
72
  "epoch": 2,
73
+ "step": 6386,
74
+ "train_seconds": 1630.1
75
  }
76
  ],
77
+ "steps": 6386,
78
  "batch": 32,
79
  "micro_batch": 16,
80
  "lr_encoder": 1e-05,
81
  "lr_head": 0.0001,
82
  "warmup": 0.1,
83
  "schedule": "cosine",
84
+ "seed": 1,
85
  "split_seed": 1234,
86
  "loss": "soft cross-entropy",
87
  "amp": "bf16",
88
  "device": "cuda",
89
+ "train_seconds": 3265.6,
90
  "head_init": "fresh (no laya checkpoint weights)",
91
+ "class_weights": "none",
92
+ "option_shuffle_families": [
93
+ "read2_multi",
94
+ "read2_neg",
95
+ "read2_para",
96
+ "read2_pos"
97
+ ],
98
+ "holdout_by_parent": true,
99
+ "parent_copies_dropped": 0
100
+ },
101
+ "version": "1.1"
102
  }