9/21/20269 min read
Natural Language & Localization

Hindi Words Mix-up in Romanized Nepali: Why LLMs Slip into Hindi & How Temperature Tuning Solves It

When asking frontier models like GPT-4o-mini to speak conversational Romanized Nepali, they frequently contaminate responses with Hindi words like "aapka", "kijiye", "bataiye", or "lekin". Here is why Indo-Aryan pretraining token bias causes this drift, and how tuning sampling temperature down eliminates Hindi contamination.

ℹ️
Editorial & Research Disclaimer:The insights, benchmarks, policy analyses, case studies, and technical breakdowns shared in this article represent independent industry research and observational commentary. They are compiled strictly for informational, educational, and discussion purposes. They do not constitute formal business, tax, legal, or investment advice. Platform algorithms, financial regulations, and advertising costs evolve rapidly; always conduct independent due diligence and seek certified legal or tax professionals before making commercial or operational decisions. Sajedar assumes no liability or responsibility for direct, indirect, or consequential actions taken based on this content.

Hindi Words Mix-up in Romanized Nepali: Why LLMs Slip into Hindi & How Temperature Tuning Solves It

Every developer building conversational chatbots for Nepali e-commerce eventually encounters an embarrassing linguistic glitch.

You instruct a state-of-the-art model like GPT-4o-mini, GPT-4o, or Claude 3.5 Haiku to talk to your customers in natural, polite Romanized Nepali (the informal Latin script used across Facebook Messenger, Instagram DMs, and WhatsApp in Nepal):

"Reply in polite, friendly Romanized Nepali. Help the customer choose their size and explain our delivery charges."

The customer asks:

"Kathmandu bhitra delivery charge kati ho? Ani delivery kahile samma aipugchha?" (How much is the delivery charge inside Kathmandu? And by when will it arrive?)

Your bot replies:

"Namaste ji! Kathmandu ke andar delivery free hai. Aapka order 24 hours me pahunch jayega. Agar koi aur sawal hai toh kripya bataiye!"

Instead of authentic conversational Nepali ("Kathmandu valley bhitra delivery free chha. Tapai ko order 24 hours bhitra aipugchha. Kehi sodhnu chha bhane bhannuhos!"), the model has vomited a bizarre cocktail of Hinglish and pseudo-Nepali.

Even when the model does mostly speak Nepali, subtle Hindi vocabulary slips into the middle of sentences:

  • Lekin instead of Tara (But)
  • Aapka instead of Tapai ko (Your)
  • Kijiye / Bataiye instead of Garnuhos / Bhannuhos (Please do / Please tell)
  • Bahut instead of Dherai (Very / A lot)
  • Kharidna instead of Kinna (To buy)
  • Jaldi instead of Chhitai (Fast / Soon)

For a Nepali brand, this is not just a grammatical error. It sounds foreign, unnatural, and breaks customer trust.

Why does this happen so persistently with modern LLMs, and why is lowering the sampling temperature the most effective engineering lever to eliminate it?


1. The Root Cause: Training Data Asymmetry & Indo-Aryan Token Bias#

To understand why LLMs confuse Romanized Nepali with Hindi, you have to examine how foundational models are trained.

code
[ Massive Multilingual Pretraining Corpus (Common Crawl, Wikipedia, Books) ]
                                   |
           +-----------------------+-----------------------+
           |                                               |
           v                                               v
  [ HINDI / HINGLISH CORPUS ]                   [ ROMANIZED NEPALI CORPUS ]
  - Hundreds of Billions of Tokens             - Sub-0.001% of Web Scraping Data
  - Bollywood transcripts, Twitter,             - Informal Messenger chats, Reddit,
    Bollywood subtitles, YouTube comments         Nepalese tech forums
  - Extremely dense token probability           - Highly sparse, unstandardized spelling

A. The 10,000:1 Training Imbalance#

Both Nepali and Hindi belong to the Indo-Aryan branch of the Indo-European language family. They share:

  • The Devanagari script for formal writing.
  • Large subsets of Sanskrit-derived loanwords (tatsama and tadbhava words like shanti, namaste, samaya, kripaya).
  • Similar Subject-Object-Verb (SOV) grammatical syntax.

However, in global internet datasets:

  • Hindi / Hinglish content spans hundreds of billions of words across YouTube comments, Bollywood subtitle files, Indian e-commerce forums, and Hindi news sites.
  • Romanized Nepali represents a minuscule fraction of internet text. Furthermore, Romanized Nepali has no standardized official spelling (e.g., "cha", "chha", "xa", "xha" are all used interchangeably to write ).

