Why Context-Aware Translation Changes Everything
How context transforms translation quality: disambiguating polysemous words, maintaining tone, and API patterns for sending context to translation engines.
"Bank" means a financial institution or the side of a river. "Crane" is a bird or a machine. "Set" has over 400 definitions in English. Traditional machine translation handles these by picking the statistically most likely meaning — which works until it doesn't.
Google Translate translating "I went to the bank to fish" into German might produce "Ich ging zur Bank, um zu fischen" — which literally means going to the financial institution to fish. A context-aware system that reads the full paragraph about a fishing trip would pick "Ufer" (riverbank) instead.
This isn't a contrived example. Polysemy — words with multiple meanings — is one of the top sources of machine translation errors, and it affects every language pair.
The scale of the ambiguity problem
English has an unusually high number of polysemous words compared to other European languages. Some common ones that cause translation errors:
- "right" — correct, direction, legal entitlement (German: richtig, rechts, Recht)
- "match" — game, to correspond, fire starter (Japanese: 試合, 一致する, マッチ)
- "spring" — season, water source, coil, to jump (Spanish: primavera, manantial, resorte, saltar)
- "draft" — rough version, air current, military conscription, beer from tap
- "charge" — accusation, electrical, cost, attack, responsibility
How LLMs solve disambiguation
LLMs don't translate word by word or even sentence by sentence in the traditional sense. They process the full input as a coherent text and generate the translation with full awareness of context. This means:
But there's a catch: the LLM only has the context you give it. If you send individual strings for translation — which is how most i18n workflows work — you're throwing away all the context that makes LLM translation better than NMT.
API patterns for providing context
The simplest approach is to send surrounding text alongside the string you're translating: