动作 AI · 5-4 · 紧急任务

从词语到动作 — 把语言和动作放在同一张地图上

在 5-3 中,动作变成了由 16 个数字构成的点。这次把语言也变成点。为了让“손을 흔든다”(挥手)这句话和挥手的动作落在同一张地图的同一个位置,我们同时训练文字漏斗和动作漏斗。先看一开始缠在一起的线如何在学习中找到自己的配对,最后输入句子让火柴人动起来。一句“춤춰”(跳舞吧)也是在这里第一次变成动作。

40 格词袋:句子转换成的数字个数
8 格语言和动作共用的地图大小
1.90 → 0.01配对损失,训练 400 步(代码 1)
100%140 个测试动作 → 猜中句子(代码 1)
5 / 7训练中没见过的测试句子找到正确动作的数量(代码 1)
2 段可在 Colab 中直接运行的代码
1任务

第四道指令 — “让它听口令就动起来”

5-3 的生成器 E 需要我们亲自挑选“扔出动作聚集的位置”。这次由人用语言来挑选。为此,语言也必须成为地图上的点。

[SYSTEM] 06:20 · 已收到 5-3 完成报告。下一道指令:用句子挑选动作。附件:第七个场景“跳舞”,每个场景各附 4 个句子。
博士
博士我给每个动作都配了说明句。“캔을 멀리 던진다”(把罐子远远扔出)、“반갑게 손을 흔든다”(高兴地挥手)……把句子和动作绑成配对,配对的在地图上靠近,不相干的离远!
助手
助手可是句子是文字啊。文字也得先变成数字,才能放进漏斗吧?
果蝇研究员
果蝇研究员从最简单的方法开始。词典里的词语片段出现了就记 1,没有就记 0。这就是词袋。虽然粗糙,但用来看它在哪里出错正合适。
研究室机器人加入跳舞场景后,动作共有七类。句子每类四个,其中一个作为测试用藏了起来。
火柴人敲击发光的键盘,对话气泡里的文字片段流淌出来,变成五个越跳越欢的火柴人队列,助手、博士和机器人们都很开心的场景
句子散成片段、变成动作的场景。第 2~5 节将依次搭建这条路。
2语言即数字

语言也是数字 — 40 格词袋

输入句子或点击示例试试。词典里的 40 个词语片段中,只有出现在句子里的才变成 1。这 40 个数字就是文字漏斗的输入。

在对话气泡和发光的方块碎片之间,把碎片扔出去、排成一行、举在手上,小火柴人就跳起舞来的文本提示火柴人
负责把句子拆成片段的文本提示担当

面向初学者的讲解

词袋只从“有哪些词”这个角度看句子。词序、助词、上下文全部丢掉。所以“길에 캔을 던져 버린다”(把罐子扔在路上)里的“버린”(扔掉)和“쓰레기통에 쓰레기를 버린다”(把垃圾扔进垃圾桶)里的“버린”会点亮同一个格子——尽管一个是乱扔,一个是正常。这种粗糙会在第 6 节变成真正的错误。把句子的顺序和上下文也装进数字的方法,在 3-5 和 3-8 中讨论。

3配对

配对 — 缠在一起的线找到自己的配对

左边是句子,右边是动作(顺序是故意打乱的)。线的粗细表示该句子选择那个动作的概率。点击“播放训练”或拖动滑块推进训练吧。

训练步数0
左侧句子

代码 1 的结果 — 随训练步数的变化

训练步数配对损失7 个测试句子 → 最近的 5 个测试动作中属于正确类别的比例140 个测试动作 → 最近句子的类别正确
0—2.9%10.0%
101.76328.6%55.0%
251.31765.7%72.1%
500.39571.4%96.4%
1000.09071.4%100.0%
4000.01071.4%100.0%

上面画面中的训练是在浏览器里重新运行同样的计算(随机数不同),所以各步的数字略有不同。7 个测试句子中有 5 个找到了正确的动作。没找到的 2 个将在第 6 节中查看。

对比学习修正的是什么

  1. 每类各抽一个场景和一个句子,共 7 对。
  2. 把 7 个句子用文字漏斗(40 → 8)、7 个场景用动作漏斗(5-3 的 16 个数字 → 8)进行折叠。
  3. 两者相乘(内积),得到 7 × 7 的得分表。对角线就是真正的配对。
  4. 按行、按列用 softmax 算出概率,然后稍微调整两个漏斗的权重,使对角线上的概率接近 1。这样重复 400 次。

以这种方式对齐语言和图像的 CLIP [R1],以及对齐语言和动作的 MotionCLIP [R2],都是同样的原理。真实模型用 Transformer 作文字漏斗,用数亿对数据作配对。

4同一张地图

同一张地图上的语言和动作

把 8 格地图上的点统一缩放到长度 1(只看方向)后,再压到分布最广的两个方向上画出来。圆点是动作场景,菱形是句子。把训练步数从 0 移到 400,看看句子是否走到自己的动作群旁边。

训练步数400

训练之后,同色的圆点(动作)和菱形(句子)聚到了一起。语言和动作住进了“同一张地图的同一个街区”。现在把一个句子放到地图上,就可以取出附近的动作,或者在那个街区里抽取新的动作。

5语言 → 动作

输入句子,火柴人就会动起来

输入句子后按 Enter。“查找”直接取出地图上最近的场景,“生成”在最近的 5 个场景聚集的位置抽取新动作。用“~다가”(……着……)、“~고 나서”(……之后)把两个句子连起来,就会按前后顺序拼接。

方式

代码 2 的结果 — 生成的动作真的属于那一类吗

方式21 个训练句子(×5 次)7 个测试句子(×5 次)
查找100.0%71.4%
生成100.0%71.4%

生成动作的类别,按它在 5-3 的潜在空间中离哪个类别中心最近来判定。“춤춰”(跳舞吧)→ 生成的动作被判定为跳舞,骨长误差为 5.4%。拼接:“걸어가다가 손을 흔든다”(走着走着挥手)→ 前半段路过 · 后半段挥手,“손을 흔들고 나서 춤춰”(挥手之后跳舞)→ 挥手 · 跳舞,“캔을 줍고 쓰레기통에 넣는다”(捡起罐子放进垃圾桶)→ 捡起 · 放进垃圾桶。

如何让“生成”更好

本篇的“生成”用均值和离散程度来近似地图上最近的五个场景聚集的位置,再用 5-3 的线性解码器展开。真实的文本–动作生成模型,要么使用以句子为条件、从噪声中逐步去噪得到动作的扩散模型(MDM [R4]),要么把动作变成 token、接着续写下一个 token(T2M-GPT [R5])。训练数据方面,由人为每个动作配上句子的 HumanML3D [R3] 被广泛使用。

6局限

词袋出错的地方,以及最后的任务

7 个测试句子中有 2 个找到了不相干的动作。两者的原因都很明确。

测试句子正确答案找到的动作(最近的 5 个)为什么错了
“길에 캔을 던져 버린다”(把罐子扔在路上)远远扔出放进垃圾桶 × 5“던져”(扔)是训练句子中没出现过的片段,而“버린”(扔掉)是从放进垃圾桶的句子(“쓰레기통에 쓰레기를 버린다”,把垃圾扔进垃圾桶)中学到的片段。因为不懂上下文,被拉向了“버린다 = 放进垃圾桶”
“손을 펴서 떨어뜨리고 걸어간다”(松手丢下后走开)丢在脚下路过 × 5“걸어”(走)、“간다”(去)强烈地把它拉向路过。词袋不知道哪个词才是核心动作(丢下)
“걷다가 손 흔들기”(走着挥手)(第 5 节)路过 → 挥手前半段不对“걷”(走)虽然在词典里,但在训练句子中一次也没出现过(训练句子用的都是“걸어”)。从没学过的格子在地图上不指向任何地方

