When to Ask, When to Answer: Strategic Clarification for Ambiguous Reference Resolution in Dialogue
Organizations: Colorado State University
Abstract
For humans, referential disambiguation is a collaborative process involving clarification questions asked when they will meaningfully change the outcome. However, large language models (LLMs) have been shown to be biased toward premature answering, preferring definite single-turn responses over more clarification exchanges. In this paper, we study the problem of "strategic clarification" -- asking clarification questions in a reference game when their answers will narrow the set of candidate referents. We construct a controlled test environment from the SIMMC 2.1 dataset that records how many questions each ambiguous reference needs to be successfully resolved, and examine how baseline LLM behavior and common post-training methods ask clarifying questions vs. attempt to answer the referent. We also propose BACE (Belief-Aware Critic with Epistemic tracking), a lightweight action chooser method on top of a frozen LM backbone, and show that BACE more consistently chooses the optimal number of clarifying questions than methods such as GRPO and ArCHer.
Figures & tables
| Depth | 0 | 1 | 2 | 3 | 4–5 | Unres. | Total |
|---|---|---|---|---|---|---|---|
| Train | 7,405 | 2,613 | 840 | 162 | 15 | 47 | 11,082 |
| Dev | 617 | 247 | 74 | 18 | 3 | 1 | 960 |
| Devtest | 1,701 | 550 | 184 | 33 | 3 | 12 | 2,483 |
| Synth. | – | 4,792 | 6,565 | 7,243 | – | – | 18,600 |
Appendix figures & tables27 assets
Supplementary material from the paper’s appendix.
Appendix
| Metric | What it measures |
|---|---|
| Accuracy and cost | |
| Reward | Mean episode return (Eq. 1 ), weighing correct answers against the questions spent. |
| Accuracy | Fraction of episodes that end on the correct referent. |
| Questions | Average number of questions asked per episode. |
| When to ask | |
| Ask F1 | Balances precision (share of episodes with a question that were ambiguous) and recall (share of ambiguous episodes that received a question). |
| Natural | SFT | GRPO | ArCHer | BACE | |
|---|---|---|---|---|---|
| Devtest, 2,483 episodes | |||||
| Ask F1 | .218 | 1.000 | 1.000 (.000) | 1.000 (.000) | 1.000 (.001) |
| Over | .519 | .000 | .000 (.000) | .000 (.000) | .000 (.000) |
| Under | .739 | .000 | .000 (.000) | .000 (.000) | .001 (.001) |
| Halluc. | .520 | .000 | .000 (.000) | .000 (.000) | .000 (.000) |
| Hit | .369 | .981 | .964 (.027) | .958 (.013) | .981 (.000) |
| Natural | SFT | GRPO | ArCHer | BACE | |
| Ask-1, 550 episodes | |||||
| Hit | .155 | .978 | .992 (.005) | .985 (.011) | .978 (.000) |
| H+C | .044 | .976 | .990 (.003) | .983 (.010) | .978 (.000) |
| Ask-2, 184 episodes | |||||
| Hit | .049 | .891 | .702 (.342) | .647 (.144) | .853 (.000) |
| H+C | .016 | .859 | .660 (.324) | .623 (.148) | .853 (.000) |
| Natural | SFT | GRPO | ArCHer | BACE | |
|---|---|---|---|---|---|
| Dev, 960 episodes | |||||
| Ask F1 | .245 | 1.000 | .800 (.447) | 1.000 (.000) | .999 (.001) |
| Over | .455 | .000 | .000 (.000) | .000 (.000) | .000 (.000) |
| Under | .746 | .000 | .200 (.447) | .000 (.000) | .002 (.002) |
| Halluc. | .507 | .000 | .148 (.330) | .000 (.000) | .001 (.001) |
| Hit | .390 | .979 | .904 (.146) | .954 (.015) | .980 (.000) |
| Natural | SFT | GRPO | ArCHer | BACE | |
| Ask-1, 247 episodes | |||||
| Hit | .150 | .972 | .786 (.440) | .969 (.009) | .964 (.002) |
| H+C | .057 | .972 | .783 (.438) | .967 (.009) | .964 (.000) |
| Ask-2, 74 episodes | |||||
| Hit | .014 | .946 | .668 (.376) | .649 (.147) | .905 (.000) |
| H+C | .000 | .851 | .608 (.341) | .611 (.138) | .905 (.000) |
| Policy | Acc. | Qs | Reward | Ask F1 | Over | Under | Ask-1 | Ask-2 | Ask-3 |
|---|---|---|---|---|---|---|---|---|---|
| Dev, 960 episodes | |||||||||
| Direct Answer | .761 | .00 | .523 | .000 | .000 | 1.000 | .397 | .176 | .136 |
| Natural Behavior | .766 | .69 | .463 | .245 | .455 | .746 | .393 | .270 | .045 |
| Ask Once Then Answer | .881 | 1.00 | .662 | .526 | 1.000 | .000 | .785 | .378 | .318 |
| Ask Until Resolved | .865 | 1.37 | .593 | .526 | 1.000 | .000 | .721 | .392 | .273 |
| Uncertainty-gated | .823 | .55 | .591 | .762 | .000 | .385 | .555 | .365 | .409 |
| Pooled | Depth 1 | Depth 2 | Depth 3 | |
|---|---|---|---|---|
| Real episodes | 3,677 | 2,613 | 841 | 223 |
| Real vs. real | 0.52 | 0.50 | 0.54 | 0.57 |
| Real vs. synthetic | 0.70 | 0.59 | 0.60 | 0.63 |
| Training pool | real + synthetic, 29,635 episodes |
|---|---|
| Examples | 54,405 of 74,110 (within 1,280 tokens) |
| LoRA rank / | 16 / 32 |
| Learning rate | |
| Batch | 4, gradient accumulation 4 |
| Epochs | 1 (3,400 optimizer steps) |
| Question text | one template per attribute |
| LoRA rank / | 16 / 32 |
|---|---|
| Rollouts per episode ( ) | 4 |
| Sampling temperature | 0.8 |
| Episodes per batch | 8 (gradient accumulation 4) |
| PPO clip / passes per batch | 0.2 / 2 |
| KL coefficient to SFT ( ) | 0.04 |
| Learning rate |
| Actor LoRA rank / | 16 / 32 |
|---|---|
| Actor learning rate | |
| Actor KL coefficient to SFT | 0.04 |
| Actor schedule | 10 critic-only iterations, then 3 steps |
| of 4 transitions per iteration (54) | |
| Actor sampling temperature | 0.8 |
| Question attribute | sampled from the actor (argmax at evaluation) |
| Generator | SFT checkpoint, frozen |
|---|---|
| Prompt | ArCHer’s, plus the candidates in |
| Samples per branch | 2, temperature 0.8 |
| Finalist | random in training, highest length- |
| normalized log-probability at evaluation | |
| Critic LoRA rank / | 8 / 16 |
| Critic heads | 2 Q/V pairs; hidden state and features |
| Method | Learns from | Episodes | Env. steps | Opt. steps | Params | GPU h |
|---|---|---|---|---|---|---|
| SFT | oracle labels | 29,635 | – | 3,400 | 40.4M | 3.3 |
| GRPO | reward | 11,035 | 58.1k–58.7k | 38–66 | 40.4M | 3.4–3.5 |
| ArCHer | reward | 11,032 | 18.3k–18.5k | 5,654 | 67.9M | 5.2 |
| BACE | reward | 11,190 | 22.3k–22.5k | 28,164–28,308 | 27.7M | 18.2–19.0 |
| Pool | Episodes | Ask F1 | Acc. | Qs | Reward | Multi |
|---|---|---|---|---|---|---|
| Dev | ||||||
| Pilot | 150 | .978 | .857 | .54 | .661 | .354 |
| Real | 11,035 | 1.000 | .965 | .47 | .883 | .708 |
| Real + synth. | 29,635 | 1.000 | .986 | .48 | .925 | .865 |
| Devtest | ||||||
| Pilot | 150 | .973 | .867 | .46 | .688 | .330 |
| Reward | Devtest | |||||
|---|---|---|---|---|---|---|
| Dev | Devtest | Hit | Acc. | Ask-2 H+C | Ask-3 H+C | |
| SFT (real + synth.) | .925 | .938 | .981 | .990 | .859 | .479 |
| BACE, with the line | .930 (.004) | .935 (.009) | .977 (.007) | .989 (.005) | .832 (.038) | .514 (.084) |
| BACE, without the line | .917 (.005) | .922 (.005) | .974 (.007) | .982 (.003) | .804 (.028) | .361 (.241) |
| Flipped | |||
|---|---|---|---|
| Change | All | Gap | |
| No line | 0 | 0 | .0003 |
| Line lists every candidate | 0 | 0 | .0002 |
| from all candidates | 220 | 218 | .2988 |
| Reward | Devtest | |||||
|---|---|---|---|---|---|---|
| Dev | Devtest | Hit | Acc. | Ask-2 H+C | Ask-3 H+C | |
| SFT (real + synth.) | .925 | .938 | .981 | .990 | .859 | .479 |
| BACE, generator SFT (real + synth.) | .930 (.004) | .935 (.009) | .977 (.007) | .989 (.005) | .832 (.038) | .514 (.084) |
| BACE, generator SFT (real) | .936 (.000) | .945 (.000) | .954 (.000) | .995 (.000) | .739 (.000) | .604 (.000) |
| 8-iteration runs | Full pass | ||||||||
| Warm | It. 5 | End (it. 8) | Warm | End | |||||
| Seed | dev | dev | devtest | dev | devtest | dev | devtest | dev | devtest |
| 0 | .923 | .905 | .900 | .836 | .827 | .923 | .932 | .932 | .940 |
| 1 | .932 | .932 | .939 | .909 | .918 | .775 | .772 | .932 | .940 |
| 7 | .931 | .931 | .940 | .930 | .939 | .910 | .912 | .932 | .940 |
| 17 | .932 | .922 | .931 | .927 | .935 | .886 | .876 | .930 | .940 |
| Seed 0 (rerun) | Seed 7 | |||||||
|---|---|---|---|---|---|---|---|---|
| It. | Amb. | Res. | Asks | Reward | Amb. | Res. | Asks | Reward |
| Warm | .95 | .923 | .98 | .931 | ||||
| 1 | .96 | .931 | .98 | .791 | ||||
| 2 | .95 | .926 | .98 | .932 | ||||
| 3 | .00 | .500 | .98 | .932 | ||||
| 4 | .21 | .591 | .98 | .932 | ||||
| Draw | Ask rate | Sign agr. | Check | Reward | Under |
|---|---|---|---|---|---|
| Seed 0 | |||||
| a | .449 | .847 | pass | .905 | .023 |
| b | .390 | .856 | pass | .712 | .531 |
| c | .415 | .883 | pass | .932 | .000 |
| d | .458 | .838 | pass | .881 | .009 |
| Seed 7 | |||||
| Draw | Not exact | Episodes | |
|---|---|---|---|
| 0 | 4 | 83 | 8 |
| 1 | 4 | 91 | 12 |
| 2 | 8 | 86 | 10 |
| 3 | 5 | 95 | 13 |
| 4 | 9 | 83 | 9 |
| Method | Qs asked | Spatial | Bits | Best attr. | Repeat | No split |
|---|---|---|---|---|---|---|
| Dev | ||||||
| Natural Behavior | 758 | .029 | 0.18 | .127 | .496 | .865 |
| SFT | 460 | .265 | 1.65 | .858 | .015 | .007 |
| GRPO | 443 | .234 | 1.68 | .843 | .024 | .001 |
| ArCHer | 452 | .237 | 1.62 | .799 | .016 | .032 |
| BACE | 473 | .309 | 1.57 | .815 | .032 | .000 |
| Train | Dev | Devtest | |
| Labelled turns | 11,753 | 1,050 | 2,657 |
| Dropped | 671 | 90 | 174 |
| Unambiguous | 7,400 | 617 | 1,701 |
| Recoverable from history | 5 | 0 | 0 |
| Needs a question | 3,677 | 343 | 782 |
| Gold referent of the ambiguous episodes | |||
| Single gold | Fallback gold | |||||
| Method | Hit | Acc. | Reward | Hit | Acc. | Reward |
| Devtest, 380 and 402 episodes | ||||||
| Natural Behavior | .176 | .329 | .402 | .075 | .289 | .451 |
| SFT (start of RL) | .953 | .976 | .825 | .925 | .963 | .783 |
| GRPO | .907 (.060) | .961 (.033) | .802 (.058) | .863 (.108) | .930 (.057) | .730 (.101) |
| ArCHer | .901 (.026) | .956 (.012) | .788 (.022) | .833 (.057) | .913 (.028) | .694 (.051) |
Clarification Question Generation
Clarification question generation teaches AI systems to identify missing intent and ask targeted follow-ups before answering or acting.
See all 44 papers