<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jebra</title>
    <description>The latest articles on DEV Community by Jebra (@jebra).</description>
    <link>https://dev.to/jebra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3951164%2F543c3f60-c729-46e2-96b2-3ecf6886847b.png</url>
      <title>DEV Community: Jebra</title>
      <link>https://dev.to/jebra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jebra"/>
    <language>en</language>
    <item>
      <title>Fine-Tuned Qwen2.5-1.5B vs Claude-Opus-5 for JSON Extraction</title>
      <dc:creator>Jebra</dc:creator>
      <pubDate>Mon, 24 Aug 2026 16:09:54 +0000</pubDate>
      <link>https://dev.to/jebra/fine-tuned-qwen25-15b-vs-claude-opus-5-for-json-extraction-5aco</link>
      <guid>https://dev.to/jebra/fine-tuned-qwen25-15b-vs-claude-opus-5-for-json-extraction-5aco</guid>
      <description>&lt;p&gt;In our &lt;a href="https://dev.to/jebra/fine-tuning-with-qlora-for-json-extraction-f8k"&gt;previous blog&lt;/a&gt;, we described how we successfully fine-tuned Qwen2.5-1.5B-Instruct using QLoRA to extract structured JSON from unstructured text for a domain-specific use case. The results were promising, with the model achieving 62% exact match accuracy and 97% field match accuracy.&lt;/p&gt;

&lt;p&gt;However, a natural question arose: &lt;strong&gt;How does our fine-tuned small model compare against state-of-the-art frontier models like Claude Opus 5?&lt;/strong&gt; &lt;br&gt;
Would a massive general-purpose model outperform our domain-specific fine-tuned model?&lt;/p&gt;

&lt;p&gt;We decided to run the same evaluation pipeline on Claude Opus-5 to find out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Evaluation Setup
&lt;/h2&gt;

&lt;p&gt;We used the identical test set and the same evaluation metrics to ensure a fair comparison:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Exact Match:&lt;/strong&gt; Binary per sample (1 if all fields match exactly, else 0). Aggregated across the test dataset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field Match:&lt;/strong&gt; Partial credit per sample (correct fields / total fields). Aggregated across the test dataset.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;Despite being &lt;strong&gt;~1,000x&lt;/strong&gt; smaller than Claude Opus-5, our fine-tuned Qwen2.5-1.5B achieved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;~15 percentage points&lt;/strong&gt; higher field match accuracy (96.72% vs 81.81%)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;62% exact match accuracy vs Claude's 0%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Much less expensive&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Much more control over your data&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flq6dipdsk1ra7088l9me.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flq6dipdsk1ra7088l9me.png" alt="Chart" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This comparison demonstrates a powerful lesson in modern AI development,&lt;br&gt;
&lt;strong&gt;a well-tuned small model can outperform even the largest frontier models on domain-specific use-cases.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>llm</category>
    </item>
    <item>
      <title>Fine-Tuning with QLoRA for JSON Extraction</title>
      <dc:creator>Jebra</dc:creator>
      <pubDate>Mon, 10 Aug 2026 19:51:09 +0000</pubDate>
      <link>https://dev.to/jebra/fine-tuning-with-qlora-for-json-extraction-f8k</link>
      <guid>https://dev.to/jebra/fine-tuning-with-qlora-for-json-extraction-f8k</guid>
      <description>&lt;p&gt;We needed to extract structured JSON from unstructured text for a domain-specific use case. We decided to train the Qwen2.5-1.5B-Instruct model with quantization levels of 4-bit, 8-bit and 16-bit separately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dataset&lt;/strong&gt;&lt;br&gt;
Total samples: ~280&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Training&lt;/strong&gt;&lt;br&gt;
Fine-tuned using QLoRA&lt;/p&gt;


&lt;h2&gt;
  
  
  Evaluation Metrics
&lt;/h2&gt;

&lt;p&gt;We measured two scores per split:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Exact Match:&lt;/strong&gt;
Binary per sample (1 if all fields match exactly, else 0). Aggregated across the split.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field Match:&lt;/strong&gt;
Partial credit per sample (correct fields / total fields). Aggregated across the split.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Gold&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;JSON&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Jordan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"last_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kaur"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employment_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"contractor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Grounded Movement"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"payroll@goat.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_address_line_1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"41 King Street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_address_line_2"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Madison, UK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_registration_number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_tax_number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pay_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;45.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pay_rate_basis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"per_shift"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"incentive_pay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"incentive_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"per_reservation_over_n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reservation_types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"check_ins"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exclude_staff_reservations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exclude_cancelled_shifts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_pay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"payment_frequency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"weekly"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;Predicted&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;JSON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;(model&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;output)&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"first_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Jordan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"last_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Kaur"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employment_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"contractor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nl"&gt;"employer_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Grounded"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"payroll@goat.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_address_line_1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"41 King Street"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_address_line_2"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Madison, UK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_registration_number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"employer_tax_number"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pay_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;45.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="nl"&gt;"pay_rate_basis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="err"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"incentive_pay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"incentive_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"per_reservation_over_n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reservation_types"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"check_ins"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exclude_staff_reservations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exclude_cancelled_shifts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_pay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"payment_frequency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"weekly"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mismatch 1: "employer_name": "Grounded" (Predicted) vs "Grounded Movement" (Gold)
Mismatch 2: "pay_rate_basis": null (Predicted) vs "per_shift" (Gold)

