Skip to content

TomTraining/SocialiToM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SocialiToM

基于确定性信念追踪的社会心智理论(Social ToM)故事生成库。

SocialiToM 是一个用于生成心智理论评测故事的 Python 库,聚焦于社会情感场景(情绪、目标、人际关系、语用现象)。所有标准答案均通过规则引擎确定性计算,无需任何人工标注或 LLM 判断。

特性

  • 确定性 GT:所有答案来自规则引擎 SocialBeliefTracker,而非 LLM 判断
  • 30 种问题类型:情绪归因、目标推断、失言检测、间接提示、标量含义、奇怪故事、社会后果(9 维度)等
  • 7 种任务类型emotion_attributionfaux_pashintingsocial_consequencescalar_implicaturestrange_storypersuasion
  • 4 种扩展:人物画像(文化背景/情感依附/个人特质)、隐含线索 NL 风格、情绪弧线、语用扩展(反语/幽默/谎言)
  • 思维链(CoT):从追踪器状态自动生成推理链,无需人工标注
  • 输出适配器:支持转换为 EmoBench、FANToM、SocialIQA、ToMBench 格式

安装

pip install -r requirements.txt
pip install -e .

快速开始

from social_tom.pipeline.pipeline import generate_story

result = generate_story(
    task_type="emotion_attribution",
    difficulty="easy",
    seed=42,
)

print(result["story_text"])
for q in result["questions"]:
    print(q["question"], "→", q["GT"])

或直接运行示例:

python examples/quickstart.py

包结构

social_tom/
├── core/
│   ├── world_state.py          # AgentState、Goal、RelationshipState、SocialWorldState 等数据类
│   ├── belief_tracker.py       # SocialBeliefTracker — 14 个原子动作
│   ├── emotion_rules.py        # 情绪规则引擎(25+ 条规则)
│   └── question_generator.py   # 30 种问题类型生成器
├── rules/
│   ├── pragmatic_rules.py      # 语用规则(间接提示 / 标量含义 / 失言 / 奇怪故事 / 劝说)
│   └── social_consequence.py   # SocialIQA 9 维度规则引擎
├── extensions/
│   ├── agent_profile.py        # 文化背景 / 情感依附 / 个人特质画像扩展
│   ├── cue_style_nl.py         # 视觉 / 声音线索 NL 风格扩展
│   ├── emotion_arc.py          # 情绪转变 / 混合情绪 / 意外结果扩展
│   └── pragmatic_ext.py        # 反语 / 讽刺 / 幽默 / 谎言类型扩展
└── pipeline/
    ├── pipeline.py             # generate_story() — 统一生成入口
    ├── story_context.py        # 上下文池(人物 / 场景 / 关系)
    ├── story_infiller.py       # 结构化脚本 → 自然语言故事
    ├── cot_generator.py        # 自动生成 CoT 推理链
    ├── distractor_generator.py # MCQ 干扰项生成
    └── output_adapter.py       # 多数据集格式适配器

API 参考

generate_story()

from social_tom.pipeline.pipeline import generate_story

result = generate_story(
    task_type="emotion_attribution",  # emotion_attribution | faux_pas | hinting | social_consequence | scalar_implicature | strange_story | persuasion
    extensions=None,                  # ["agent_profile", "cue_style_nl", "emotion_arc", "pragmatic_ext"]
    difficulty="medium",              # easy | medium | hard
    context=None,                     # 自定义上下文字典
    llm_client=None,                  # 可选 LLM 客户端(用于 NL 实例化)
    seed=None,
)

返回值:

{
    "story_text": str,
    "questions": [{"question_type": str, "question": str, "GT": ..., "distractors": [...]}],
    "GT_answers": {"question_type": answer, ...},
    "CoT": {"question_type": cot_text, ...},
    "metadata": {"task_type": str, "people": [...], ...},
}

SocialBeliefTracker

from social_tom.core.belief_tracker import SocialBeliefTracker

tracker = SocialBeliefTracker(
    people=["Alice", "Bob"],
    initial_relations={"Alice_Bob": "colleague"},
)

tracker.set_goal("Alice", "get_promotion", importance="high")
tracker.perform_action("Alice", "helped_other", target="Bob")
tracker.block_goal("Bob", "goal_x", by="circumstance")

print(tracker.get_emotion("Alice"))  # → "satisfaction"

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages