Skip to content

家庭流:Berglund 家的两周 ​

状态:2026-10-15 按大纲合成,用户已审阅大纲。人物、事件与文字都由作者编写,不来自 Enron 或任何真实的人;Enron 私人往来只在合成时作仿写参考。成品是原创文本,节拍表与成品都入库;拼进 frames.json 的步骤与其余四条流一样只在本机。

混合人物 Jonas 的其余四条流里没有人在等他回话。家庭流补上家人、朋友、邻居与家务通知:最碎、最短、空话最多,又最常要他本人拿主意。

规模 ​

项数
输入388 条,占 composite 全部 3217 条的 12.1%;本人 78 条
来源119 拍剧情(287 条)与 31 组噪音层(101 条);人写 329 条,模板 59 条
渠道26 个:iMessage、短信、WhatsApp 群、邮件、语音留言转写、通话记录,以及兽医、幼儿园、学校、银行、保险、水管工、快递、日历、购物清单、屏幕时间等通知
作者他人 252、本人 78、程序通知 49、群发 9;不同作者 53 位
语言瑞典语;中文可读版见 BEATS.md
渠道大纲预估实际(其中本人)
家庭群、Kajsa、Signe140149(50)
母亲、妹妹4037(8)
Göran、Joakim、Gunnel3024(9)
小龙虾派对群4039(0)
班级家长群、街坊群5564(1)
机构通知7575(10)

文件 ​

文件内容
beats.json节拍表,事实与标注的唯一来源:人物、渠道、事项、每一拍的消息、这一拍之后 Fold 应给的关注档、登记与了结的问题、有意放入的错位;另有噪音层
BEATS.md节拍表的中文可读版,由脚本生成
messages.json渲染后的成品,与 frames.json 里的事件同形,一行一条,由脚本生成
check.json不可回溯检查的结果,只含成品一侧的词与计数
OUTLINE.md合成前的大纲

怎样写成的 ​

  1. 节拍表。 按大纲把六条线(猫看病、母亲九月住哪、和朋友骑车、车道下漏水、9 月 14 日的航班、小龙虾派对)和十来件一次性的事写成 119 拍,每拍写明时间、渠道、谁说、Jonas 回不回,以及这一拍之后 Fold 应给的关注档。时间对过其余四条流:Jonas 的回复落在他工作输入的空档里,家里的事与生活流里本人的提问前后咬合(例如 8 月 11 日 16:09 他在问答站问猫的药量,前后是伴侣的催促与诊所的自动回复)。
  2. 人写的消息。 由 Agent 逐段写成瑞典语。动笔前在本机读了 Enron 语料 21 个邮箱私人文件夹与 5 个邮箱已发送里的同类往来(约聚会凑人数、没人回就再发、长辈的长信、兄妹商量父母的事、配偶之间报行踪),校准语气、琐碎程度与一件事来回几轮,只仿形态:没有翻译或改写任何一封,人物、地点、事件都是新写的。参考过的 30 个文件夹清单只存本机(.local/family/consulted-folders.txt),供下面的检查使用;没有记录哪一段参考了哪一封。
  3. 通知类消息用模板。 诊所预约与就诊摘要、通话记录、语音留言、银行与 Swish、快递、日历、购物清单、屏幕时间、保险、学校提醒与两条诈骗短信,共 31 种模板写在 scripts/family_stream.py,参数来自节拍表,成品标 text_origin: template。
  4. 噪音层。 班级家长群、街坊群、派对群的闲聊、幼儿园照片动态、刷卡与购物清单,按大纲的分布另写,不服务剧情,除 Jonas 本人的一句外全部应被忽略。
  5. 错位。 每条线至少一处:Kajsa 没等到回复就再发一遍“??”;Jonas 把邻居说车道湿的短信当成道谢回了;妹妹转述母亲的决定比母亲本人的消息先到;猫的事经母亲、妹妹两道转述后变成“猫瞎了”;朋友把约骑车的话发进了派对群;派对人数在私信里被问、由伴侣在群里回答;诊所的回电早在语音信箱里,Jonas 却先说没打来。

不可回溯检查 ​

scripts/family_stream.py check 把成品与 Enron 压缩包对照,结果写入 check.json,只列成品一侧的词:

  • 专名。 成品里的大写词,去掉普通英文词(系统词典)与成品里也以小写出现的词,得到 207 个专名候选;与参考的 5044 封邮件全文(含信头)里的大写词求交集。第一轮有 16 个常见名字与参考邮件重名(名字是大纲阶段按瑞典常见名起的,不来自邮件),全部改名后复查为 0。改得最显眼的是伴侣 Karin → Kajsa、妹妹 Lena → Ulrika、朋友 Mattias → Joakim。另有两个句首大写的瑞典语普通词(Grannen 邻居、Hoppas 希望)显式排除,列在结果里。
  • 重合。 成品每条正文的 8 词序列(1708 个)与整个 Enron 语料 517,401 封邮件的全文逐一比对:0 处重合。

结论:成品不含参考邮件里的人名与其他专名,与 Enron 语料没有 8 词以上的重合;正文是瑞典语,人物、地点与事件都是新写的,无法回溯到某一封邮件。

标注 ​

compose_corpus.py family 由节拍表生成 labels.json 的 family 一节,依据都标 authored,与前四条流由真实行为推出的标注分开存放、分开统计。规则与覆盖见 LABELS.md。

家庭流没有真实的后续行为,Jonas 的回复也是合成的,所以这些标注检验的是 Agent 的判断与作者的写定是否一致,不检验真实。评测脚本把它与前四条流分开计分,结果见含家庭流的自由运行。

与其他流的接缝 ​

  • 咬合。 11 个家庭事项链到生活流的 15 个问题(猫的药量、猫与花盆、新车的咔哒声、航班改经停、退单、两次刹车、铜水管、车道厚度、预算、空调、棚屋与屋顶、漫画、贝壳高汤),列在 labels.json 的 family.cross_stream。生活流的行为标注说猫的药量问题提问者再没跟进,家庭流里 Jonas 在 8 月 14 日打电话了结了它:同一件事在两条流里的行为不同,是有意保留的检查点。
  • 冲突没有挪走。 生活流 34 个提问里与这家不符的(狗、两个十几岁的儿子、四只猫、住公寓或在法国、丹佛、肯尼亚)这一版原样保留,见 MIX.md 的接缝。
  • 人物背景。 frames.json 的 persona.context 加了一句家人与联系方式;scripts/eval_judgment.py 的自由运行提示在语料含家庭流时说明这些往来是瑞典语,stream 说明里加了 family。
  • 自由运行已重跑。 含家庭流的自由运行已于 2026-10-15 重跑,家庭流与作者标注单独对照,见第二次自由运行。原型演示由家庭流之前的那次自由运行打磨而来,build_demo_data.py 读取语料时去掉家庭流;演示是否改用新的运行,以原型说明为准。

重建 ​

sh
.venv/bin/python scripts/family_stream.py render     # 节拍表 → messages.json 与 BEATS.md
.venv/bin/python scripts/compose_corpus.py family    # 追加进本机 frames.json,更新 ids.json、noise.json 与 labels.json 的 family 一节
.venv/bin/python scripts/family_stream.py check      # 不可回溯检查:需要本机 Enron 压缩包与参考文件夹清单,约五分钟

family 可以重复运行:先去掉 frames.json 里已有的家庭流再插入,前四条流的 ids.json 条目必须与重建前逐条一致,否则不写入。第一次运行时把不含家庭流的版本备份到 .local/composite/frames-v1.1.json。若以后用 compose_corpus.py build 从 raw 重建前四条流,之后要再运行一次 family。