Total Fields = 20
Correct Fields = 18
Wrong Fields = 2

Exact Match
Score: 0/1

Field Level Match
Score: 18/20 = 0.9  (90%)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Results (for 16-bit)
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;While we experimented with 4-bit, 8-bit and 16-bit QLoRA, the lower-bit experiments are omitted here for brevity.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-------------------------------------------------------------------
Model                    Exact Accuracy    Field Match
-------------------------------------------------------------------
Baseline                 0.00              0.54
Fine‑tuned               0.62              0.97

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09zn8a4562fdwqxt9oms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F09zn8a4562fdwqxt9oms.png" alt="Chart" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Observations
&lt;/h2&gt;

&lt;p&gt;Field match improved from ~54% to ~97% after fine-tuning. &lt;br&gt;
Exact match, while lower (62%), improved from 0%.&lt;/p&gt;

&lt;p&gt;The field-level result indicates that the adapter successfully learned the correct key-to-value mapping for the majority of fields. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>llm</category>
    </item>
    <item>
      <title>Dicts and Docs: The Value of Grammar and Documentation for LLM-Based Automation</title>
      <dc:creator>Jebra</dc:creator>
      <pubDate>Thu, 16 Jul 2026 14:06:03 +0000</pubDate>
      <link>https://dev.to/jebra/dicts-and-docs-the-value-of-grammar-and-documentation-for-llm-based-automation-59p3</link>
      <guid>https://dev.to/jebra/dicts-and-docs-the-value-of-grammar-and-documentation-for-llm-based-automation-59p3</guid>
      <description>&lt;p&gt;What structure (grammar) and documentation (definitions) buys you – before any training &lt;/p&gt;




&lt;p&gt;Our instinct is to pay up for bigger and newer models when an LLM's output is underwhelming but there are two quick fixes: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; which operates on how the model understands the task by injecting (at inference time) semantics that pre-training excluded because they belong to a niche domain. Documentation, in this experiment, is API-style documentation that unifies docs from leading HR &amp;amp; Payroll companies. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grammar&lt;/strong&gt; which operates on the model’s output is a schema that the model cannot disobey. We compile our 20-field schema into a formal grammar to constrain decoding. At each step the sampler can only pick tokens the grammar allows, so the model doesn't emit malformed JSON or a value outside what the schema permits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;We ran the experiment on 264 payroll agreements&lt;/strong&gt; spanning formal contracts through to informal email exchanges and meeting transcripts — offer letters, job postings, and staff handbooks in between. Each had an associated hand-verified gold answer. &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Setup:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; Qwen2.5-Instruct, run on llama.cpp &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model sizes:&lt;/strong&gt; 3B and 14B &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quantization:&lt;/strong&gt; Q8_0, quantized locally using llama.cpp's convert_hf_to_gguf from the published fp16 weights. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We ran each model four times — once for each combination of the two things we were testing: field names alone versus full definitions, and free decoding versus grammar-constrained decoding. That comes to 2,112 extractions in total.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here’s what we found:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6mt88v67u1ok3wcdt9e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6mt88v67u1ok3wcdt9e.png" alt="Summary Image" width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentation substitutes for grammar.&lt;/strong&gt;  With definitions in place, the 14B model is accurate across 92% of fields and 31% of records. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grammar does not substitute for documentation.&lt;/strong&gt; Grammar improves but can’t teach a convention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grammar without documentation can hurt – it forces answers on questions the document never addresses.&lt;/strong&gt; When a contract says nothing about a policy, the model must still pick a value — and it picks false 50 times where the right answer was null. Definitions removed the error entirely. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Field accuracy scores (at 92%) may make it seem like the models are near-perfect. But a record is only right when all twenty fields are — and less than a third of the records survive that test. The culprits have a name: bottlenecks. We’ll discuss these in the next post.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>When payroll gets complicated, the machine gets harder to please</title>
      <dc:creator>Jebra</dc:creator>
      <pubDate>Thu, 02 Jul 2026 15:30:55 +0000</pubDate>
      <link>https://dev.to/jebra/when-payroll-gets-complicated-the-machine-gets-harder-to-please-5a75</link>
      <guid>https://dev.to/jebra/when-payroll-gets-complicated-the-machine-gets-harder-to-please-5a75</guid>
      <description>&lt;p&gt;The &lt;a href="https://dev.to/jebra/write-for-the-machine-mf"&gt;first experiment&lt;/a&gt; gave clear results: Spell things out and the model performs well. Then we made payroll agreements more complicated – not to be annoying, but to reflect the nature of payroll agreements for shift work. &lt;/p&gt;

