MotionGPT 动作标注套取例

发布于 2023-10-08  68 次阅读


MotionGPT 动作标注套取例

通过 Prompt 设计,找 OpenAI 帮我靠自然语言洗数据用例

服务于该项目 fyyakaxyy/animationGPT: Character animation generation based on text-to-motion and large models. (github.com)

Prompt

现在,你是一名动画数据集标注专家。

我将为你描述一个任务:根据我给出的提示,创建合适的动作描述句子。

提示中会包含以下动作信息:

  • 动作类型:描述动作在何种情境中被使用。例如,“武器攻击”表示使用某种武器进行攻击,“法术”表示吟唱法术。还有其他词汇如“静止”、“受击”和“死亡”用于描述当前动作的状态。
  • 武器类型:描述当前动作使用的武器或特殊物件类型,通常与动作类型-“武器攻击”同时出现。有时“徒手”表示当前未使用武器,且并非进行战斗。
  • 攻击类型:描述攻击动画的方式,如“双持”、“蓄力”、“跑步攻击”和“踢击”,需要适当结合其它词汇润色。
  • 方位词:描述动作的方向或特定状态,如“左前”代表动作趋向左前方。
  • 力量感描述词:如“轻盈地”、“扎实地”和“具力量感的”,描述动作的整体风格。可作为润色要素加入,但请避免语义冲突。
  • 速度感描述词:如“迅捷的”、“较迅捷”和“迟缓的”,描述动作的速度。由于速度感具有量化分级,请谨慎使用词汇。
  • 模糊描述词:一些写意的描述词,可以适当在润色中参考,但不一定要直接使用。
  • 姿势形容句:直接描述动作的内容。

例如,基于我下面给出的提示,可以这样生成描述:

提示:

动作类型 武器类型 攻击类型 方位词 力量感描述词 速度感描述词 模糊描述词 姿势形容句
武器攻击 直剑 右手,单持,蓄力重击 扎实的,积蓄力量的 匀速的,先慢后快的 挥击的,流畅连贯的,大开大合的,积蓄力量的,瞬间爆发的 倾身扭腰向左,右手从左后蓄力,向前挥

描述:

角色右手使用直剑进行蓄力攻击,扎实地侧身扭腰向左,从左后蓄力,然后爆发式地向前挥砍。

请基于我提供的最新的样例生成描述句:

动作类型 武器类型 攻击类型 方位词 力量感描述词 速度感描述词 模糊描述词 姿势形容句
武器攻击 大剑/特大剑 右手,单持,蓄力 原地 轻盈的,直截了当的 较迅捷,干净利落的 流畅连贯的,大开大合的,积蓄力量的 倾身扭腰向左,右手从左后蓄力
武器攻击 大剑/特大剑 双持,蓄力重击 扎实的,积蓄力量的 匀速的,先慢后快的 挥击的,流畅连贯的,大开大合的,积蓄力量的,瞬间爆发的 倾身扭腰向左,双手从左后蓄力,向前挥
武器攻击 刺剑 右手,单持,未蓄力重击 轻盈的,直截了当的 迅捷的 刺击的,流畅连贯的 倾身扭腰向左,右手从左上向前刺
回避 徒手 握持 无力的,沉重的 较迟缓,拖泥带水的 生硬的,晃悠悠的,虚弱的,痛苦的 向前沉重地蹒跚、踉跄

Response

效果评估:

GPT-3.5-Turbo:

  1. 角色右手持大剑,原地蓄力攻击。动作轻盈而直截了当,右手从左后蓄力,然后以较迅捷而干净利落的速度挥砍,展现出流畅连贯的大开大合动作,同时积蓄了力量。
  2. 角色双手握着特大剑,以扎实的姿态倾身扭腰向左,双手从左后积蓄力量,然后以匀速的速度先慢后快地挥出,形成流畅连贯的大开大合动作,最终瞬间爆发向前挥击。
  3. 角色右手持刺剑,轻盈地倾身扭腰向左,右手从左上迅捷地向前刺出,完成一次直截了当的刺击动作。
  4. 角色使用徒手进行回避动作,向前沉重地蹒跄,双手生硬地握持前方,显得无力而痛苦,动作较为拖泥带水,仿佛是在虚弱地躲避攻击。

GPT-4:

  1. 角色右手握持特大剑,原地倾身扭腰向左,从左后蓄力。然后轻盈且直截了当地进行蓄力攻击,动作流畅且连贯,速度较迅捷且干净利落地完成一次大开大合的挥砍。
  2. 角色双手持大剑进行蓄力攻击,扎实地侧身扭腰向左,从左后开始积蓄力量,然后在瞬间爆发式地向前挥砍。
  3. 角色右手握持刺剑,轻盈且直截了当地倾身扭腰向左,从左上迅捷地、流畅连贯地向前刺出。
  4. 角色在回避时,没有使用任何武器,只是沉重地握持双手。他向前生硬且晃悠悠地蹒跚、踉跄,给人一种痛苦而拖泥带水的感觉。

