This protocol supplies the Goal, Constraint, Action, Spatial, Logic, and Other labels used by the instruction-component masking ablation shown in Results. Each deduplicated CALVIN instruction is labeled automatically, loaded into a span-colored viewer, and checked or corrected by a human annotator. During the ablation, only the corresponding spans in the LGSR encoder’s instruction are masked; the policy always receives the full instruction, isolating representation-level effects.
Read the full annotation prompt
[SYSTEM]
You are an expert annotator for robot-instruction semantics.
You must label tokens/spans into exactly five classes:
- G (Goal): target objects or entities (the noun head of the target NP).
- C (Constraint): attributes, colors, quantities, determiners, ordinal words that restrict G or A.
- A (Action): executable actions (verbs and their particles), e.g., "pick up", "take off".
- S (Spatial): spatial/positional/relational expressions (prepositions, directional adverbs, PP chunks).
- L (Logic): sequencing/logic connectors ("and", "then", "if", "before", "after", ...).
Tokens that fall into none of the five classes are tagged O.
Rules:
1) Prefer span-level labeling with contiguous spans. Multiword expressions like "pick up", "in front of" must be a single span.
2) Within a noun phrase, the head noun is G; its modifiers (color/quantity/ordinal) are C.
3) Spatial phrases that modify G or motion are S (e.g., "in the drawer", "towards the door").
4) Logic words are L and never overlap with A/G/C/S.
5) If a pronoun clearly refers to the current G (e.g. "pick it up"), label the pronoun "it" as G.
6) Output both SPANS and BIO:
- SPANS: a list of {start, end, label, text} where start/end are token indices (end exclusive).
- TOKENS: the tokenized sequence.
- BIO: BIO tags aligned with TOKENS (B-*, I-*, or O); BIO must reflect the same spans.
Tokenization: split by whitespace and punctuation, but keep underscores (e.g., "pick_up"). Do not merge spans across non-adjacent tokens.
Return JSON with keys "tokens", "spans", "bio". No commentary.
[FEW-SHOT EXAMPLE 1]
INPUT: "go towards the pink block in the drawer and pick it up"
{
"tokens": ["go","towards","the","pink","block","in","the","drawer","and","pick","it","up"],
"spans": [
{"start":0,"end":1,"label":"A","text":"go"},
{"start":3,"end":4,"label":"C","text":"pink"},
{"start":4,"end":5,"label":"G","text":"block"},
{"start":1,"end":8,"label":"S","text":"towards the pink block in the drawer"},
{"start":8,"end":9,"label":"L","text":"and"},
{"start":9,"end":12,"label":"A","text":"pick it up"},
{"start":10,"end":11,"label":"G","text":"it"}
],
"bio": ["B-A","B-S","I-S","B-C","B-G","B-S","I-S","I-S","B-L","B-A","B-G","I-A"]
}
[FEW-SHOT EXAMPLE 2]
INPUT: "go to the tower of blocks and take off the top one"
{
"tokens": ["go","to","the","tower","of","blocks","and","take","off","the","top","one"],
"spans": [
{"start":0,"end":1,"label":"A","text":"go"},
{"start":1,"end":6,"label":"S","text":"to the tower of blocks"},
{"start":6,"end":7,"label":"L","text":"and"},
{"start":7,"end":9,"label":"A","text":"take off"},
{"start":10,"end":11,"label":"C","text":"top"},
{"start":9,"end":12,"label":"G","text":"the top one"}
],
"bio": ["B-A","B-S","I-S","I-S","I-S","I-S","B-L","B-A","I-A","B-G","B-C","I-G"]
}
[FEW-SHOT EXAMPLE 3]
INPUT: "take off the block that is on top of the other one"
{
"tokens": ["take","off","the","block","that","is","on","top","of","the","other","one"],
"spans": [
{"start":0,"end":2,"label":"A","text":"take off"},
{"start":3,"end":4,"label":"G","text":"block"},
{"start":6,"end":9,"label":"S","text":"on top of"},
{"start":9,"end":12,"label":"C","text":"the other one"}
],
"bio": ["B-A","I-A","O","B-G","O","O","B-S","I-S","I-S","B-C","I-C","I-C"]
}
[INFERENCE]
Now annotate the following sentence:
INPUT: "{sent}"
Return JSON only.