Dissecting AI
From the paper: Qwen-Audio-Jev: A Unified Interface for Audio Decisions

Typed Decisions from Question-Conditioned Audio

Generated answer text is an indirect way to make bounded audio decisions; Jev reads the pre-answer decoder state into a typed probability or rating output.

Read the paper ↗
The short version

What it is

  • Question-conditioned readout The model reads the audio together with the question and answer rules, then makes its decision from the internal state formed before it starts writing an answer.
  • Three typed outputs Choose among supplied options, estimate whether a claim is true, or return an expected rating from ordered levels.
  • Valid-answer masking Only options or rating levels actually offered in the question compete for probability; unused output slots are ignored.

Why it matters

Bounded audio questions can return outputs in the form the task needs, without parsing generated answer text. The supplied answer rules define what each choice means and which outcomes are legal.

Before getting into the mechanics, here is the short version: Jev makes an audio model answer bounded questions with a decision-shaped output instead of generated answer text. Ask it to choose from options, judge whether a claim is true, or rate something on ordered levels, and it returns probabilities or an expected rating for that request.

  1. Answer format: A text generator can describe an answer, but a task that needs one of several legal options has to interpret that text afterward. Jev makes the answer space part of the question and reads a typed result directly.
  2. Question matters: The same audio can support different decisions depending on what you ask. The canonical example is “Are these the same speaker?” for a pair of recordings: the system needs to condition its decision on that question, not just classify the audio into a fixed global label set.
  3. Legal outcomes: A decision should not assign probability to options the question never offered. Think of a menu: choosing among the dishes on this menu is different from choosing among every dish that has ever existed. The analogy stops at the interface; the model still has to understand the audio and descriptions.

The key intuition is to use the model’s internal state after it has processed both the audio and the question, but before it has seen or generated the answer. In familiar language, this is like taking a cache entry that already contains the context needed for the lookup, rather than asking the model to write a sentence and then scraping a label out of it. The prompt also tells the system what kind of answer is expected. The readout selected from that state determines the result type.

So what does each type actually return? For a multiple-choice question, the model assigns probability to each supplied candidate and can select the most likely one. The candidate order in the question determines which output position means what; positions are not permanent labels. For a binary question such as whether two recordings share a speaker, it returns the probability that the stated claim is true. An application can apply a threshold if it needs a yes/no action, but that threshold is a separate decision rule.

A rating question is different from either of those. Imagine asking for audio quality on ordered levels. The model keeps a probability distribution across the valid levels, then averages their indices using those probabilities. In other words, it can return a value between the low and high indices rather than only naming the most likely bucket. If an application uses a different numeric scale, it can map that expected index to its own levels; that mapping is separate from the native output.

Under the hood, the choice and rating projections have fixed capacity, so the implementation has to ignore spare positions when a question uses fewer candidates or levels. This is the crucial detail: normalize across the answers actually offered, not across the head’s entire capacity. The described implementation supports up to 64 choice candidates and up to 10 rating levels. NOUL is a scalar probability. These are bounds of this implementation, not universal definitions of the answer types.

So the real question was never just whether the system can produce a probability — it was whether the output means exactly what the question says it means. Typed outputs make that contract explicit, but a probability is not automatically a calibrated probability. And if a request contains several questions, the described system evaluates them separately, so the shared head should not be mistaken for simultaneous multi-question inference.

Read the deep dive

Why People Wanted It

Suppose you ask an audio model whether two clips contain the same speaker, which of several scenes is present, or how good a recording sounds. A text-generating model can answer in words, but then a bounded decision has to be recovered from that text. The real question is whether the model can use its audio-and-question understanding directly, while returning an output whose shape matches the answer space.

The audio encoder and adaptor still provide acoustic evidence, and the decoder still interprets the question and its answer specification. Jev changes the final readout: instead of generating answer tokens, it reads a hidden state computed before any target-answer tokens and maps that state to one of three typed outputs .

The Core Move

Use the final question-conditioned, pre-answer decoder state as the input to a decision head, then select the readout matching the requested answer type: h∗=Dθ(audio,q,c)t∗h^* = D_\theta(\text{audio}, q, c)_{t^*}, with rτ=Wτh∗+bτr_\tau = W_\tau h^* + b_\tau.

Here qq is the question, cc specifies the primitive and legal answers, and τ\tau selects CHOICE, NOUL, or SCORE. The state is computed before target-answer tokens, so causal attention does not let it see the gold answer .

Quiz
Which readout returns a probability distribution over candidate descriptions supplied in the question?
SCORE
CHOICE
NOUL

Why the Shared State Is Question-Conditioned

Now the version for readers who want more of the machinery: the key constraint is that the readout state must summarize both the audio and the requested decision, without including the answer itself. The question and answer specification are serialized into the text prefix; adapted audio embeddings are inserted at audio positions, and the shared decoder processes them together .

The readout position t∗t^* is the final token of that prefix. Since it precedes target-answer tokens and the decoder uses causal attention, its representation can depend on the audio and prompt, but not on the supervised answer tokens . The head has three affine projections from this same state: WC∈R64×dW_C \in \mathbb{R}^{64\times d}, WN∈R1×dW_N \in \mathbb{R}^{1\times d}, and WS∈R10×dW_S \in \mathbb{R}^{10\times d}, with d=2048d=2048 in the described implementation . The requested primitive chooses the active output and objective; three projections do not mean three questions are answered simultaneously [0, 1].

Why Candidate Masking Preserves the Meaning of Choices

Here is the part that gets technical: the choice and score projections have fixed capacity, but an individual prompt may define fewer legal outcomes. For CHOICE with NN candidates, only the first NN logits are normalized: pi=exp⁡(zi)∑j=0N−1exp⁡(zj)p_i = \frac{\exp(z_i)}{\sum_{j=0}^{N-1}\exp(z_j)}, for 0≤i<N0 \le i < N. In words, each supplied candidate competes only with the other supplied candidates; unused output positions are excluded .

The candidate descriptions occur in the prompt in the same order as their output indices. Thus an index has no permanent class meaning: the prompt supplies what each position means for this question . The described implementation supports 2–64 candidates . Why is this useful? It lets a fixed projection serve different answer sets without treating spare positions as legal answers.

Why the Three Readouts Mean Different Things

Now the deeper distinction: the same kind of hidden state is turned into different mathematical objects because the answer types ask different questions. CHOICE produces probabilities over its valid candidates and can select the highest-probability option . NOUL applies a sigmoid to its single logit, p(true)=σ(z)p(\text{true})=\sigma(z); that is a probability for the stated proposition, while any threshold used to turn it into a yes/no action is a downstream rule .

SCORE instead normalizes over the first KK ordered levels and takes their probability-weighted index, s=∑k=0K−1kpks=\sum_{k=0}^{K-1} k p_k. In words, it returns the expected level index, not merely the most likely level [1, 2]. The described implementation supports 2–10 levels . If application levels are equally spaced from aa to bb, the index expectation can be mapped to application units; for unevenly spaced levels, take the expectation over the declared values instead . That scale conversion is separate from the native index output . Do these typed probabilities alone guarantee calibration? No: probability quality still has to be evaluated separately .

Minimal Causal Code

This loop makes the valid-answer boundary visible. logits below are the projected outputs for one question; the hidden-state computation is omitted so the normalization and score are easy to inspect.

import torch
import torch.nn.functional as F

# logits: one fixed-capacity output vector; valid_count comes from the prompt.

def choice(logits, valid_count):
    valid_logits = logits[:valid_count]  # exclude unused candidate slots
    probs = F.softmax(valid_logits, dim=-1)
    selected_index = probs.argmax(dim=-1)
    return probs, selected_index

def noul(logit):
    return torch.sigmoid(logit)  # probability the proposition is true

def score(logits, valid_count):
    valid_logits = logits[:valid_count]  # exclude unused rating levels
    probs = F.softmax(valid_logits, dim=-1)
    levels = torch.arange(valid_count, device=logits.device, dtype=probs.dtype)
    expected_level = (probs * levels).sum(dim=-1)
    return probs, expected_level

What You Gain, and What You Lose

You gain outputs shaped like the decision: candidate probabilities for a supplied choice set, a probability for a binary claim, or a distribution-derived expected rating. The answer need not be generated token by token, and unused candidate or level slots do not enter the normalization [0, 1, 2].

You give up the flexibility of an unconstrained textual response at this readout: the question must specify a supported primitive and its legal answer space. The fixed-capacity choice and score projections also impose the implementation’s stated limits, and requests with multiple questions are evaluated separately rather than in one shared question pass [0, 1]. Finally, a probability-shaped output is not proof of calibration .

Quiz
A prompt supplies four valid rating levels, but the score projection has additional output positions. Which logits should enter the score softmax?
The single highest logit before normalization
All projection logits, because the extra positions represent implicit ratings
Only the four valid-level logits
Core Takeaway

The prompt defines the answer space; Jev turns the pre-answer state into probabilities or an expected level over exactly that space.