InternLM-20B:

  1. 角色右手使用大剑或特大剑进行单手持剑蓄力攻击,轻盈地直截了当地侧身扭腰向左,从左后蓄力,然后干净利落地进行攻击。

  2. 角色双手使用大剑或特大剑进行蓄力攻击,扎实地侧身扭腰向左,从左后蓄力,然后爆发式地向前挥砍。

  3. 角色右手使用刺剑进行未蓄力重击,轻盈地侧身扭腰向左,从左上向前刺击。

  4. 角色使用徒手进行握持,力量感沉重,速度感迟缓,姿势形容句为“向前沉重地蹒跚、踉跄”。

    1. 角色使用徒手进行握持攻击,沉重地向前蹒跚、踉跄。
    2. 角色使用徒手进行攻击,以沉重的力量向前迈出,显得生硬而虚弱,但步伐沉重而踉跄。

Batch

基于样例组批量创建模板 Prompt,单批处理五条样例

注:强烈建议在使用时打散输入 Group,在召回时发现相近动作并排生成容易造成标注质量下降和复读

def generate_prompt_from_group(group):
    prompt = """
    | 动作ID | 动作类型 | 武器类型 | 攻击类型 | 力量感描述词 | 速度感描述词 | 模糊描述词 | 姿势形容句 |
    """
    for _, row in group.iterrows():
        prompt += f"\n| {row['动画ID']} | {row['动作类型']} | {row['武器类型']} | {row['攻击类型']} | {row['力量感描述词']} | {row['速度感描述词']} | {row['模糊描述词']} | {row['姿势形容句']} |"

    messages = [{
        "role": "system",
        "content": 
"""
现在,你是一名动画数据集标注专家。

你将完成如下任务:根据给出的提示,创建合适的动作描述句子,并以适当的格式返回。

提示中会包含以下动作信息:

- <span style="font-weight: bold;" data-type="strong">动作类型</span>:描述动作在何种情境中被使用。例如,“武器攻击”表示使用某种武器进行攻击,“法术”表示吟唱法术。还有其他词汇如“静止”、“受击”和“死亡”用于描述当前动作的状态。
- <span style="font-weight: bold;" data-type="strong">武器类型</span>:描述当前动作使用的武器或特殊物件类型,通常与动作类型-“武器攻击”同时出现。有时“徒手”表示当前未使用武器,且并非进行战斗。
- <span style="font-weight: bold;" data-type="strong">攻击类型</span>:描述攻击动画的方式,如“双持”、“蓄力”、“跑步攻击”和“踢击”,需要适当结合其它词汇润色。
- <span style="font-weight: bold;" data-type="strong">力量感描述词</span>:如“轻盈地”、“扎实地”和“具力量感的”,描述动作的整体风格。可作为润色要素加入,但请避免语义冲突。
- <span style="font-weight: bold;" data-type="strong">速度感描述词</span>:如“迅捷的”、“较迅捷”和“迟缓的”,描述动作的速度。由于速度感具有量化分级,请谨慎使用词汇。
- <span style="font-weight: bold;" data-type="strong">模糊描述词</span>:一些写意的描述词,可以适当在润色中参考,但不一定要直接使用。
- <span style="font-weight: bold;" data-type="strong">姿势形容句</span>:直接描述动作的内容。

例如,基于下面给出的提示,可以这样生成描述: 

输入样例: 
| 动作ID | 动作类型 | 武器类型 | 攻击类型 | 力量感描述词 | 速度感描述词 | 模糊描述词 | 姿势形容句 |
| 000001 | 武器攻击 | 直剑 | 右手,单持,蓄力重击 | 扎实的,积蓄力量的 | 匀速的,先慢后快的 | 挥击的,流畅连贯的,大开大合的,积蓄力量的,瞬间爆发的 | 倾身扭腰向左,右手从左后蓄力,向前挥 |
| 000004 | 回避 | 徒手 | 握持 | 无力的,沉重的 | 较迟缓,拖泥带水的 | 生硬的,晃悠悠的,虚弱的,痛苦的 | 向前沉重地蹒跚、踉跄 |

输出样例: 
[
    {
        "ID": "000001",
        "Desc_CN": "角色右手使用直剑进行蓄力攻击,扎实地侧身扭腰向左,从左后蓄力,然后爆发式地向前挥砍。",
        "Desc_EN": "The character charges an attack with a straight sword in their right hand, firmly twists their waist to the side, turning to the left, and gathers strength from the left rear. Then, they explosively slash forward."
    },
    {
        "ID": "000004",
        "Desc_CN": "角色回避并沉重地向前移动,摇摇晃晃、跌跌撞撞。",
        "Desc_EN": "The character evades and moves forward heavily, staggering and stumbling. "
    }
]

<span style="font-weight: bold;" data-type="strong">特别注意</span>: 
- 武器类型为徒手、攻击类型为握持时仅表示角色当前空手,请勿使用 “徒手握持、握持物品、握持空手” 等错误描述
- 武器类型使用 / 分割时,表示或,即对几种武器类型通用。例如对于 小盾/中盾/大盾 ,生成描述句时只需写“持盾”即可
- 值为 nan 表示对应条目空置
- 请主要参考<span style="font-weight: bold;" data-type="strong">姿势形容句</span>,描述词仅被用于润色,避免画蛇添足
- 输出中文语境下通顺的描述句

请基于USER提供的样例生成描述句: 
"""
    }]

    messages.append({"role": "user", "content": prompt})

    # 传递给API
    # chat_response = chat_completion_request(messages)
    # ... (这部分代码与前面相似)
    return messages

具体实现见文件,虽说不知道发布发得出去 query_thread.ipynb


百无一用是书生