LaMoGen: Language to Motion Generation Through LLM-Guided Symbolic Inference
Organizations: Department of Computer Science, Hong Kong Baptist University, HKSAR
Abstract
Human motion is highly expressive and naturally aligned with language, yet prevailing methods relying heavily on joint text-motion embeddings struggle to synthesize temporally accurate, detailed motions and often lack explainability. To address these limitations, we introduce LabanLite, a motion representation developed by adapting and extending the Labanotation system. Unlike black-box text-motion embeddings, LabanLite encodes each atomic body-part action (e.g., a single left-foot step) as a discrete Laban symbol paired with a textual template. This abstraction decomposes complex motions into interpretable symbol sequences and body-part instructions, establishing a symbolic link between high-level language and low-level motion trajectories. Building on LabanLite, we present LaMoGen, a Text-to-LabanLite-to-Motion Generation framework that enables large language models (LLMs) to compose motion sequences through symbolic reasoning. The LLM interprets motion patterns, relates them to textual descriptions, and recombines symbols into executable plans, producing motions that are both interpretable and linguistically grounded. To support rigorous evaluation, we introduce a Labanotation-based benchmark with structured description-motion pairs and three metrics that jointly measure text-motion alignment across symbolic, temporal, and harmony dimensions. Experiments demonstrate that LaMoGen establishes a new baseline for both interpretability and controllability, outperforming prior methods on our benchmark and two public datasets. These results highlight the advantages of symbolic reasoning and agent-based design for language-driven motion synthesis.
Figures & tables
| Method | SMT | TMP | HMN | R@3 | FID | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| supL | supR | armL | armR | supL | supR | armL | armR | arm-arm | arm-sup | sup-sup | ||||
| Real data | - | - | - | - | - | - | - | - | - | - | - | 0.216 | 0.001 | |
| MDM [ 28 ] | 0.380 | 0.380 | 0.335 | 0.257 | 0.316 | 0.316 | 0.329 | 0.231 | 0.119 | 0.226 | 0.258 | 0.180 | 22.81 | |
| ReMoDiff [ 37 ] | 0.470 | 0.470 | 0.427 | 0.395 | 0.377 | 0.377 | 0.385 | 0.322 | 0.179 | 0.264 | 0.351 | 0.192 | 7.121 | |
| MoDiff [ 36 ] | 0.491 | 0.491 | 0.470 | 0.411 | 0.362 | 0.362 | 0.412 | 0.328 | 0.180 | 0.281 | 0.361 | 0.196 | 5.701 | |
| CoMo [ 10 ] | 0.358 | 0.358 | 0.474 | 0.382 | 0.211 | 0.211 | 0.284 | 0.250 | 0.203 | 0.298 | 0.252 | 0.176 | 21.94 | |
| Method | R-precision | FID | MM-Dist | Diversity | Multi-Mod. | |||||
|---|---|---|---|---|---|---|---|---|---|---|
| Top-1 | Top-2 | Top-3 | ||||||||
| HumanML3D | Real data | - | ||||||||
| Guo et al. [9] | ||||||||||
| MDM [ 28 ] | ||||||||||
| ReMoDiff [ 37 ] | ||||||||||
| MoDiff [ 36 ] | ||||||||||
| Method | avg. SMT | avg. TMP | avg. HMN |
|---|---|---|---|
| Ikeuchi et al. [11] | 0.751 | 0.632 | 0.611 |
| Ours | 0.871 | 0.852 | 0.786 |
| Encoder | Num. |
|---|---|
| In Dim. | 512 |
| Feat. Dim. | 512 |
| Depth | 8 |
| Head | 8 |
| Head Dim. | 64 |
| FFN Dim. | 1024 |
| Method | LLM-related Procedure | Objective | Token Count (k) |
| CoMo [ 10 ] | Decompose Texts | Generate | 6.5 |
| Identify frames | Edit | 51 | |
| Identify body parts and edit | Edit | 53 | |
| Total | 110.5 | ||
| LaMoGen | Compose CDs | Generate | 5 |
| Modify CDs | Edit | 5 | |
| Method | SMT | TMP | HMN | R@3 | FID | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| supL | supR | armL | armR | supL | supR | armL | armR | arm-arm | arm-sup | sup-sup | ||||
| Real data | - | - | - | - | - | - | - | - | - | - | - | 0.797 | 0.002 | |
| LaMoGen (Dec) | 0.843 | 0.843 | 0.745 | 0.731 | 0.848 | 0.848 | 0.779 | 0.765 | 0.537 | 0.631 | 0.842 | 0.793 | 0.095 | |
| MDM [ 28 ] | 0.413 | 0.413 | 0.276 | 0.315 | 0.372 | 0.372 | 0.369 | 0.308 | 0.177 | 0.284 | 0.502 | 0.611 | 0.544 | |
| ReMoDiff [ 37 ] | 0.455 | 0.455 | 0.348 | 0.405 | 0.335 | 0.405 | 0.367 | 0.320 | 0.179 | 0.275 | 0.501 | 0.795 | 0.103 | |
| MoDiff [ 36 ] | 0.482 | 0.482 | 0.386 | 0.360 | 0.401 | 0.401 | 0.388 | 0.334 | 0.190 | 0.299 | 0.513 | 0.782 | 0.630 | |
| Top ref. | R@3 | FID | MM-Dist | Multi-Mod. |
|---|---|---|---|---|
| 1 | 0.755 | 0.595 | 3.840 | 0.954 |
| 3 | 0.796 | 0.252 | 3.087 | 1.131 |
| 5 | 0.782 | 0.371 | 3.191 | 1.030 |
| 7 | 0.774 | 0.324 | 3.225 | 0.971 |
| Mask rat. | R@3 | FID | MM-Dist | Multi-Mod. |
| 0.1 | 0.789 | 0.258 | 3.008 | 1.092 |
| Code Dim | R@3 | FID | AITS |
|---|---|---|---|
| CoMo [ 10 ] | 0.790 | 0.262 | 0.58 |
| 256 | 0.759 | 0.310 | 0.28 |
| 384 | 0.783 | 0.295 | 0.32 |
| 512 | 0.796 | 0.252 | 0.45 |
| 768 | 0.802 | 0.241 | 0.57 |
| 1024 | 0.804 | 0.227 | 0.65 |
| Method | avg. SMT | avg. TMP | avg. HMN | R@3 | FID |
|---|---|---|---|---|---|
| Real data | - | - | - | 0.216 | 0.001 |
| MDM | 0.338 | 0.298 | 0.201 | 0.180 | 22.81 |
| MDM lbn | 0.475 | 0.438 | 0.271 | 0.204 | 1.932 |
| GPT4.1 | 0.533 | 0.501 | 0.392 | 0.208 | 1.861 |
| GPT4.1 ip | 0.496 | 0.467 | 0.328 | 0.200 | 3.408 |
| Method | R@3 | FID | MM-Dist | Div. | Multi-Mod. | Token Cost (k) | |
|---|---|---|---|---|---|---|---|
| Real data | 0.797 | 0.002 | 2.974 | 9.503 | - | - | |
| MDM | 0.611 | 0.544 | 5.566 | 9.559 | 2.799 | - | |
| CoMo | 0.790 | 0.262 | 3.032 | 9.936 | 1.013 | 6.5 | |
| Interval | 3 | 0.796 | 0.252 | 3.087 | 9.124 | 1.131 | 5.0 |
| 5 | 0.796 | 0.198 | 3.026 | 9.859 | 1.360 | 7.7 | |
| 7 | 0.800 | 0.184 | 2.992 | 9.840 | 1.413 | 10.3 | |
| Prompt #1: Conceptual cues composer |
|---|
| There are five digit collections describing movements, where each line consists of: [number] [Caption] - a general description of the motion sequence. [Support] - detailed descriptions of the movements of the supporting body parts, specifically the left and right feet, using a series of triplets. [Left hand] - detailed descriptions of the movements of the left hand, using a series of tuples. [Right hand] - detailed descriptions of the movements of the right hand, using a series of tuples. In the detailed descriptions, we specify the movement details for each body part and their duration in seconds. For the support movements, the details must be selected from these 54 categories: [1: steps to rest position, …, 54: holds in knee-flexed backward diagonally to left position]. For the hand movements, the details must be selected from these 81 categories: [1: moves close to shoulder, …, 81: moves relatively low backward diagonally to left]. For example, for the [Support] line, the triplet list would be like: (left, 1, 0.25), (right, 2, 0.25), (left, 1, 0.25) while (right, 2, 0.25). This means that the first movement is “left foot steps to rest position in 0.25 seconds”. The second movement is “right foot steps forward in 0.25 seconds”. The third movement is “left foot steps to rest position in 0.25 seconds while right foot steps forward in 0.25 seconds”. For the [Left hand] line, the tuple list would be like: (1, 0.5), (2, 0.2). This means that the first movement is “left hand moves close to shoulder in 0.5 seconds” and the second movement is “left hand moves forward in 0.2 seconds”. For the [Right hand] line, the structure and definition are similar to [Left hand] lines. Below is the main body of the digit collection describing the movements. You should strictly imitate the following content and create only one digit collection of YOUR_INPUT . Reply without explanation. |
| Prompt #2: Rephraser for generating motion descriptions |
| Rephrase the sentence creatively YOUR_INPUT . the step number is YOUR_INPUT , with the step order: YOUR_INPUT . |
| Code Idx. | Body-Part Group | SMPL Joint | Attribute | is Concpt. | Staff Col. |
| Support-L | Left foot | Direction (L/M/R) | ✓ | Left support | |
| Left foot | Direction (B/M/F) | ✓ | Left support | ||
| Left foot | Level (Lo./Mi./Hi.) | ✓ | Left support | ||
| Left knee | Bend | ✗ | Left leg gesture | ||
| Left hip | Bend | ✗ | Left leg gesture | ||
| Left foot & knee & hip | Hold | ✓ | Left support |
| Index | Semantics | Index | Semantics |
|---|---|---|---|
| 1 | steps to rest position | 28 | holds in rest position |
| 2 | steps forward | 29 | holds in forward position |
| 3 | steps backward | 30 | holds in backward position |
| 4 | steps to right | 31 | holds in right position |
| 5 | steps to left | 32 | holds in left position |
| 6 | steps forward diagonally to right | 33 | holds in forward diagonally to right position |
| Index | Semantics | Index | Semantics | Index | Semantics |
|---|---|---|---|---|---|
| 1 | moves close to shoulder | 28 | holds close to shoulder position | 55 | moves relatively to previous position |
| 2 | moves forward | 29 | holds forward position | 56 | moves relatively forward |
| 3 | moves backward | 30 | holds backward position | 57 | moves relatively backward |
| 4 | moves to right | 31 | holds right position | 58 | moves to relatively right |
| 5 | moves to left | 32 | holds left position | 59 | moves to relatively left |
| 6 | moves forward diagonally to right | 33 | holds forward diagonally to right position | 60 | moves relatively forward diagonally to right |