上表中的“找到的动作”是代码 1 的结果。在浏览器里重新训练的第 5 节中,“길에 캔을 던져 버린다”(把罐子扔在路上)有时会走向捡起。随训练的随机数不同,被拉去的地方也不同,但找不到扔出的原因(不懂上下文的词袋)是一样的。

本篇学到的内容
  • 语言也会变成点:把句子变成数字,再用漏斗折叠,就会和动作放在同一张地图上。
  • 靠配对学习:对比学习只凭“配对的靠近,不相干的远离”就让两个漏斗对齐。损失 1.90 → 0.01。
  • 从地图上取出、抽取:查找和生成,以及按句子顺序拼接。
遗留问题
  • 文字漏斗太浅:要处理词序、上下文和没见过的词,需要 Transformer 这样的文本编码器(3-8)。
  • 火柴人终究是火柴人:舞蹈虽然生成了,但还只是骨架。给这副骨架穿上人(助手)的样子、做成视频,就是最后的任务。
音符飘浮之中,火柴人以正面、侧面、背面站立,下排是挥臂、转圈、指向、抬膝四种舞蹈姿势
下一个任务预告 · 火柴人的舞蹈动作卡
博士
博士一句“춤춰”(跳舞吧),火柴人就跳起舞来了。最后一步是给这副骨架穿上人的样子。助手,准备好了吧?
助手
助手……果然是我来跳啊。意思是火柴人一跳舞,就会出来我一模一样跟着跳的视频?
果蝇研究员
果蝇研究员在 5-5 里我们会打开真实的视频看看。画面上还显示着一个叫“动作一致率”的数字呢。

Colab 代码 —— 亲自运行本页内容

两段代码都只使用 Colab 默认安装的库。“下载笔记本(.ipynb)”后,在 Colab 中通过文件 → 上传笔记本打开,或者复制后粘贴到新笔记本的单元格中。

代码 1 · 词袋与对比学习 — 把语言和动作放在同一张地图上对应第 2~4 节 · numpy · CPU 约 5 秒

加入跳舞场景,把句子变成词袋、把动作变成 16 个数字后,用对比学习让两个漏斗对齐。输出各训练步数的损失和测试句子的命中情况。换成自己的数据 在 CAPTIONS 中放入你的动作说明句,在 VOCAB 中放入要用的词语片段。

运行结果(2026-10-05 运行,numpy 2.4 · CPU)。固定了种子,任何时候运行结果都相同。
代码 2 · 输入语言就输出动作 — 查找、生成、拼接对应第 5 节 · numpy · CPU 约 5 秒

用训练好的两个漏斗,由句子 → 查找或新生成动作,并把用“~다가”(……着……)连接的句子前后拼接起来。在潜在空间中判定生成动作的类别。第 5 节的表格直接由这段输出生成。

运行结果(2026-10-05 运行,numpy 2.4 · CPU)。固定了种子,任何时候运行结果都相同。

AI 应用提示词 —— 以这段代码为起点

这是粘贴到 ChatGPT、Qwen、Claude 等 AI 助手中的提示词。点击“复制”,所选代码会一起附在提示词后面。把〔 〕里的内容换成你自己的情况即可。

一起附上的代码

AI 的回答只是起点。它提出的论文、数值和库函数,务必对照原文和官方文档核实。使用有真人出镜的视频时,先确认拍摄同意和个人信息处理规定。

术语表

与正文中黄色虚线下划线相同的词典。点击节名即可跳到首次出现的位置。

比喻合集 —— 以及比喻失效之处

比喻是理解的第一步,也可能是误解的种子。与人类知觉相比的比喻标注了强度。直接 有证据表明实际上在做同样的事 · 部分 只有部分性质相似 · 无 尚不知道有对应的东西

概念日常比喻人类知觉比喻比喻失效之处
词袋把句子剪成单词卡片,放进袋子里摇一摇无从袋子里拿出的卡片没有顺序。“狗咬人”和“人咬狗”就变得一样了
对比学习配对卡片游戏:对的配对贴在一起,不对的撕开部分 孩子一边听话一边看着相应的动作,从而学会词语的意思孩子几次就能学会,而模型要把同一个配对看上几百遍,没有配对的词则始终学不会
同一张地图把两种语言收录在同一本词典里无词典里的对应关系由人来确定,而这张地图仅凭配对数据就形成对应。配对少的词会被放到不相干的位置
查找 vs 生成在图书馆借书 vs 读了几本相似的书后写一篇新文章无新文章有作者的意图,而本篇的生成只是在最近五个场景的平均值附近抽取
拼接“先做……然后做……”这样的舞蹈编排指令部分 按句子顺序活动身体编舞者会让衔接处自然过渡,而这里只是把 10 帧简单混合

作者简介与参考文献

E-1 作者简介 · E-2 学术参考文献 · E-3 图片与数字的出处

E-1 作者简介

Ahn Sangsun(M-Robo 株式会社代表)

曾任职于韩国电气安全公社、每日经济新闻,现创办每日经济的外部创业公司 M-Robo 株式会社并担任代表。M-Robo 株式会社是一家以媒体公司内部创业起步的媒体创业公司,曾为国民日报提供机器人记者(StockBot)服务,并为韩国互联网振兴院、韩国言论振兴财团、韩国广播通信电波振兴院等机构执行了多个项目。之后运营自有的 AI 新闻报纸 Money-Robo。担任代表期间,曾获得亚洲开放数据黑客马拉松冠军,并因在数据创业领域的贡献两次获得行政安全部长官奖,是人工智能和区块链领域 5 项专利的发明人及注册人。著有《AI 犯罪与自我防御》,并为韩国技术教育大学在线终身教育院开发了金融科技、统计学、人工智能领域的在线学习内容。最高学位为经济学博士(东国大学,微观数理经济学)。目前在国民大学、湖西大学等多所大学讲授数据和人工智能相关课程。详细简介

讲座

  • Ahn Sangsun (2025).《面向商业的数据科学》讲义. 韩国开放网络大学 人工智能融合学科.
  • Ahn Sangsun (2025). [K-数字] 人工智能自然语言处理. STEP(智能职业培训平台),韩国技术教育大学在线终身教育院.
  • Ahn Sangsun (2024). [K-数字] 金融科技数据分析基础. STEP(智能职业培训平台),韩国技术教育大学在线终身教育院.

STEP 课程链接:link.step.or.kr/1qyVoJ · link.step.or.kr/M9na9N · link.step.or.kr/brqEyc
如因网站改版无法正常访问,请访问 www.step.or.kr。

论文与报告

  • Ahn Sangsun (2025). 利用国民养老保障面板数据的家庭支出预测模型研究:基于人工智能模型的方法.《未来社会》, 16(2). 原文
  • Ahn Sangsun (2025). 利用国民养老保障面板数据的家庭支出预测模型研究:人工智能方法. 国民养老保障面板学术会议报告资料(2025.05.13),国民年金公团 国民年金研究院. 报告资料
  • Ahn Sangsun (2025). 基于 SNS 文本的疑似毒品交易检测算法研究:以模式与语境分析为中心.《未来社会》, 16(1). 原文
  • Ahn Sangsun (2024). 面向金融领域异常检测模型安全的基于统计的对抗性数据应对方案:实证分析与模拟结果.《未来社会》, 15(3). 原文
  • Ahn Sangsun (2024). 利用人工智能、基于虚拟角色特征的 SNS 帖子检测解决方案. 2024 Summer Newmedia Party 海报发表(2024.06.19),首尔媒体研究生院大学.
  • Ahn Sangsun (2024). 利用工伤面板数据的机器学习模型. 第 10 届工伤保险面板学术会议海报发表(2024.05.17),勤劳福祉公团 勤劳福祉研究院.
  • Ahn Sangsun (2024). 虚拟资产时间序列数据的分析与预测:时间序列模型与人工智能模型的比较及改进建议.《未来社会》, 15(1). 原文

