Apply to my task
arXiv:2601.19871 ★ 73 Jan 27, 2026

Reflective Translation: Two-Pass Generation With Self-Reflection

Key result

Finding: An LLM doesn't see its own mistakes during generation: it moves left to right through the text and never goes back. Like a writer without a draft: missed a detail, distorted the meaning, and the text has already rolled on. The method lets the model see and fix what it missed on the first generation. Two passes instead of one: first a draft, then a structured critique (errors → fixes → key content), then a revision based on the critique. Statistical significance of p < 10⁻⁴⁴: a consistent quality gain.

01

TL;DR

Reflective Translation is a prompting technique where the model writes a draft, critiques it against structured criteria and generates an improved version. It works in a regular chat via two requests: first the draft, then critique + revision.

Models are bad at catching their own mistakes "on the fly" during generation: they move forward through the text and never look back. Like a writer working without a draft: missed a detail, distorted the meaning, overlooked an inconsistency, and the text has already rolled on. If you ask the model to first produce the result and then critique it separately, it switches into analysis mode and sees what it missed while generating.

The method gives the model a structure for its critique: (1) find the errors (omissions, distortions, inaccuracies), (2) spell out the fixes (what exactly to correct), (3) flag the critical content (what must be kept). Based on that critique, the model generates an improved version. The study showed a consistent quality gain on the second pass with very high statistical significance (p < 10⁻⁴⁴).

Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.

02

Method Blueprint

STEP 1: Generate a draft
→ first version of the text

STEP 2: Structured critique (in a separate request)
→ (1) list of errors
→ (2) instructions for fixing them
→ (3) key elements that must be kept

STEP 3: Generate a revision based on the critique
→ improved version

Three separate requests to the model.

03

Example

Task: Write a LinkedIn post about a new feature in your SaaS product. You need to hit the right tone (not corporate, but professional) and not miss the key benefits.

Prompt 1 (draft):

Write a LinkedIn post for the SaaS company SubDesk.io (subscription management).

New feature: automatic renewal with a 15% discount for customers who have been paying for more than a year.

Tone: friendly pro, not corporate, no exclamation marks and no "we're thrilled".

Length: 3-4 sentences.

<START_POST>
[post text]
<END_POST>

Prompt 2 (critique):

Original task: [copy prompt 1]

Draft:
[paste the result from prompt 1]

Analyze the draft using this structure:

1. ERRORS: what's missing, distorted, or unnecessary
2. FIXES: specific instructions on what to correct
3. CRITICAL CONTENT: key elements that must be kept

Output only the analysis, no new text.

Prompt 3 (revision):

Original task: [copy prompt 1]

Based on this critique:
[paste the result from prompt 2]

Write an improved version of the post.

<START_POST>
[improved text]
<END_POST>

Result:

In prompt 2 the model will show what it spotted: maybe the draft is too formal, doesn't highlight the benefit ("you pay less" matters more than "auto-renewal"), or leaves out that the feature is live starting today. In prompt 3 it produces a version with those issues fixed: the tone is sharper, the emphasis is in the right place, the details are kept.

04

Why It Works

An LLM generates text sequentially, token by token, moving forward. The model doesn't "see the whole text at once" the way a human editor does. It moves linearly and doesn't go back to check how the parts fit together. Hence missed details, tone drifting partway through the text, and mismatches between the beginning and the end.

When the model analyzes a finished text, it switches into a different mode. The whole draft is in context, so it can compare it with the original task, check coherence and notice what fell out. Critiquing is easier than generating: finding problems in a finished text is easier than producing a perfect text on the first try.

The structure of the critique (errors → fixes → critical content) gives the model clear rails for its analysis. Without structure, the model may output a vague "not bad, but could be better". With structure, it has to name specific errors, spell out specific fixes and flag what can't be lost. That turns fuzzy self-reflection into instructions for the revision.

Control levers:

  • Criteria in the "Errors" block: add your own: "check the facts", "find corporate jargon", "assess the emotional tone". The more specific the criterion, the more precisely problems get found.
  • Keyword masking: if the model copies the draft almost verbatim, replace specific words/phrases in the critique with <MASK>. This forces the model to apply the critique semantically instead of copying the text.
  • Number of iterations: for simple tasks one pass (draft → revision) is enough. For complex ones you can do a second round: revision → critique of the revision → third version.
05

Prompt Template

Prompt 1: Draft:

{task_description}

{quality_criteria}

Output the result in this format:
<START_OUTPUT>
[text]
<END_OUTPUT>

Prompt 2: Critique:

Original task: {task_description}

Draft:
{result_from_prompt_1}

Analyze the draft using this structure:

1. ERRORS: what's missing, distorted, unnecessary, or doesn't match the task
2. FIXES: specific instructions on what to correct and how
3. CRITICAL CONTENT: key elements that must be kept

Output only the structured analysis. Don't write a new version of the text.

Prompt 3: Revision:

Original task: {task_description}

Based on this critique:
{result_from_prompt_2}

Write an improved version.

<START_OUTPUT>
[improved text]
<END_OUTPUT>