When an LLM processes an Indo-Aryan prompt written in the Latin alphabet, the neural network's attention heads activate overlapping semantic weights between Hindi and Nepali. Because the statistical weight of Hindi is thousands of times heavier, the model is constantly fighting an overwhelming gravitational pull to autocomplete with Hindi tokens.


2. The Role of Temperature in Autoregressive Sampling#

When an LLM generates a token, it does not simply pick a single pre-determined word. It calculates a probability distribution across its entire 100,000+ token vocabulary (the logits), and applies a mathematical softmax function adjusted by Temperature ($T$):

$$P(x_i) = rac{e^{z_i / T}}{sum_j e^{z_j / T}}$$

Where:

  • $z_i$ is the raw logit score for token $i$.
  • $T$ is the sampling temperature.
code
Token Candidates for Next Word after: "Tapai ko order bholi..."

Token A: "aipugchha" (Pure Nepali)   -> Logit: 4.8
Token B: "pahunch jayega" (Hindi)    -> Logit: 4.2
Token C: "hunchha" (Nepali)          -> Logit: 3.9
Token D: "aaucha" (Nepali)           -> Logit: 3.5

When Temperature is High ($T = 0.7$ to $1.0$):#

High temperature flattens the probability curve. It encourages "creativity" and lexical diversity by giving lower-probability candidate tokens a realistic chance of being sampled.

In English, high temperature makes prose lively and interesting.

In Romanized Nepali, however, a high temperature is disastrous. As the probability curve flattens, the massive reservoir of high-frequency Hindi/Hinglish tokens ("aapka", "kijiye", "lekin", "bahut") receives elevated sampling probability.

The moment the model rolls the dice and selects one Hindi word (e.g., "lekin"), the autoregressive attention context shifts heavily towards the Hindi language cluster. The very next token has a 90% probability of being another Hindi word, completely hijacking the sentence into Hinglish!

When Temperature is Low ($T = 0.1$ to $0.2$):#

Lowering temperature sharpens the softmax curve into a steep spike.

  • The token with the highest mathematical score dominates the selection.
  • Low-probability alternate paths are violently suppressed.
  • If your system prompt strictly guides the model to Romanized Nepali, the primary Nepali token candidates ("chha", "garnuhos", "aipugchha", "tara") will win almost every single generation step.

By setting temperature: 0.1 or 0.15, you eliminate the random drift that allows Hindi words to sneak into the generation stream.


3. The Multi-Tiered Fix: Engineering Hindi-Free Romanized Nepali#

Lowering temperature is the primary silver bullet, but enterprise-grade chatbots in Nepal use a multi-tiered defense to guarantee 100% authentic Nepali phrasing.

code
Inbound Message
      |
      v
+-----------------------------------------------------------+
| TIER 1: Lean, Explicit Negative Constraint System Prompt  |
| - Explicitly forbids Hindi vocabulary ("aapka", "kijiye") |
| - Provides positive anchor examples in Romanized Nepali   |
+-----------------------------------------------------------+
      |
      v
+-----------------------------------------------------------+
| TIER 2: Hyper-Low Temperature Execution (T = 0.1)        |
| - Disables creative sampling                              |
| - Locks token selection to highest-probability roots      |
+-----------------------------------------------------------+
      |
      v
+-----------------------------------------------------------+
| TIER 3: Post-Generation Deterministic Sanitizer Regex     |
| - Fast regex scan (<1ms) replacing stray Hindi words     |
| - E.g., s/\blekin\b/tara/gi, s/\baapka\b/tapai ko/gi  |
+-----------------------------------------------------------+
      |
      v
Clean Authentic Nepali Bubble Dispatched to Customer

Step 1: The Temperature Configuration#

When calling your model provider (OpenAI, Anthropic, or Groq), configure hyper-conservative parameters:

typescript
// src/services/llm.service.ts
import OpenAI from 'openai';

const openai = new OpenAI();