E-2 学术参考文献

  1. [R1] Radford, A., Kim, J. W., Hallacy, C., Ramesh, A., Goh, G., Agarwal, S., Sastry, G., Askell, A., Mishkin, P., Clark, J., Krueger, G., & Sutskever, I. (2021). Learning transferable visual models from natural language supervision. ICML 2021. arXiv:2103.00020 — 第 3 节(对比学习,CLIP)
  2. [R2] Tevet, G., Gordon, B., Hertz, A., Bermano, A. H., & Cohen-Or, D. (2022). MotionCLIP: Exposing human motion generation to CLIP space. ECCV 2022. arXiv:2203.08063 — 第 3·4 节
  3. [R3] Guo, C., Zou, S., Zuo, X., Wang, S., Ji, W., Li, X., & Cheng, L. (2022). Generating diverse and natural 3D human motions from text. CVPR 2022. — 第 5 节(HumanML3D 数据集)
  4. [R4] Tevet, G., Raab, S., Gordon, B., Shafir, Y., Cohen-Or, D., & Bermano, A. H. (2023). Human motion diffusion model. ICLR 2023. arXiv:2209.14916 — 第 5 节
  5. [R5] Zhang, J., Zhang, Y., Cun, X., Huang, S., Zhang, Y., Zhao, H., Lu, H., & Shen, X. (2023). T2M-GPT: Generating human motion from textual descriptions with discrete representations. CVPR 2023. arXiv:2301.06052 — 第 5 节

E-3 图片与数字的来源

  • 场景插图(文本–动作匹配、从提示到动作、文本提示、舞蹈动作卡)是作者亲自制作的像素画
  • 场景和句子都是合成数据。28 个句子和 40 个词语片段由作者设定
  • 第 3·5 节下方的表格是实际运行代码 1·2 的结果。画面中的训练和生成是在浏览器里重新运行同样的计算,所以数字略有不同

教师指南

这是写给讲师、在职培训(OJT)负责人和辅导老师的教学指南。时间只是预估,请根据实际课堂调整。

对象学完 5-3 的大学生和上班族。想了解“输入提示就出结果”的生成式 AI 内部原理的策划人员和从业者
预备知识5-3 的潜在空间,内积与 softmax(3-2·3-8)
学习目标① 说明把句子变成数字的最简单方法(词袋)及其局限 ② 讲述对比学习如何以“配对的靠近,不相干的远离”让两个漏斗对齐 ③ 举例说明在共享地图上查找·生成·拼接的区别
预计时间阅读 30~40 分钟 · 动画演示 25 分钟 · Colab 实践 25 分钟(代码 1 12 分钟,代码 2 13 分钟)

三种教学方案

讲授型 50 分钟

以概念为主

导入 5 分钟(第 1 节)→ 第 2 节 词袋 8 分钟 → 第 3 节 播放训练 15 分钟 → 第 4 节 地图 7 分钟 → 第 5 节 输入句子试试 10 分钟 → 第 6 节 出错的句子 5 分钟。

在职 OJT 90 分钟

以提示设计为中心

第 2·3 节 20 分钟 → 用第 6 节的表格讨论“模型懂的话和不懂的话”15 分钟 → 在第 5 节中分组寻找效果好和效果差的句子 20 分钟 → 在代码 1 中加入新句子重新训练 25 分钟 → 总结 10 分钟。

1 对 1 辅导

分层推进

入门者只看第 2·3·5 节。中级者用 2 × 2 的表格手算,理解代码 1 中 G = (P − I + Q − I) / 14 这一行为什么会“提高对角线、降低其余部分”。

各节教学要点

节停下来提问操作提示
2 语言即数字“为什么‘캔을 던진다’(扔罐子)和‘던진다 캔을’(语序颠倒)是同样的数字?”交替点击两个示例
3 配对“线花了多少步找到配对?测试句子呢?”播放训练后切换到“测试句子”
4 同一张地图“训练前菱形在哪里?”把步数滑块从 400 拖到 0
5 语言 → 动作“查找和生成的结果有什么不同?”用生成模式多次点击“춤춰”(跳舞吧)
6 局限“要让‘던져 버린다’(扔掉)被正确找到,需要改什么?”在第 5 节输入这个句子亲自确认