What to fill in: - {task_description}: what needs to be done + context - {quality_criteria}: tone, length, required elements, constraints - {result_from_prompt_1} and {result_from_prompt_2}: copy the model's answers from the previous steps

Optional: - Add your own criteria to the "ERRORS" block (fact-checking, emotional tone, structure) - If the model copies the draft almost word for word, replace key words in the draft with <MASK> before prompt 2

06

Limitations

⚠️ Three requests instead of one: The method needs three separate calls to the model. For quick tasks ("translate this phrase") it's overkill. It pays off where quality matters more than speed.

⚠️ Not for every task: If the task is simple and clear-cut ("make a list of 5 items"), the model will nail it on the first try. Reflection helps where there are subjective criteria (tone, style, balance of detail) or complex constraints (keep the facts + simplify the language + cut it in half).

⚠️ The model only sees what you specified: If you didn't spell out quality criteria in prompt 1, the model won't guess them during the critique. The structure helps, but the basic task description has to be complete.

07

How They Studied It

The team tested the method on machine translation from English into African languages (isiZulu and isiXhosa). These are low-resource languages with few parallel texts for training, and models often get them wrong. They tested on GPT-3.5 and Claude Haiku 3.5.

The logic is simple: they took sentence pairs (English → target language) from the OPUS-100 and NTREX-African datasets. The model translates twice: first directly, then a second time after self-reflection (draft → critique → revision). They compared the quality of the first and second translations on two metrics: BLEU (word overlap with the reference) and COMET (semantic accuracy, which judges meaning, not just words).