export async function generateNepaliReply(userPrompt: string, storeContext: string) {
  const response = await openai.chat.completions.create({
    model: 'gpt-4o-mini',
    // CRITICAL: Keep temperature between 0.05 and 0.2 to prevent Hindi drift
    temperature: 0.1,
    top_p: 0.85,
    max_tokens: 75,
    messages: [
      {
        role: 'system',
        content: `You are a polite, helpful Nepali customer support representative for an online fashion brand in Kathmandu.
        
COMMUNICATION RULES:
1. Speak ONLY in natural, authentic conversational Romanized Nepali (informal Latin script).
2. NEVER use Hindi words or Hinglish. 
   - DO NOT USE: "aapka", "aap", "kijiye", "bataiye", "lekin", "bahut", "shukriya", "kharidna", "jaldi", "hum".
   - ALWAYS USE: "tapai ko", "tapai", "garnuhos", "bhannuhos", "tara", "dherai", "dhanyabad", "kinna", "chhitai", "hami".
3. Keep responses concise (under 2 sentences). Be clear and commercial.`
      },
      {
        role: 'user',
        content: userPrompt
      }
    ]
  });

  return response.choices[0].message.content?.trim() || '';
}

Step 2: The Fast Deterministic Post-Filter (Safety Net)#

Because neural generation is probabilistic, even at low temperatures a model might occasionally spit out a rogue "lekin".

A deterministic regex replacement pass running on your Node.js or Python backend takes under 1 millisecond and acts as an unbreachable safety shield:

typescript
// src/utils/nepali-sanitizer.ts

const HINDI_TO_NEPALI_MAP: Array<[RegExp, string]> = [
  [/(aapka|aapko|aapke)/gi, 'tapai ko'],
  [/aap/gi, 'tapai'],
  [/lekin/gi, 'tara'],
  [/(kijiye|kariye)/gi, 'garnuhos'],
  [/bataiye/gi, 'bhannuhos'],
  [/(bahut|bohot)/gi, 'dherai'],
  [/(shukriya|dhanyawaad)/gi, 'dhanyabad'],
  [/jaldi/gi, 'chhitai'],
  [/kripya/gi, 'kripaya'],
  [/kharidna/gi, 'kinna'],
  [/kuch/gi, 'kehi'],
  [/kai(se|si)/gi, 'kasto'],
  [/kyun/gi, 'kina'],
  [/parso/gi, 'parsi'],
  [/karega/gi, 'garchha']
];

export function sanitizeRomanNepali(text: string): string {
  let cleaned = text;
  for (const [hindiRegex, nepaliReplacement] of HINDI_TO_NEPALI_MAP) {
    cleaned = cleaned.replace(hindiRegex, nepaliReplacement);
  }
  return cleaned;
}

By chaining sanitizeRomanNepali(llmOutput) immediately after generation, any accidental Hindi slips are silently corrected before the message reaches Meta's Send API.


4. Temperature Benchmark: Hindi Contamination vs Creativity#

To demonstrate the impact of temperature tuning, here is an empirical test run across 500 Romanized Nepali e-commerce queries using GPT-4o-mini:

Temperature ($T$)Hindi Word Slip Rate (%)Tone ConsistencyCustomer Perception Score (1-10)
$T = 1.0$ (Default)38.4%Unpredictable, slips into Hinglish4.2 / 10 ("Sounds like an Indian call center")
$T = 0.7$22.6%Frequent "lekin", "aapka", "kijiye"5.8 / 10
$T = 0.4$7.8%Occasional minor slips7.9 / 10
$T = 0.1$0.4%Pure, natural Romanized Nepali9.6 / 10 ("Authentic, local, trustworthy")
$T = 0.1$ + Regex Sanitizer0.0% (Zero Slips)Flawless Nepali brand voice9.9 / 10

Summary Checklist for Developers#

  1. Drop temperature immediately: Set temperature: 0.1 for all conversational Romanized Nepali generation. Never use default $T=1.0$ or $T=0.7$.
  2. Explicit negative prompting: Clearly list forbidden Hindi words ("aapka", "lekin", "kijiye", "bataiye") and their exact Nepali replacements in your system prompt.
  3. Keep top_p tight: Lower top_p to around 0.85 to slice off long-tail improbable tokens that cross linguistic boundaries.
  4. Deploy a deterministic post-regex filter: Guard against rare edge-case slips with an instant (<1ms) search-and-replace sanitizer.
  5. Protect local brand identity: In Nepal's close-knit commercial landscape, speaking authentic Romanized Nepali builds an immediate bond that turns fleeting ad clicks into loyal repeat buyers.

Ready to scale your business with AI & market validation?

We help Nepali businesses automate customer operations and validate profitable products with empirical data.

Chat on WhatsApp