常见误解 Top 5

误解正确解释要展示的场景
AI 理解句子的意思后选择动作它只是把句子变成数字,再在地图上找近的位置。本篇的数字只表示词语片段是否出现第 2 节、第 6 节
对比学习需要正确答案标签只要有“这个句子和这个动作是一对”这样的配对就行。不使用类别名称第 3 节解析
训练损失接近 0,就能很好地猜中第一次见到的句子损失是以训练句子为准的。测试句子 7 个中只猜中了 5 个第3节表格
句子写得越长越详细,效果总是越好混入词典外的词或其他动作的词,反而会被拉到不相干的地方第 6 节 “손을 펴서 떨어뜨리고 걸어간다”(松手丢下后走开)
“生成”能创造训练数据中完全没有的新动作它是在地图上最近的场景聚集的位置附近抽取。几乎走不出已学过的动作类别第 5 节 “날아올라”(飞起来)

练习题(点击展开解析)

Q1. 词典是 [캔, 던지, 흔들, 손](罐子、扔、摇、手)四格时,“손을 흔들며 캔을 던진다”(一边挥手一边扔罐子)的词袋是什么?

[1, 1, 1, 1]。四个片段都出现了。这个句子会落到扔出和挥手之间的某个地方。

Q2. 配对得分表为 [[3, 1], [0, 2]] 时,第一行的 softmax 概率是多少?训练想如何改变这一行?

e³ / (e³ + e¹) ≈ 0.881,e¹ / (e³ + e¹) ≈ 0.119。调整两个漏斗,把对角线(0.881)往 1 提,把非配对的格子(0.119)往 0 压。

Q3. 测试动作 → 猜中句子是 100%,而测试句子 → 动作只有 7 个中的 5 个,为什么?

动作这边有 420 个场景,每一类的形态都抓得很好;而句子这边每类只有 3 个训练句子,词袋又不懂上下文。遇到没见过的词语组合,文字漏斗就会摇摆不定。

Q4. “걷다가 손 흔들기”(走着挥手)的前半段出错,原因是什么?

“걷”(走)虽然在词典里,但在训练句子中一次也没出现。那一格的权重还是最初的小随机值,不指向地图上任何有意义的地方。改成“걸어가다가”(走着走着)就会出现路过。

Q5. 查找和生成中,哪个隐私风险更大?为什么?

查找。它直接取出训练场景,如果是真人的动作数据,那个人的动作会原样出现(与 5-2 的生成器 C 相同)。生成则是在多个场景聚集的位置重新抽取。

Colab 作业

基础

把代码 1 的 CAPTIONS 中扔出类的一个训练句子换成与“길에 캔을 던져 버린다”(把罐子扔在路上)相似的句子,然后重新训练。报告测试句子的命中情况有何变化。

挑战

编写一个 bag 函数,用“每两个字重叠切出的片段”(例如:“던져” → “던”“져”“던져”)代替词袋,并用测试句子的命中情况比较它是否能更好地处理没见过的词(“걷다가”,走着)。

难度调整与延伸学习

入门者仅凭第 3 节的播放训练,就能让学生体会“通过配对来学习”
进阶让学生把 CLIP·MotionCLIP 论文的图 1 与本篇第 3 节并排放置,发表两者的相同点和不同点
下一篇5-5 从“跳舞吧”到舞蹈视频 — 给火柴人的舞蹈穿上助手的样子

任务 5-4 完成!

你已经读完了「5-4 从词语到动作」。研究室成员们各用一句话为你总结。

博士
博士我们把语言和动作放在了同一张地图上。
  • 句子是 40 格词袋
  • 配对的靠近,不相干的远离:对比学习
  • 在地图上查找、抽取、拼接
助手
助手“던져 버린다”(扔掉)被拉到垃圾桶那边,有点冤啊。需要懂上下文的漏斗!
果蝇研究员
果蝇研究员现在是最后一关了。把火柴人的舞蹈变成助手的舞蹈视频!