&lt;p&gt;The clean result did not survive. &lt;/p&gt;

&lt;p&gt;We ran &lt;a href="https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct-GGUF" rel="noopener noreferrer"&gt;Qwen2.5-1.5B-Instruct&lt;/a&gt; in GGUF format across a wide range of quantization levels, from highly compressed Q2 to near-full-precision FP16, on 2500 payroll clauses that varied in levels of complexity. Complexity here refers to the number of different class types worked at different rates. The agreements varied structurally from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;abbreviated text (S1) to &lt;/li&gt;
&lt;li&gt;semi-structured language (S2) to &lt;/li&gt;
&lt;li&gt;full, grammatically correct sentences (S3). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy45ngbs45cqsflwb1ex6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy45ngbs45cqsflwb1ex6.png" alt="Chart" width="799" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;F1 scores are displayed in the heatmap and show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pay agreement complexity is the primary driver of extraction accuracy&lt;/strong&gt; — the more class types and rate structures a worker has, the harder the model works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For simple agreements&lt;/strong&gt; — a salaried worker, a single flat rate — semi-structured text is sufficient. Full prose adds no value and marginally reduces accuracy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For complex agreements&lt;/strong&gt; — the shift-based arrangements that define hospitality, fitness, and care work — full grammatical sentences outperform structured shorthand by nearly 21 percentage points. This is where off-the-shelf models struggle most, and where a fine-tuned model delivers the clearest commercial advantage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Does a bigger model solve the problem?
&lt;/h2&gt;

&lt;p&gt;We are building toward a fine-tuned model for payroll rule extraction. &lt;br&gt;
We need to know 2 things before we get there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance ceiling of an off-the-shelf model&lt;/li&gt;
&lt;li&gt;the &lt;em&gt;best accuracy-to-compute tradeoff&lt;/em&gt; for production environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we ran the same experiment across four quantization levels of the same base model: 2-bit, 4-bit, 8-bit, and 16-bit.&lt;/p&gt;

&lt;p&gt;The results were clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The 2-bit model is not viable. &lt;/li&gt;
&lt;li&gt;The 4-bit model underperforms on complex structures, which makes it inadequate for shift work. &lt;/li&gt;
&lt;li&gt;The 8-bit and 16-bit models are statistically indistinguishable at every complexity level. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmhjboo84kp5uuy0lfht4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmhjboo84kp5uuy0lfht4.png" alt="Complexity vs F1 Score" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8-bit currently offers the best tradeoff we have measured. But this experiment tested one model family. The next step is running the same experiment across a selection of model architectures to understand if different base models yield different results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They likely do - and that comparison will inform which model we fine-tune.&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Write for the machine</title>
      <dc:creator>Jebra</dc:creator>
      <pubDate>Fri, 19 Jun 2026 14:49:30 +0000</pubDate>
      <link>https://dev.to/jebra/write-for-the-machine-mf</link>
      <guid>https://dev.to/jebra/write-for-the-machine-mf</guid>
      <description>&lt;h2&gt;
  
  
  Write for the machine, not the expert
&lt;/h2&gt;

&lt;p&gt;The effect of abbreviation, syntax, redundancy, and filler words on structured information extraction&lt;/p&gt;

&lt;p&gt;Does how we write matter when feeding unstructured text to an LLM? Experiment 1 isolates this question using a deliberately simple test case: a single flat payroll agreement containing 11 fields.&lt;/p&gt;




&lt;h2&gt;
  
  
  Experimental Setup
&lt;/h2&gt;

