我是个糟糕的朋友吗有人分析了自己 20 年的聊天记录将 120 万条消息转化为一个结构化的生活宝库本想借此赢得朋友并影响他人结果却让其了解到自己的情感带宽、亲昵周期和友谊半衰期。2026 年 5 月 27 日 * 机器学习加速库MLX、数据分析、大语言模型LLMs、第二大脑- 我的数字历史- 数据存档- 淹没在噪音中- 哪个萨沙Sasha- 解析所有内容- 训练提示词- 定向情感分析- 数据揭示了什么- 等等为什么会这样- 评论本页内容如下- 我的数字历史- 数据存档- 淹没在噪音中- 哪个萨沙Sasha- 解析所有内容- 训练提示词- 定向情感分析- 数据揭示了什么- 等等为什么会这样- 评论记录生活的尝试2014 年《Wait But Why》的蒂姆·厄本Tim Urban发表了《以周为单位的人生》这是一个网格图每个方格代表人生中的一周而且大部分方格都已填满。多年来这幅图一直困扰着他。部分原因在于此他开始记录一些事情希望这个网格图不只是简单的倒计时而是有更深刻的意义。但生物识别数据并不能很好地反映他的生活有多充实。这个网格图表明重要的是那些事件如工作、旅行、求学、婚姻等这些很容易标记出来。但它们很难体现出那几周里他的感受或者他在周围人眼中的样子而这正是他想要衡量的。于是他尝试写日记。最开始用纸质日记后来用文本文件再后来用 Obsidian 记每日笔记。日记记录了他在写作当天认为重要的事情但它遗漏了那些他忘记记录的对话以及当时他未能察觉的缓慢变化模式。多年来他的笔记及其关联不断增加。他厌倦了在维护人际关系方面表现不佳并且希望用数据来弥补这一点。于是他踏上了构建个人客户关系管理CRM系统的征程。这个系统基于他的聊天记录而非记忆构建多亏了过去几十年他在互联网上留下的大量痕迹。我的数字历史他的网络活动大致可分为三个阶段-21 世纪初的 ICQ、IRC、DC那时有供脚本小子闲聊的午夜频道不过这些都已成为过去或许这样更好。那个 10 岁的他在那些聊天中的记录并不需要结构化的存档。-21 世纪 10 年代的 VK、Twitter、FacebookVK 如今已鲜为人知它在 21 世纪初的后苏联地区很受欢迎。他大概有十年没去过俄罗斯了但从 2008 年开始的存档依然存在。这一时期涵盖了他的学生时代、大学时光和职业生涯初期分布较为均匀。-21 世纪 10 - 20 年代的 Instagram 和 Telegram令人惊讶的是尽管他在 Instagram 上发布的内容不多但通过私信与他人交流往往更容易。而且越来越多的人开始用 Telegram 取代 WhatsApp。凭借《通用数据保护条例》GDPR和数据访问相关法律他获取了包含所有消息、互动和社交图谱的存档。数据存档解析一堆 JSON 和 HTML 文件并不难但也没什么乐趣。Instagram 会通过 latin - 1 对西里尔文进行双重编码Telegram 在不同日期导出的消息会分配不同的内部消息 IDFacebook 在某个时间点引入了端到端加密导致相同的消息出现在三个不同的文件夹中Telegram 允许你导出群聊或仅导出自己的消息VK 会直接导出所有内容无需额外设置Instagram 则完全不区分广播消息和个人聊天。将这五种导出数据解析成统一的制表符分隔格式后会产生不同类型的信息。Telegram 和 VK 主要是私信Instagram 增加了故事互动和关注者图谱Twitter 则自成一体独立的推文是一个发布内容集合私信一半是支持请求一半是会议协调信息所以他需要通过回复/提及图谱来捕捉真实的信息。他希望为每个聊天日记录一条日常笔记为每个人建立一个档案为每个地点创建一个存根构建一个生活时间线以及记录其他出现的内容如食谱、鸡尾酒配方、会议笔记等。淹没在噪音中在考虑分类之前必须面对一个事实大部分数据都是噪音。在他与伴侣长达十年、超过 48.6 万条消息的最长聊天线程中内容包含 2.4% 的链接、9.1% 的媒体文件、1.5% 仅含表情符号的消息、28.4% 的简短填充内容以及 58.7% 的实质性文本。这意味着就本次分析而言41% 的内容是噪音。表情符号、链接和媒体文件很容易过滤但捕捉对话中的填充词那些看起来像有内容但每月出现数百次的简短词汇则更难。他最初的想法是过滤掉所有少于三个单词的消息但两个单词也能表达很多内容如“他去世了”“我们输了”等。建立一个包含“哈哈哈”和“不错”等词汇的黑名单也不起作用尤其是在跨语言的情况下。有效的方法是从聊天记录的五个不同位置进行抽样对每个短词进行频率统计手动审查前 80 个高频词并将黑名单与用于标记生活事件的简短消息保护集配对。在所有平台和年份的数据中清理后的语料库大约包含 5.2 万个独特的词元。自 2008 年以来新词率即他在任何聊天中从未使用过的单词所占比例一直在下降六年前稳定在 6%。他的大部分词汇在 20 岁出头时就已固定下来。柱状图显示每年的新独特单词数量之前从未使用过折线图显示这些新单词占当年总词汇量的比例。2016 年新单词数量最多但新词率较低因为当年的总词汇量非常大他想那时自己社交活动很频繁。过滤掉噪音后清理后的消息需要进行分类哪些是生活事件哪些是闲聊提到了谁情感基调如何。但在此之前还有一个更基本的问题。哪个萨沙Sasha他交往的大多数人会使用多个平台而且往往不会在不同平台上使用相同的用户名。如果要为每个认识的人维护一个档案他需要在所有聊天记录中对他们及其提及信息进行映射。这里就涉及到昵称和爱称的问题同一个亚历山大Alexander可能会变成阿尔Al、亚历克斯Alex、赞德Xander、桑迪Sandy和亚历克Alec(k)。如果来自东欧还可能是萨沙Sasha在斯拉夫语言中萨沙是一个不分性别的名字。斯拉夫语言通常会用“ - sha”后缀来创造可爱的昵称例如保罗Paul 帕维尔Pavel 帕沙Pasha玛丽亚Maria 玛莎Masha伊诺肯季Innokentiy 凯沙Kesha。形态分析器有助于处理词形变化但无法处理俚语而且在他的聊天记录中“萨沙”根据消息发送时间和聊天对象的不同可能指代不同的人。启发式方法和命名实体识别NER模型对于群聊中数千个仅提及名字的情况并不适用。基于消息内容训练的分类器可能会有用但训练集需要从他自己的聊天记录中手动标注而这正是他试图避免的工作。解析所有内容在对重要内容进行分类时也面临同样的问题。显而易见的方法是对第一人称动词如“购买”“搬家”“签约”进行关键词匹配并通过命名实体识别提取名字和地点但这种方法会产生大量误报。在给妈妈的消息中“我搬家了”指的是搬迁而在和朋友的聊天中“我搬家了”可能是指室内设计分手后说“我走出来了”则是一个情感上的里程碑。在手动标注的消息上微调分类器准确率最高只能达到 70 - 80%。在事件检测方面BERT 在专业标注的单一领域语料库上的 F1 分数最高为 75.6% 他怀疑在多语言闲聊和少量手动标注训练集的情况下效果会更差。在 120 万条消息中即使误报率只有 1%也意味着档案中会有 1.2 万个虚假事件。因此他最终使用了大语言模型LLMs来进行姓名解析和分类。总共运行了 200 多个会话包括上下文在内大约有 150 - 200 亿个令牌。在 Opus 上这大约需要 1.5 万美元在配备 32GB 内存的 M5 Pro 上通过 MLX 本地运行 Qwen3 - 30B - A3B 模型大约需要 10 - 15 周的连续推理时间。你可以自行选择。根据 200 个事件的保留集进行评估处理少于 6000 条消息的块时误报率低于 1%。大语言模型不会直接写入档案。它会读取一段消息生成一个结构化的 JSON 清单包括带有日期和情感标签的每日笔记要点、实体档案信息、生活时间线事件、地点更新以及它无法解决的歧义列表如“消息 833006‘约翰’没有姓氏是哪个约翰”。一个确定性脚本会读取这个 JSON 并插入要点。每个要点都带有一个 (chat:: tg/chat_NNN) (msg:: 730372 - 730650) 来源标记指向原始消息。一个 SQLite 来源存储库会跟踪每个输出要点的原始消息这样就可以精确回滚错误的会话。所有确定性操作如解析、过滤、去重、来源跟踪等都在 Python 中完成因此实际消息不会进入档案但他可以始终使用原始存档作为真实来源来追踪其内容。训练提示词控制大语言模型行为的提示词文件最初只有 8KB但很快就增长了十倍主要是因为出现了一些错误。例如模型读取了一段他为朋友讲解 iPhone 升级计划定价的聊天记录并在他的生活时间线中记录了一个购买事件所以他不得不添加一个第一人称拥有测试即只有在源消息中有明确的第一人称标记如“我购买了”“我签署了”时才进行生活事件分类。一个闭合门控在标记任何聊天记录为完成之前运行的验证脚本可以机械地捕捉到一些问题如孤立的维基链接、重复引用、语言混杂等。但它无法捕捉到虚构内容所以他增加了抽样环节每次批量处理后随机选择 5 - 10 个输出与原始消息进行核对。模型自我报告的置信度绝不能作为质量信号。需要一位如此痴迷于数据的移动工程师吗定向情感分析此时他已经有了结构化数据包括人物、地点、事件、爱好、食谱等。但他还想了解他的人际关系感受如何。标准的情感分析为每条消息分配一个极性积极、消极或中性。如果一个人很热情而另一个人只给出简短回复VADER 会将对话标记为积极但实际情况可能是不对称的。波里亚Poria等人2019表明不跟踪说话者就无法为对话分配情感。一个人单独看可能很生气的消息在与另一个人的常规交流语境中可能是讽刺。也就是说一方热情另一方冷淡这种差异才是有趣之处。可以用传统机器学习方法来实现即对每个说话者的情感进行分类然后组合成一对但亲密友谊默认是温暖的。关键信号不是绝对情感而是与基线的偏离。如果一段关系中的每条消息都被标记为“喜悦”那么一条标记为“喜悦”的消息就没有意义。需要模型理解这对特定关系的正常状态否则友好的闲聊可能会被标记为“调情”。他在这里犯的一个大错误是让大语言模型为每个聊天日标记情感。在处理了大约 9000 个聊天日后他得到了一堆自由文本情感标签如“全球开发者大会WWDC狂欢模式”和“花园准备”等共有 5700 多个独特值。最后他使用 18 个标签和三个定向前缀他的情感状态、对方的情感状态和共同的情感状态重新进行了分析。5695 个聊天日。每个气泡代表一个情感标签。气泡大小表示天数。考虑到数据集主要是朋友和家人66% 的“共同温暖M:warm”是可以预期的。但他没想到的是平均每月有 12.9% 的对话是事务性的而在 3 月份这一比例达到了 17%这得归咎于英国的财年结束。有趣的数据是随时间的变化。一段友谊在 18 个月内从“共同俏皮M:playful”转变为“共同事务性M:transactional”说明这段关系在逐渐疏远而这可能不是他在每次对话中都能注意到的。数据揭示了什么他能从数据中发现什么呢消息量似乎是最明显的指标。虽然在当下可能不太容易察觉而且有时生活、工作或假期会影响交流但消息量的下降肯定有其意义。2013 - 2020 年与亲密朋友的每月消息量。有趣的是消息量可能会下降但消息的平均长度可能会增加这意味着友谊并没有消失只是形式发生了变化。三种关系中每个发件人的消息平均长度。如果不是消息量和消息长度那还有什么呢考虑词汇重叠情况在他的一些关系中他与对方最常用词汇的重叠率从 69.5% 下降到了 8.7%。他们不再谈论相同的话题这种差异反映了关系的降温。现在他们使用几乎完全不重叠的词汇仅通过用词就可以轻易判断出是他们中谁发的消息。六种关系中的词汇收敛情况。这是否意味着他们不再是朋友了呢不一定但这确实意味着他们的兴趣差异比以前大得多这也可能是件好事。另一个有趣的指标是会话次数与每次会话的消息数。他与伴侣的互动碎片化变成了数千次的简短交流会话次数增加每次会话的消息数减少而与另一位亲密朋友的聊天则从每天多次小会话变成了每月几次有深度的对话会话次数减少每次会话的消息数增加。伴侣和亲密朋友的会话次数和每次会话的消息数。他也查看了回复时间但它更多地反映了一个人的手机使用习惯而不是他们的感受。不同聊天之间的差异很小并且随着回复长度的增加而增大。更好的指标应该是从收到消息到阅读消息的时间但所有导出数据都没有提供这一信息。四种关系中的回复时间中位数。具有讽刺意味的是平均而言他在会话中对第一条消息的回复有较大延迟但之后对后续消息的回复比数据集中其他人对他的回复都要快。是他时间太多还是无事可做呢这种差距在他与伴侣和最亲密朋友之间可以忽略不计但在与不太亲密的联系人之间会增大。在大多数对话中当一个人发送长消息时另一个人也会回复长消息这被称为语言顺应。但他发现有一些聊天情况相反他发的消息越长对方的回复越短。他没有发现跨对话的情感传染现象与一个人的交谈并不会显著影响当天他与下一个人的对话情感。悲伤不会在不同聊天线程中蔓延温暖也一样所以所有对话都在各自独立地进行。有一种理论认为随着恋爱关系的成熟提问会减少因为你已经了解对方。艾玛·皮尔森Emma Pierson分析了一段异地恋中的 5500 封邮件发现随着关系的成熟提问次数减少。他的数据在关系加深时证实了这一点但在关系变浅时却显示出相反的情况。他与伴侣的数据略有体现九年中从 8.8% 降至 8.3%但他与亲密朋友和母亲的数据则相反随着对话减少提问比例分别从 11% 增加到 18.5% 和从 8.5% 增加到 17.3%。当你只是偶尔与某人交谈时你说的话更多是为了获取信息。提问率与关系的亲密度成反比。各关系中的提问率。伴侣的提问率如皮尔森预测的那样缓慢下降而每段变浅的关系都呈现相反趋势。之前很多尝试分析聊天记录的人都制作了词云他希望再也不要看到这种东西所以他专注于亲昵用语的使用频率。这在他与伴侣的聊天中很有效聊天词汇明显分为三个阶段每个阶段都与他们的关系和生活安排的特定阶段相对应。2016 - 2026 年与伴侣聊天中的亲昵用语频率。渴望和爱的表白逐渐被昵称和亲昵语言取代然后又被认可信号和玩笑取代。当你们分开时文字承载着情感而当你们在一起时文字主要记录日常琐事因为情感方面的话会当面表达。在研究了他的亲密圈子后他扩大范围查看了年度联系人流失情况即每年不再联系的联系人数量。20 多岁时搬家2016 年搬城市2017 年搬国外对友谊的影响比 30 多岁时2023 年搬城市2025 年搬国外更大。不搬家的话他每年大约会失去 20 个联系人。最后一次消息发送在该年的联系人数量。数据集中友谊的中位数持续时间为三年但有 41 人在沉默三年以上后又重新出现。不过这些联系人不一定都是朋友。英国人类学家罗宾·邓巴Robin Dunbar发现灵长类动物的大脑大小与平均社交群体规模之间存在关联并由此推断人类可以舒适地维持 150 段稳定的关系。他还认为人类的社交关系呈同心圆结构大约有 5 个在危机时会求助的人、15 个亲密朋友、50 个经常联系的人以及 150 个活跃的熟人。邓巴社交圈层的纵向变化。多年来他的支持圈子和活跃社交网络逐渐缩小。但每年的总聊天天数连续六年几乎稳定在 360 天左右疫情也没有改变这一情况尽管当时通过 Zoom 进行的大量聚会感觉会增加聊天天数。尽管多年来他失去了 75% 的社交网络但他并没有多出一天的聊天时间只是将同样的约 360 天分配给了更少的人。与亲密朋友的聊天情感丰富多样。在情感多样性和主导情感集中度的散点图中大多数人集中在左下角一种主导情感低多样性而他的伴侣和亲密朋友则位于右上角多种情感无主导情感。与同事的事务性聊天则位于最左下角。每个点代表一个与他交谈过的人。气泡大小表示聊天量。他原本认为自己是“善于支持他人的朋友”但数据显示他同样也是“提供建议的朋友”给予指导50 个不对称聊天日的情况几乎与提供支持59 个不对称聊天日相当。当有人需要他时他的第一反应是解释而不是倾听这一点他之前并不知道。旅行时他与所有人的聊天会变得更加温暖“共同温暖”占比 69.8%而在家时为 65.9%事务性对话也会减少9.3%而在家时为 13.2%这很可能是因为他不用考虑工作。旅行日和在家日的聊天情感对比。他还能清楚地看出自己朝九晚五工作的时期他的聊天高峰时间从午夜转移到了中午。2013 - 2026 年按小时统计的消息发送时间。夜猫子往往朋友更多但质量较低。罗伊Roy等人2021在《科学报告》中发表的“社交互动的生物钟类型”研究中通过通话记录数据对生物钟类型进行分类发现夜猫子的社交网络更广但更浅。在他“午夜活跃”的时期他有大约 300 个活跃联系人而在“中午活跃”的时期这一数字降至约 60 个。等等为什么会这样他二十年来的社交生活数据只占用了 70MB 的空间比一张 iPhone 的连拍照片还小。他开始这项研究是因为蒂姆·厄本的网格图让他感到不安上面标记的上学时光、假期和工作并不能让他对自己的生活感到满意。每个方格代表一周而他的大部分方格都是空白的。现在这些方格有了内容但不是“搬到伦敦”或“结婚”这样的事情这些他不用借助数据也能记住。而是后来成为他最亲密朋友的人发来的第一条消息或是群聊中让大家笑到深夜的那个夜晚又或是某人随口分享、他至今每周都会做的食谱。他意识到他的生活从未空虚过只是他的记忆很有选择性。Obsidian 的二维图表视图处理 7000 个节点效果不佳所以他在 Vision Pro 上将其转换为三维视图。这是一个有趣的技术挑战比如通过借鉴星系碰撞模拟算法将每秒 2600 万次的计算量降低到 5 万次以达到 60 帧每秒的帧率不过这值得单独写一篇文章介绍。订阅 RSS 或时事通讯敬请期待。记忆集群有其独特的形状所以他觉得他应该在其中漫步。这项研究并没有改变他与他人交流的方式。当有人需要倾听时他还是会习惯性地给出建议他还是会在不同人面前展现不同的自己他还是会让一半的联系人的消息处于未读状态好几天。但他陷入了一场意想不到的怀旧之旅了解到了一些在单次对话中无法察觉的人际关系模式。现在他知道了从外部看他的社交模式是什么样的前提是有人愿意用同样的十步流程分析他们的聊天记录并关注他。作为一个附带结果现在他拥有了成为一个更好的朋友所需的一切信息包括上次联系的日期、情感变化轨迹、他们的希望和恐惧、他们宠物通常和孩子有时的名字、过敏情况和最喜欢的食物。它回答了很多他甚至都不知道自己存在的问题。那么他是个糟糕的朋友吗他原以为得问 400 个人才能知道答案现在看来只需要十个就够了。他做这一切只是为了记住朋友们的生日。想象一下他能为你的代码库做些什么
分析 20 年 120 万条聊天记录,揭开社交关系中的隐藏模式!
我是个糟糕的朋友吗有人分析了自己 20 年的聊天记录将 120 万条消息转化为一个结构化的生活宝库本想借此赢得朋友并影响他人结果却让其了解到自己的情感带宽、亲昵周期和友谊半衰期。2026 年 5 月 27 日 * 机器学习加速库MLX、数据分析、大语言模型LLMs、第二大脑- 我的数字历史- 数据存档- 淹没在噪音中- 哪个萨沙Sasha- 解析所有内容- 训练提示词- 定向情感分析- 数据揭示了什么- 等等为什么会这样- 评论本页内容如下- 我的数字历史- 数据存档- 淹没在噪音中- 哪个萨沙Sasha- 解析所有内容- 训练提示词- 定向情感分析- 数据揭示了什么- 等等为什么会这样- 评论记录生活的尝试2014 年《Wait But Why》的蒂姆·厄本Tim Urban发表了《以周为单位的人生》这是一个网格图每个方格代表人生中的一周而且大部分方格都已填满。多年来这幅图一直困扰着他。部分原因在于此他开始记录一些事情希望这个网格图不只是简单的倒计时而是有更深刻的意义。但生物识别数据并不能很好地反映他的生活有多充实。这个网格图表明重要的是那些事件如工作、旅行、求学、婚姻等这些很容易标记出来。但它们很难体现出那几周里他的感受或者他在周围人眼中的样子而这正是他想要衡量的。于是他尝试写日记。最开始用纸质日记后来用文本文件再后来用 Obsidian 记每日笔记。日记记录了他在写作当天认为重要的事情但它遗漏了那些他忘记记录的对话以及当时他未能察觉的缓慢变化模式。多年来他的笔记及其关联不断增加。他厌倦了在维护人际关系方面表现不佳并且希望用数据来弥补这一点。于是他踏上了构建个人客户关系管理CRM系统的征程。这个系统基于他的聊天记录而非记忆构建多亏了过去几十年他在互联网上留下的大量痕迹。我的数字历史他的网络活动大致可分为三个阶段-21 世纪初的 ICQ、IRC、DC那时有供脚本小子闲聊的午夜频道不过这些都已成为过去或许这样更好。那个 10 岁的他在那些聊天中的记录并不需要结构化的存档。-21 世纪 10 年代的 VK、Twitter、FacebookVK 如今已鲜为人知它在 21 世纪初的后苏联地区很受欢迎。他大概有十年没去过俄罗斯了但从 2008 年开始的存档依然存在。这一时期涵盖了他的学生时代、大学时光和职业生涯初期分布较为均匀。-21 世纪 10 - 20 年代的 Instagram 和 Telegram令人惊讶的是尽管他在 Instagram 上发布的内容不多但通过私信与他人交流往往更容易。而且越来越多的人开始用 Telegram 取代 WhatsApp。凭借《通用数据保护条例》GDPR和数据访问相关法律他获取了包含所有消息、互动和社交图谱的存档。数据存档解析一堆 JSON 和 HTML 文件并不难但也没什么乐趣。Instagram 会通过 latin - 1 对西里尔文进行双重编码Telegram 在不同日期导出的消息会分配不同的内部消息 IDFacebook 在某个时间点引入了端到端加密导致相同的消息出现在三个不同的文件夹中Telegram 允许你导出群聊或仅导出自己的消息VK 会直接导出所有内容无需额外设置Instagram 则完全不区分广播消息和个人聊天。将这五种导出数据解析成统一的制表符分隔格式后会产生不同类型的信息。Telegram 和 VK 主要是私信Instagram 增加了故事互动和关注者图谱Twitter 则自成一体独立的推文是一个发布内容集合私信一半是支持请求一半是会议协调信息所以他需要通过回复/提及图谱来捕捉真实的信息。他希望为每个聊天日记录一条日常笔记为每个人建立一个档案为每个地点创建一个存根构建一个生活时间线以及记录其他出现的内容如食谱、鸡尾酒配方、会议笔记等。淹没在噪音中在考虑分类之前必须面对一个事实大部分数据都是噪音。在他与伴侣长达十年、超过 48.6 万条消息的最长聊天线程中内容包含 2.4% 的链接、9.1% 的媒体文件、1.5% 仅含表情符号的消息、28.4% 的简短填充内容以及 58.7% 的实质性文本。这意味着就本次分析而言41% 的内容是噪音。表情符号、链接和媒体文件很容易过滤但捕捉对话中的填充词那些看起来像有内容但每月出现数百次的简短词汇则更难。他最初的想法是过滤掉所有少于三个单词的消息但两个单词也能表达很多内容如“他去世了”“我们输了”等。建立一个包含“哈哈哈”和“不错”等词汇的黑名单也不起作用尤其是在跨语言的情况下。有效的方法是从聊天记录的五个不同位置进行抽样对每个短词进行频率统计手动审查前 80 个高频词并将黑名单与用于标记生活事件的简短消息保护集配对。在所有平台和年份的数据中清理后的语料库大约包含 5.2 万个独特的词元。自 2008 年以来新词率即他在任何聊天中从未使用过的单词所占比例一直在下降六年前稳定在 6%。他的大部分词汇在 20 岁出头时就已固定下来。柱状图显示每年的新独特单词数量之前从未使用过折线图显示这些新单词占当年总词汇量的比例。2016 年新单词数量最多但新词率较低因为当年的总词汇量非常大他想那时自己社交活动很频繁。过滤掉噪音后清理后的消息需要进行分类哪些是生活事件哪些是闲聊提到了谁情感基调如何。但在此之前还有一个更基本的问题。哪个萨沙Sasha他交往的大多数人会使用多个平台而且往往不会在不同平台上使用相同的用户名。如果要为每个认识的人维护一个档案他需要在所有聊天记录中对他们及其提及信息进行映射。这里就涉及到昵称和爱称的问题同一个亚历山大Alexander可能会变成阿尔Al、亚历克斯Alex、赞德Xander、桑迪Sandy和亚历克Alec(k)。如果来自东欧还可能是萨沙Sasha在斯拉夫语言中萨沙是一个不分性别的名字。斯拉夫语言通常会用“ - sha”后缀来创造可爱的昵称例如保罗Paul 帕维尔Pavel 帕沙Pasha玛丽亚Maria 玛莎Masha伊诺肯季Innokentiy 凯沙Kesha。形态分析器有助于处理词形变化但无法处理俚语而且在他的聊天记录中“萨沙”根据消息发送时间和聊天对象的不同可能指代不同的人。启发式方法和命名实体识别NER模型对于群聊中数千个仅提及名字的情况并不适用。基于消息内容训练的分类器可能会有用但训练集需要从他自己的聊天记录中手动标注而这正是他试图避免的工作。解析所有内容在对重要内容进行分类时也面临同样的问题。显而易见的方法是对第一人称动词如“购买”“搬家”“签约”进行关键词匹配并通过命名实体识别提取名字和地点但这种方法会产生大量误报。在给妈妈的消息中“我搬家了”指的是搬迁而在和朋友的聊天中“我搬家了”可能是指室内设计分手后说“我走出来了”则是一个情感上的里程碑。在手动标注的消息上微调分类器准确率最高只能达到 70 - 80%。在事件检测方面BERT 在专业标注的单一领域语料库上的 F1 分数最高为 75.6% 他怀疑在多语言闲聊和少量手动标注训练集的情况下效果会更差。在 120 万条消息中即使误报率只有 1%也意味着档案中会有 1.2 万个虚假事件。因此他最终使用了大语言模型LLMs来进行姓名解析和分类。总共运行了 200 多个会话包括上下文在内大约有 150 - 200 亿个令牌。在 Opus 上这大约需要 1.5 万美元在配备 32GB 内存的 M5 Pro 上通过 MLX 本地运行 Qwen3 - 30B - A3B 模型大约需要 10 - 15 周的连续推理时间。你可以自行选择。根据 200 个事件的保留集进行评估处理少于 6000 条消息的块时误报率低于 1%。大语言模型不会直接写入档案。它会读取一段消息生成一个结构化的 JSON 清单包括带有日期和情感标签的每日笔记要点、实体档案信息、生活时间线事件、地点更新以及它无法解决的歧义列表如“消息 833006‘约翰’没有姓氏是哪个约翰”。一个确定性脚本会读取这个 JSON 并插入要点。每个要点都带有一个 (chat:: tg/chat_NNN) (msg:: 730372 - 730650) 来源标记指向原始消息。一个 SQLite 来源存储库会跟踪每个输出要点的原始消息这样就可以精确回滚错误的会话。所有确定性操作如解析、过滤、去重、来源跟踪等都在 Python 中完成因此实际消息不会进入档案但他可以始终使用原始存档作为真实来源来追踪其内容。训练提示词控制大语言模型行为的提示词文件最初只有 8KB但很快就增长了十倍主要是因为出现了一些错误。例如模型读取了一段他为朋友讲解 iPhone 升级计划定价的聊天记录并在他的生活时间线中记录了一个购买事件所以他不得不添加一个第一人称拥有测试即只有在源消息中有明确的第一人称标记如“我购买了”“我签署了”时才进行生活事件分类。一个闭合门控在标记任何聊天记录为完成之前运行的验证脚本可以机械地捕捉到一些问题如孤立的维基链接、重复引用、语言混杂等。但它无法捕捉到虚构内容所以他增加了抽样环节每次批量处理后随机选择 5 - 10 个输出与原始消息进行核对。模型自我报告的置信度绝不能作为质量信号。需要一位如此痴迷于数据的移动工程师吗定向情感分析此时他已经有了结构化数据包括人物、地点、事件、爱好、食谱等。但他还想了解他的人际关系感受如何。标准的情感分析为每条消息分配一个极性积极、消极或中性。如果一个人很热情而另一个人只给出简短回复VADER 会将对话标记为积极但实际情况可能是不对称的。波里亚Poria等人2019表明不跟踪说话者就无法为对话分配情感。一个人单独看可能很生气的消息在与另一个人的常规交流语境中可能是讽刺。也就是说一方热情另一方冷淡这种差异才是有趣之处。可以用传统机器学习方法来实现即对每个说话者的情感进行分类然后组合成一对但亲密友谊默认是温暖的。关键信号不是绝对情感而是与基线的偏离。如果一段关系中的每条消息都被标记为“喜悦”那么一条标记为“喜悦”的消息就没有意义。需要模型理解这对特定关系的正常状态否则友好的闲聊可能会被标记为“调情”。他在这里犯的一个大错误是让大语言模型为每个聊天日标记情感。在处理了大约 9000 个聊天日后他得到了一堆自由文本情感标签如“全球开发者大会WWDC狂欢模式”和“花园准备”等共有 5700 多个独特值。最后他使用 18 个标签和三个定向前缀他的情感状态、对方的情感状态和共同的情感状态重新进行了分析。5695 个聊天日。每个气泡代表一个情感标签。气泡大小表示天数。考虑到数据集主要是朋友和家人66% 的“共同温暖M:warm”是可以预期的。但他没想到的是平均每月有 12.9% 的对话是事务性的而在 3 月份这一比例达到了 17%这得归咎于英国的财年结束。有趣的数据是随时间的变化。一段友谊在 18 个月内从“共同俏皮M:playful”转变为“共同事务性M:transactional”说明这段关系在逐渐疏远而这可能不是他在每次对话中都能注意到的。数据揭示了什么他能从数据中发现什么呢消息量似乎是最明显的指标。虽然在当下可能不太容易察觉而且有时生活、工作或假期会影响交流但消息量的下降肯定有其意义。2013 - 2020 年与亲密朋友的每月消息量。有趣的是消息量可能会下降但消息的平均长度可能会增加这意味着友谊并没有消失只是形式发生了变化。三种关系中每个发件人的消息平均长度。如果不是消息量和消息长度那还有什么呢考虑词汇重叠情况在他的一些关系中他与对方最常用词汇的重叠率从 69.5% 下降到了 8.7%。他们不再谈论相同的话题这种差异反映了关系的降温。现在他们使用几乎完全不重叠的词汇仅通过用词就可以轻易判断出是他们中谁发的消息。六种关系中的词汇收敛情况。这是否意味着他们不再是朋友了呢不一定但这确实意味着他们的兴趣差异比以前大得多这也可能是件好事。另一个有趣的指标是会话次数与每次会话的消息数。他与伴侣的互动碎片化变成了数千次的简短交流会话次数增加每次会话的消息数减少而与另一位亲密朋友的聊天则从每天多次小会话变成了每月几次有深度的对话会话次数减少每次会话的消息数增加。伴侣和亲密朋友的会话次数和每次会话的消息数。他也查看了回复时间但它更多地反映了一个人的手机使用习惯而不是他们的感受。不同聊天之间的差异很小并且随着回复长度的增加而增大。更好的指标应该是从收到消息到阅读消息的时间但所有导出数据都没有提供这一信息。四种关系中的回复时间中位数。具有讽刺意味的是平均而言他在会话中对第一条消息的回复有较大延迟但之后对后续消息的回复比数据集中其他人对他的回复都要快。是他时间太多还是无事可做呢这种差距在他与伴侣和最亲密朋友之间可以忽略不计但在与不太亲密的联系人之间会增大。在大多数对话中当一个人发送长消息时另一个人也会回复长消息这被称为语言顺应。但他发现有一些聊天情况相反他发的消息越长对方的回复越短。他没有发现跨对话的情感传染现象与一个人的交谈并不会显著影响当天他与下一个人的对话情感。悲伤不会在不同聊天线程中蔓延温暖也一样所以所有对话都在各自独立地进行。有一种理论认为随着恋爱关系的成熟提问会减少因为你已经了解对方。艾玛·皮尔森Emma Pierson分析了一段异地恋中的 5500 封邮件发现随着关系的成熟提问次数减少。他的数据在关系加深时证实了这一点但在关系变浅时却显示出相反的情况。他与伴侣的数据略有体现九年中从 8.8% 降至 8.3%但他与亲密朋友和母亲的数据则相反随着对话减少提问比例分别从 11% 增加到 18.5% 和从 8.5% 增加到 17.3%。当你只是偶尔与某人交谈时你说的话更多是为了获取信息。提问率与关系的亲密度成反比。各关系中的提问率。伴侣的提问率如皮尔森预测的那样缓慢下降而每段变浅的关系都呈现相反趋势。之前很多尝试分析聊天记录的人都制作了词云他希望再也不要看到这种东西所以他专注于亲昵用语的使用频率。这在他与伴侣的聊天中很有效聊天词汇明显分为三个阶段每个阶段都与他们的关系和生活安排的特定阶段相对应。2016 - 2026 年与伴侣聊天中的亲昵用语频率。渴望和爱的表白逐渐被昵称和亲昵语言取代然后又被认可信号和玩笑取代。当你们分开时文字承载着情感而当你们在一起时文字主要记录日常琐事因为情感方面的话会当面表达。在研究了他的亲密圈子后他扩大范围查看了年度联系人流失情况即每年不再联系的联系人数量。20 多岁时搬家2016 年搬城市2017 年搬国外对友谊的影响比 30 多岁时2023 年搬城市2025 年搬国外更大。不搬家的话他每年大约会失去 20 个联系人。最后一次消息发送在该年的联系人数量。数据集中友谊的中位数持续时间为三年但有 41 人在沉默三年以上后又重新出现。不过这些联系人不一定都是朋友。英国人类学家罗宾·邓巴Robin Dunbar发现灵长类动物的大脑大小与平均社交群体规模之间存在关联并由此推断人类可以舒适地维持 150 段稳定的关系。他还认为人类的社交关系呈同心圆结构大约有 5 个在危机时会求助的人、15 个亲密朋友、50 个经常联系的人以及 150 个活跃的熟人。邓巴社交圈层的纵向变化。多年来他的支持圈子和活跃社交网络逐渐缩小。但每年的总聊天天数连续六年几乎稳定在 360 天左右疫情也没有改变这一情况尽管当时通过 Zoom 进行的大量聚会感觉会增加聊天天数。尽管多年来他失去了 75% 的社交网络但他并没有多出一天的聊天时间只是将同样的约 360 天分配给了更少的人。与亲密朋友的聊天情感丰富多样。在情感多样性和主导情感集中度的散点图中大多数人集中在左下角一种主导情感低多样性而他的伴侣和亲密朋友则位于右上角多种情感无主导情感。与同事的事务性聊天则位于最左下角。每个点代表一个与他交谈过的人。气泡大小表示聊天量。他原本认为自己是“善于支持他人的朋友”但数据显示他同样也是“提供建议的朋友”给予指导50 个不对称聊天日的情况几乎与提供支持59 个不对称聊天日相当。当有人需要他时他的第一反应是解释而不是倾听这一点他之前并不知道。旅行时他与所有人的聊天会变得更加温暖“共同温暖”占比 69.8%而在家时为 65.9%事务性对话也会减少9.3%而在家时为 13.2%这很可能是因为他不用考虑工作。旅行日和在家日的聊天情感对比。他还能清楚地看出自己朝九晚五工作的时期他的聊天高峰时间从午夜转移到了中午。2013 - 2026 年按小时统计的消息发送时间。夜猫子往往朋友更多但质量较低。罗伊Roy等人2021在《科学报告》中发表的“社交互动的生物钟类型”研究中通过通话记录数据对生物钟类型进行分类发现夜猫子的社交网络更广但更浅。在他“午夜活跃”的时期他有大约 300 个活跃联系人而在“中午活跃”的时期这一数字降至约 60 个。等等为什么会这样他二十年来的社交生活数据只占用了 70MB 的空间比一张 iPhone 的连拍照片还小。他开始这项研究是因为蒂姆·厄本的网格图让他感到不安上面标记的上学时光、假期和工作并不能让他对自己的生活感到满意。每个方格代表一周而他的大部分方格都是空白的。现在这些方格有了内容但不是“搬到伦敦”或“结婚”这样的事情这些他不用借助数据也能记住。而是后来成为他最亲密朋友的人发来的第一条消息或是群聊中让大家笑到深夜的那个夜晚又或是某人随口分享、他至今每周都会做的食谱。他意识到他的生活从未空虚过只是他的记忆很有选择性。Obsidian 的二维图表视图处理 7000 个节点效果不佳所以他在 Vision Pro 上将其转换为三维视图。这是一个有趣的技术挑战比如通过借鉴星系碰撞模拟算法将每秒 2600 万次的计算量降低到 5 万次以达到 60 帧每秒的帧率不过这值得单独写一篇文章介绍。订阅 RSS 或时事通讯敬请期待。记忆集群有其独特的形状所以他觉得他应该在其中漫步。这项研究并没有改变他与他人交流的方式。当有人需要倾听时他还是会习惯性地给出建议他还是会在不同人面前展现不同的自己他还是会让一半的联系人的消息处于未读状态好几天。但他陷入了一场意想不到的怀旧之旅了解到了一些在单次对话中无法察觉的人际关系模式。现在他知道了从外部看他的社交模式是什么样的前提是有人愿意用同样的十步流程分析他们的聊天记录并关注他。作为一个附带结果现在他拥有了成为一个更好的朋友所需的一切信息包括上次联系的日期、情感变化轨迹、他们的希望和恐惧、他们宠物通常和孩子有时的名字、过敏情况和最喜欢的食物。它回答了很多他甚至都不知道自己存在的问题。那么他是个糟糕的朋友吗他原以为得问 400 个人才能知道答案现在看来只需要十个就够了。他做这一切只是为了记住朋友们的生日。想象一下他能为你的代码库做些什么