The result: the second translation is consistently better than the first. And COMET (semantic accuracy) grew more than BLEU (exact word match), which means the method improves grasp of meaning rather than just nudging words toward the reference. Statistically the improvement is very strong: the p-value for BLEU = 1.45×10⁻⁴⁴, for COMET = 1.10×10⁻⁶⁵ (the probability that it's chance is practically zero). The effect size of ~0.95 by rank-biserial correlation means it's a practically meaningful improvement, not just a statistical artifact.

They tested three prompting strategies (zero-shot, chain-of-thought, few-shot): reflection works with all of them, but few-shot + reflection gives the most stable results. In-context examples help the model calibrate its critique better.

An interesting detail: they tested a confidence threshold. If you select for revision only the translations where the model is unsure, the average quality gain is higher (but coverage is lower). That confirms reflection works as targeted correction, not a blanket improvement of everything.

08

Adaptations and Extrapolations

🔧 Technique: Drop the critique structure → free-form self-reflection

If the task is creative (storytelling, creative copy), a rigid structure (errors → fixes → content) can be limiting. Try free-form self-reflection:

Prompt 2 (free-form critique):

Read the draft as an editor. What works? What doesn't? What should be strengthened, what should be cut?

Draft:
{text}

Give an honest editorial assessment.

The model will give a less structured but more holistic analysis, and it may catch things that don't fit into the "errors/fixes" frame.

🔧 Technique: Keyword masking → forced rephrasing

The study used RAKE to automatically extract keywords and replace them with <MASK>. By hand you can do it more simply:

Prompt 2 (with masking):

Draft:
"Our new <MASK> lets you <MASK> save up to <MASK> a month"

[Critique]

Important: reconstruct each <MASK> from the meaning; don't copy from the draft.

This forces the model to apply the critique semantically instead of just tweaking a couple of words in the finished text. Useful if the model is too conservative in its revision.

🔧 Combo: Reflection + A/B variants

Prompt 3 (multiple revisions):

Critique:
{analysis_from_prompt_2}

Based on the critique, create TWO variants of the improved text:

Variant A: minimal edits, keep the draft's structure
Variant B: a radical rework, prioritizing the critique

<VARIANT_A>
[text]
</VARIANT_A>

<VARIANT_B>
[text]
</VARIANT_B>

You get two approaches to revision: a conservative one and a bold one. You can pick one or combine the best of both.

09

Resources

Reflective Translation: Improving Low-Resource Machine Translation via Structured Self-Reflection
Nicholas Cheng (Independent Researcher), 2026
Code and data: github.com/Nickcheng123/reflective-translation-mt

The study builds on: - Reflexion (Shinn et al., 2023): verbal reinforcement learning through reflection - Self-Refine (Madaan et al., 2023): iterative refinement through internal feedback - Chain-of-Verification (Creswell & Shanahan, 2023): improving factuality through verification

Datasets: OPUS-100 (Tiedemann, 2012), NTREX-African (Nekoto et al., 2023)
Metrics: BLEU (Papineni et al., 2002), COMET (Rei et al., 2020)

Research digest

Key result

Finding: An LLM doesn't see its own mistakes during generation: it moves left to right through the text and never goes back. Like a writer without a draft: missed a detail, distorted the meaning, and the text has already rolled on. The method lets the model see and fix what it missed on the first generation. Two passes instead of one: first a draft, then a structured critique (errors → fixes → key content), then a revision based on the critique. Statistical significance of p < 10⁻⁴⁴: a consistent quality gain.

Principle

Separate generation from analysis: don't make the model do both at the same time. Step 1: The model generates a draft for the task. Step 2: The model analyzes the draft in critic mode: it looks for errors, spells out fixes and flags what to keep. The whole draft is in context and can be compared with the task. Step 3: The model generates a revision based on the critique. Critiquing is easier than generating: finding problems in a finished text is easier than producing a perfect one on the first try. Three separate requests to the model.

Why it works

An LLM generates sequentially, token by token, moving forward. The model doesn't "see the whole text at once" the way a human editor does. It moves linearly and doesn't go back to check how the parts fit together. Hence missed details, tone drifting partway through, and mismatches between the beginning and the end. When the model analyzes a finished text, it switches into a different mode. The whole draft is in context, so it can compare it with the task, check coherence and notice what fell out. The critique structure provides clear rails: without structure the model will output a vague "not bad, but could be better". With structure (errors → fixes → critical content) it has to name specific problems and spell out specific fixes. That turns fuzzy self-reflection into instructions for the revision.

When to apply

For tasks with complex requirements → writing content where tone/style/balance of detail matter (blog posts, marketing copy, documentation), especially when you need to satisfy several criteria at once (facts + plain language + short format). NOT a fit for: simple, clear-cut tasks ("make a list of 5 items", "translate this phrase"): the model will nail them on the first try, and three requests are overkill.

Mini recipe

1. Prompt 1: Draft: Describe the task + quality criteria (tone, length, required elements). Ask for the result in tags `text`. 2. Prompt 2: Critique: Copy the original task. Paste the draft from prompt 1. Ask for an analysis using this structure: • ERRORS: what's missing, distorted, unnecessary • FIXES: specific instructions on what to correct • CRITICAL CONTENT: key elements to keep Specify: "Output only the analysis, no new text". 3. Prompt 3: Revision: Copy the original task. Paste the critique from prompt 2. Ask for an improved version based on the critique. Option: If the model copies the draft almost word for word, replace key words in the draft with `` before prompt 2. That forces it to apply the critique semantically.

Examples

[BAD]: `Write a LinkedIn post about a new feature for a SaaS company. Tone: friendly pro, not corporate, no exclamation marks. Feature: auto-renewal with a 15% discount for customers of 1+ year. Length 3-4 sentences.`: one request, and the model may miss details or let the tone drift partway through. [GOOD]: Prompt 1: `Write a LinkedIn post for the SaaS company SubDesk.io. Feature: auto-renewal with a 15% discount for customers of 1+ year. Tone: friendly pro, not corporate. Length: 3-4 sentences. [text]` Prompt 2: `Original task: [copy prompt 1]. Draft: [result from prompt 1]. Analyze: 1) ERRORS: what's missing/distorted/unnecessary, 2) FIXES: what to correct, 3) CRITICAL CONTENT: what to keep. Analysis only, no new text.` Prompt 3: `Original task: [copy prompt 1]. Based on the critique: [result from prompt 2]. Write an improved version. [text]` In prompt 2 the model will notice: the draft is too formal, doesn't highlight the "you pay less" benefit, leaves out that the feature is live starting today. In prompt 3 it fixes those points.

In plain words

The idea behind Reflective Translation is that models are, by nature, compulsive talkers who speak first and think later. When an LLM writes text, it generates it strictly forward, token by token, and can't "rewind" to fix a slip at the start of a sentence. So we get the classic problem: the model loses the thread, mixes up facts or drifts off tone halfway through a paragraph. The method makes the model stop and literally take a look in the mirror, turning a linear stream of consciousness into deliberate work on its mistakes.

It's like writing an important text to your ex at 3 a.m.: in the moment you feel like a damn genius, but reread it five minutes later and you cringe. Reflective Translation is that inner voice that says: "Dude, you overdid it here, and over there you completely forgot what you were talking about". Instead of dumping the first draft that comes to mind, the model makes a rough sketch, then tears it apart point by point itself, and only after that delivers a decent result.

In practice it works through structured self-reflection: you don't just ask "make it better", you make the model evaluate the draft against strict criteria. First comes generating the draft, then the critique stage, where the AI looks for omissions, distorted meaning and stylistic blunders. Only once the model has rubbed its own nose in its mistakes does it do the final revision. This two-step loop turns an ordinary chat into a full-fledged translation agency or editorial desk where the proofreader and the author share one head.

Although the method was tested on translation into rare languages, the principle is universal for any complex work with text. Whether it's a LinkedIn post, a feature description for a SaaS product or a complex report, linear generation will always slip up on the details. If you need the model not just to "write something" but to nail the tone of voice and not lose important meaning, make it reflect. That turns AI from a random phrase generator into an attentive editor who sees the text as a whole, not in pieces.

Bottom line: a model's first answer is always junk or a half-baked product, even if it looks decent. Want quality? Build a critique stage into your prompt and make the model rebuild the text based on its own notes. Reflective Translation proves that two requests with a pause to "think" beat one long wall of text hands down. Anyone who keeps using the first result without edits gets bland, middle-of-the-road content that AI detectors crack like nuts.

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on Reflective Translation: Two-Pass Generation With Self-Reflection arXiv:2601.19871

Sign in to apply this study New accounts get 50 free credits.