&lt;p&gt;•&amp;nbsp;&lt;strong&gt;Dataset:&lt;/strong&gt; 1,000 rows of text total (the same payroll agreement written in 5 distinct styles across 200 unique workers).&lt;br&gt;
•&amp;nbsp;&lt;strong&gt;Model:&lt;/strong&gt; Qwen2.5-1.5B-Instruct in GGUF format (tested across a wide range of quantizations from Q2 to FP16 in a CPU-only environment).&lt;br&gt;
•&amp;nbsp;&lt;strong&gt;Inference Pipeline:&lt;/strong&gt; To prevent malformed JSON, we utilized grammar-constrained decoding via &lt;code&gt;LlamaGrammar.from_json_schema()&lt;/code&gt;, restricting token generation to the target structure.&lt;br&gt;
•&amp;nbsp;&lt;strong&gt;Metric:&lt;/strong&gt; Accuracy was measured using field-level extraction quality:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accuracy = True Positives / Total Unique Fields&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Here is the exact JSON used as the target baseline for a test case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"first_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Layla"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"last_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Silva"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"worker_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"contractor"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"class_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Boxing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"pay_type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"per_class"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"class_rate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;40.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"bonus_amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"bonus_threshold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"head_count_basis"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"check_ins_late_cancels"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"holiday_rate_multiplier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="nl"&gt;"cap_per_session"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;100.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;S1&lt;br&gt;
&lt;strong&gt;Label&lt;/strong&gt;&lt;br&gt;
Shorthand&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;br&gt;
Abbreviations, symbols, no verbs&lt;br&gt;
&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;
Layla Silva [C]: Boxing $40/class. $4/head &amp;gt;8 att (CI+LC). Holiday 1.5x. Cap $100/session.&lt;/p&gt;

&lt;p&gt;S2&lt;br&gt;
&lt;strong&gt;Label&lt;/strong&gt;&lt;br&gt;
Spelled-out&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;br&gt;
Abbreviations replaced with full words, colons as separators&lt;br&gt;
&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;
Layla Silva [contractor]. Rate: $40/class — Boxing. $4/head when attendance exceeds 8 (check-ins and late cancels). Holiday rate: 1.5x standard. Session cap: $100.&lt;/p&gt;

&lt;p&gt;S3&lt;br&gt;
&lt;strong&gt;Label&lt;/strong&gt;&lt;br&gt;
Explicit prose&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;br&gt;
Full sentences, one clean statement per field&lt;br&gt;
&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;
Layla Silva operates as an independent contractor. She is paid $40 for each Boxing class she teaches. For every attendee above 8, she receives $4 extra, counting check-ins and late cancels. Public holidays attract a 1.5x multiplier on her $40 base rate. Session earnings are capped at $100.&lt;/p&gt;

&lt;p&gt;S4&lt;br&gt;
&lt;strong&gt;Label&lt;/strong&gt;&lt;br&gt;
Explicit redundant prose&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;br&gt;
Same as S3 but key values repeated across sentences&lt;br&gt;
&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;
Layla Silva is hired as a contractor. Her Boxing rate is $40 per class. Each Boxing class she teaches pays $40. For Boxing classes, a per-head bonus of $4 applies for each attendee above 8, counting check-ins and late cancels. The $4 per-head threshold is 8. The Boxing rate of $40 increases to $60.00 on holidays (1.5x the $40 base). Per-session Boxing earnings are limited to $100 in total.&lt;/p&gt;

&lt;p&gt;S5&lt;br&gt;
&lt;strong&gt;Label&lt;/strong&gt;&lt;br&gt;
Explicit prose with filler&lt;br&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;br&gt;
Same as S3 but legal boilerplate text introduced.&lt;br&gt;
&lt;strong&gt;Example&lt;/strong&gt;&lt;br&gt;
Layla Silva is contracted as a self-employed instructor. Her contractual rate for Boxing is $40 per class. For the purposes of this arrangement, she is entitled to a per-head bonus of $4 for each attendee above 8, counting check-ins and late cancels. As per the agreed terms, work on designated public holidays is paid at 1.5 times the standard rate. Total per-session earnings are capped at $100.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fggeeuch0dtbgmamaxy4v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fggeeuch0dtbgmamaxy4v.png" alt="Average extration accuracy across pairs of sentence types" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Findings
&lt;/h2&gt;

&lt;p&gt;The results highlight a distinct hierarchy in how language style impacts extraction accuracy:&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Spelling out words is paramount:&lt;/strong&gt; Replacing cryptic abbreviations with full words (S1 to S2) yielded the largest performance jump, nearly 11 percentage points.&lt;br&gt;
•&amp;nbsp;&lt;strong&gt;Syntax matters less than semantics:&lt;/strong&gt; Moving from spelled-out shorthand to full grammatical sentences (S2 to S3) made no meaningful difference. If the vocabulary is explicit, the model extracts efficiently without prose.&lt;br&gt;
•&amp;nbsp;&lt;strong&gt;Redundancy degrades accuracy:&lt;/strong&gt; Repeating key values across sentences (S4) underperforms. Instead of providing helpful "anchors," duplication introduces token ambiguity that misleads the model.&lt;br&gt;
•&amp;nbsp;&lt;strong&gt;Filler text introduces noise:&lt;/strong&gt; Adding filler text like “subject to the terms of the agreement” also had a negative impact.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
