阅读视图

找工作啦

本来还没有去想返工的事情,然后五一前被前领导催简历了,就整理了一下发了过去后面聊了聊。既然都动起来了,索性在五一后也找几个朋友聊了下或者让帮忙做下内推之类的。总体来说现在市场行情并不算好,有 HC 的公司不算多,不过我也没什么太多想法,对于一些更感兴趣的还是会争取一下,网上也还在投投看,不过也就是最近几个星期打算处理一下这个事情,如果月底前没有很满意的,可能就继续躺着或者去我前领导或者同学那里待着了。想了下,把简历脱敏下在博客上也放一份吧,虽然应该概率很小能有看对眼的,如果我的经历里有什么项目和业务觉得感兴趣也欢迎来找我聊聊,反正几个公司都倒闭了,除了客户信息应该没啥不能聊的。工作这么多年,精力都放在公司业务上了,并没有自己去做什么个人项目,好在最近问了下前前司 CTO 得到了同意,准备把陪伴多年的几个文本处理的项目整理一下开源出来,是倾注了我比较多心血的项目,我自认为还是有一些独特价值的。

准备回头把个人经历也整理一下放到 about 页面吧。

个人信息

技能清单

  • 编程语言: Python | Shell | C | C++
  • 机器学习工具: scikit-learn | Pytorch | Tensorflow | Numpy | NLTK
  • NLP 技能: 文本分类 | 序列标注 | 信息检索 | 对话系统 | 知识图谱 | 信息抽取 | 文本挖掘
  • 数据库相关: MySQL | Redis | Neo4j | Dgraph
  • 其他: Linux | Git | Docker | K8S | Django | Elasticsearch

工作经历

北京********有限公司(2021/01~2023/05)

  • 开发基于 LLM 的聊天应用服务(2022/12~2023/05)
    • 使用 Django 实现服务,接入 OpenAI 接口,用于在飞书中集成以及之后上线的 toC 聊天应用
    • 支持了用户自定义 prompt,实现了 RAG 支持用户上传文档数据后基于文档进行问答,并能根据用户设置的 prompt 和上传文档生成机器人名字、欢迎语
    • 在对话接口中集成 Stable Diffusion 的图像生成功能支持用户在对话界面中生成图片
    • 以对话接口的形式实现了一些管理功能并接入到飞书,供运营人员查看分析聊天记录、修改机器人 prompt 和知识库、修改用户可用聊天额度等
  • 开发金融资讯服务(2021/08~2022/05)
    • 使用 Django 实现后端服务进行资讯数据的存储并提供 RESTful API
    • 使用 K8S 进行部署和运维,服务可以方便地进行水平扩展来提高负载能力
    • 使用前文所述文本处理框架对金融资讯进行去重、清洗和结构化分析,所得分析结果作为资讯推荐的特征,实现了金融资讯信息流、相关资讯推荐、要闻推荐等服务
  • 设计和开发文本处理框架(2021/01~2022/11)

    • 对文本处理过程进行抽象,实现了适用大部分文本处理过程、组件化、可扩展性强的框架,开发者可通过自定义组件以及组件与组件的组合实现复杂的自定义文本处理过程
    • 框架实现后逐步将标准的一些文本处理方法和业务中提炼出来的相对通用的文本处理方法作为组件添加到框架中,目前已集成分词、关键词提取、实体识别、实体融合、文本分类、文本摘要、观点挖掘等领域数十个组件

    该框架作为基础工具被用于公司金融资讯结构化分析的各项业务中。

****科技发展(北京)有限公司(2016/08~2020/12)

  • 参与问答系统框架的开发和优化(2019/10~2020/12)
    • 重构项目,在不削减功能的前提下将代码量削减 30%,将单元测试覆盖率从 47% 提升至 98%
    • 制定评估标准,实现评估工具,分析模型的泛化、拒识、抗混淆、多轮对话等各维度能力,以此为依据帮助在不同要求的项目中选择不同算法和参数,减少模型优化所需的人工工作量
  • 设计和开发基于知识图谱的推理问答框架(2018/01~2020-02)
    • 实现了数据库无关的 library 来读写图数据库,支持 Neo4j/Dgraph
    • 以 pipeline 架构实现图谱问答框架,各组件可方便的扩展、定制
      • 对用户问题先进行实体识别和关系识别
      • 在实体识别、关系识别的结果上,根据本体结构进行推导得到问题的形式化表达
      • 将问题的形式化表达转换为图谱查询、计算操作,得到结果
      • 用预先设计好的答案模板来渲染图谱查询结果,输出回答
  • 设计和开发通用的信息抽取框架(2017/06~2020/12)

    • 对不同的抽取技术(正则、匹配、序列标注)提供统一的抽取、归一化、校验接口
    • 提供对已有抽取结果的组合、扩展抽取以进行更复杂的任务
    • 设计为配置化的使用方式,按照规范写好配置文件即可构造各种抽取器

    该框架作为基础工具被用于实现实体识别、文档抽取功能及其他信息抽取类业务中。

  • 设计和开发 PDF 文档解析工具(2018/01~2020/07)
    • 使用 PDFMiner 获得基础的 PDF 解析结果,再基于规则和分类器进行内容元素分析
    • 实现了 PDF 文件中目录、章节标题、列表、页眉页脚、表格、脚注等不同元素的解析
  • 构建保险行业知识图谱(2017/12~2020/02)

    • 借助前文提到的 PDF 解析工具和信息抽取框架,从保险文档中抽取获得初步的保险知识
      • 借助文档解析得到的结构化信息(章节、注释等)及规则实现了大部分简单知识的抽取
      • 使用 BiLSTM+CRF 模型抽取部分非显式知识,并在数万篇文档上用 ELMO 预训练来提高效果
    • 与产品团队共同梳理清楚保险领域知识图谱的本体结构
    • 以本体结构为指导信息,对文档抽取的结果进行组合、二次抽取得到实体关系,最终形成了十万量级实体、百万量级关系(含属性)的保险领域知识图谱
      • 一部分实体及属性直接采用文档抽取结果,其余主要基于规则对抽取结果进行二次抽取
      • 针对文档抽取结果,实现了一个简单的图谱构建框架,将图谱构建分为实体获取、属性获取、关系获取、融合和链接等步骤,且允许通过配置文件对这几个步骤进行设置和扩展
    • 结合基于知识图谱的推理问答框架,实现了一个保险领域的推理问答机器人

    凭借这份知识图谱及保险问答机器人,公司成功与国内若干家保险公司、保险经纪公司、保险代理公司达成合作。

  • 设计和开发通用文本分类工具(2017/08~2019/03)
    • 预处理、分词、特征提取等过程均支持配置化,大大提高了在中小数据上进行文本分类的效率
    • 预处理器、分词器、特征提取、分类器等各个模块都可以方便地定制、扩展
    • 被广泛应用于公司各个项目的意图识别、情感分析、垃圾过滤等文本分类相关的业务中
  • 建立通用实体抽取工具(2016/11~2020/12)

    • 使用前文提到的信息抽取框架,实现了常用的细分为二十多类实体的抽取
    • 数字、日期时间等实体的抽取使用正则实现
    • 人名、地名、组织名的抽取基于已有 NLP 工具的 POS 和 NER 结果,并用自己训练的 BiLSTM+CRF 模型作为补充
    • 部分特定领域实体的抽取使用词表和 AC 自动机实现

    该工具作为基础库在公司几乎所有问答项目中被使用,显著提高了各项目实现相关需求时的效率。

  • 设计和开发相似句/同义词挖掘工具(2017/10~2018/03)

    • 使用 LCS、TFIDF+余弦相似、词向量+余弦相似等方法从语料中挖掘相似句子
    • 使用翻译接口直接生成相似句子
    • 对相似句子进行文本对齐,从中挖掘同义词数据,中小数据上效果好于直接按词向量挖掘

    该工具先后用于电商、物业、保险等多个领域的问答项目的初期数据构建,挖掘结果可用率约 30%,在挖掘结果上做 0/1 标注的效率和效果都高于人工直接撰写相似句子、同义词。

  • 开发订餐对话机器人(2016/11~2017/05)

    • 任务式的问答机器人,涉及订餐、查询订单、修改订单、取消订单四个意图及数十个槽位,确定意图后询问用户填充该意图所需槽位
    • 不直接回答而是产生三个候选答案供客服进行选择,上线后 TOP3 采用率稳定在 30% 左右

    该项目是公司第一个正式的商业合作项目,且间接或直接催生了通用实体抽取工具、通用文本分类工具、任务式问答框架等多个基础项目。

北京****网络科技有限公司(2015/03~2016/06)

  • 开发和优化题库搜索系统(2015/04~2016/03)
    • 基于倒排索引实现了一个搜索系统,用于 2000 多万题目的搜索
    • Python+Redis 实现,单次搜索耗时 1-2 ms,首位命中率 > 95%
  • 开发和优化扫题用的 OCR 系统(2015/06~2015/11)
    • 使用 OpenCV 进行二值化、去阴影、倾斜矫正、字符检测和切割等图像处理,使用 Caffe 进行字符识别
    • 单字识别率达 96%,OCR+题库搜索正确率约 70%
  • 开发翻译结果自动评分模块(2016/01~2016/03)
    • 对学生提交的翻译结果,和标准答案对比,给出评分
    • 使用 METEOR 算法,与人工评价之间的 RMSE 约为 1.5(15 分制)

****技术(北京)有限公司(2014/03~2015/02)

  • 研究和实现说话人分割技术(2014/06~2015/01)
    • 在大规模语音数据训练出来的人声 GMM 上做最大后验估计得到内容无关的音频特征
    • 将音频切成小段并去除非人声后,对邻近段落使用层次聚类来区分出不同的说话人
    • 在两人对话场景下正确率 > 90%,处理时长与音频时长比 < 0.03
  • 研究并实现语音与文本融合的多模态情感分析(2014/09~2015/01)
    • 混合语音特征和文本特征,使用 SVM 进行分类,正确率 > 90%
  •  

ZMonster's AI Notes(Alpha) #2:模型汤、推测解码、幻觉的类型与定义、GPT top_logprobs

分享最近关于 AI 方面的笔记、想法以及实践记录。本系列内容模式的最终形态尚不确定,可能会根据个人精力、兴趣及阅读反馈做调整,所以称之为试作版。

从第一期之后拖延了很久,先是花了比较多精力做 2023 年的回顾总结,之后则因为即将过年回家比较焦虑而导致没有办法集中精力,看下过完年后能不能争取专注一些。下一期准备集中了解下幻觉的检测与缓解方法。

术语

简单介绍下我最近新了解到的 AI 领域的一些术语,但不做深入探究。

模型汤(Model Soup)

论文《Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time》 提出的概念,本质上属于模型合并(Model Merging)的一个方法,作者发现把同一个模型在多个不同下游任务上微调过后的权重进行加权平均(论文中尝试了多种方法如直接平均或者学习加权参数)后,能在新的下游任务上也得到效果的提高(相比未微调的基础模型)。其解释我理解是说两个不同的下游任务在微调时会在损失函数的曲面上走不同的下降路线,加权平均后往往能更接近极值点。

2024-02-06_11-37.png

在这个发现的基础上, 《Editing Models with Task Arithmetic》 这篇论文进一步发现微调模型与基础模型之间的权重差(论文中称之为任务向量)具有语义,微调过后的模型可以通过减去这个权重来遗忘这个任务,不同任务的任务向量相加也能获得一个综合了多个任务能力的新模型。

2024-02-06_11-42.png

时间错位(Temporal Misalignment)

《Time Waits for No One! Analysis and Challenges of Temporal Misalignment》 等一些论文里发现用时间段 A 内训练的大模型在另外的时间段 B 上效果会不好,反映到现实中的大模型表现就是其效果会随时间变化而慢慢在新的文本上效果变差,看起来好像是退化一样 —— 其实不能说是退化,只是人们使用的语言一直在变化,如果要让模型始终保持稳定的表现就需要持续地使用新的数据去进行训练微调。

2024-02-06_12-05.png

之后 2023 年的论文 《Time is Encoded in the Weights of Finetuned Language Models》 进一步发现,模型的能力在不同年份之间会变差,但相近时间段文本训练的模型效果也会接近,并借鉴前面「模型汤」一节中提到的任务向量的概念,提出了时间向量,发现将两个不同的时间向量进行插值(其实也是加权平均)可以使模型在这两个时间段之间的时间段效果变好,认为可以用不同时间段的文本数据进行微调后得到一个个时间向量然后在有需要的时候混合起来,以低成本地改善任意时间段的模型效果,将这种思路称之为「时间汤」,当然最后也承认这种做法效果还是比不上完整收集所有时间段的数据统一进行训练,不过我个人认为还是很有用的,现在有很多开源的语言模型,借鉴这个思路可以在已有的模型上低成本地进行改进。

2024-02-06_12-50.png

推测解码(Speculative Decoding)

Google Research 在论文 《Fast Inference from Transformers via Speculative Decoding》 中提出的一种语言模型生成加速的方法,说是受 CPU 里的分支预测技术的启发,其基本思想是基于模型越大生成每一个 token 时越慢这个状况,引入一个更小更快的草稿模型,让草稿模型来去生成 token 然后让更大的模型去决定是否要接受这个 token,只有草稿模型的生成被认为不够好被拒绝时,才用更大的模型自己去生成 token。按照论文里的不同设置,最高的时候能够以原来不使用草稿模型的生成方法的 6 倍多的速度来完成整个生成过程。

2024-02-06_18-12.png

另外 DeepMind 也有一篇论文 《Accelerating Large Language Model Decoding with Speculative Sampling》 讲推测解码的,不过论文里说明了和前面的这篇论文是相同的思路。

论文

写完第一期之后,我选择了幻觉(hallucination)这个主题,决定去梳理清楚这几个问题:

  • 目前 LLM 中经常被提的幻觉的定义是什么?
  • 幻觉都有哪些类型?

作为一个新兴的概念,幻觉这个术语目前并没有非常一致的共识和清晰的定义,从看到的论文里来看,有一些会尝试先给出相对严格的整体性定义和描述,再仔细区分其中的不同类型,有的则对整体定义一带而过只具体描述了几种类型,另外还有大量在不同子领域分析幻觉现象的工作,其中的幻觉定义和分类就更加繁杂了,我尽量先了解了下任务不相关的幻觉定义及其分类。

Ziwei Ji 的 《Survey of Hallucination in Natural Language Generation》 这篇论文是目前我读到的对幻觉的定义比较通用和清晰的,也是我看的各种幻觉相关的论文里被引用的比较多的,有很多关于幻觉的论文自己不想做定义就直接引用下这篇论文。

这篇论文先从心理学上「幻觉」的定义出发,引用了 Blom 在《A Dictionary of Hallucinations》一书中给的定义:

In the general context outside of NLP, hallucination is a psychological term referring to a particular type of perception. Blom define hallucination as “a percept, experienced by a waking individual, in the absence of an appropriate stimulus from the extracorporeal world”.

这个定义里有几个要点:

  1. 没有外部刺激
  2. 但人脑仍产生了类似有外部刺激时的感受
  3. 并且这种感受可以很真实

借鉴心理学上的定义,Ziwei Ji 给了关于幻觉的定义:

The generated content that is nonsensical or unfaithful to the provided source content.

简单来说,就是模型生成了无意义的文本或者不忠实于指定信息或知识的文本,也就是网络上大家调侃的「一本正经地胡说八道」。此外论文里还有一些幻觉文本的特点的描述,比如说这种文本在表达上一般都很流畅,看起来似乎也是基于某种真实的语境或者背景知识,但往往这种背景知识并不存在或者是错误的。

不过需要注意的是,Ziwei Ji 的定义里有一个「source content」,具体来说:

  • 对摘要任务来说,source content 是指待进行总结的文本
  • 对翻译任务来说,source content 是指待进行翻译的源语言文本
  • 对多轮对话来说,source content 是指对话历史中与当前消息有关的消息
  • 对检索式问答来说,source content 是指根据用户输入检索到的问答对语料数据
  • 对 data-to-text 来说,source content 是指给定的结构化数据
  • ……

那开放式问答这种没有提供上下文的情况,所谓 source content 应该指什么呢?论文里为了保持一个统一的定义,就说这个时候的 source content 应当是世界知识(world knowledge),不过所谓的世界知识又怎么定义就没再提了,虽然看起来是将问题转移了,但比起其他一些论文里不加说明就使用某些假设的做法来说已经好很多了。

在关于幻觉的文献里,经常会在提到幻觉时一起提到忠实性(faithfullness)和事实性(factualness)这两个词,不同论文对这三个概念的使用其实还挺混乱的,Ziwei Ji 也在论文里对这三个概念做了阐释和区分(这也是我喜欢这篇论文的原因,别的很多论文都是一副理所当然的样子把这三个词拿出来用)。在 Ziwei Ji 看来,忠实性是说当我们给定一些信息或知识(注意,用户有可能有意或无意给一些错误的知识)时模型是否能在生成结果时与其保持一致,而事实性则是能否与现实中的事实保持一致,而一些关于幻觉的论文粗暴地将提供给模型的信息或知识当作「事实」(或者说用 fact 这个词来描述给定的信息)就造成了忠实性和事实性两个概念的混淆,而 Ziwei Ji 的做法就是用「世界知识」这个词来代替「事实」以避免混淆,将「世界知识」也作为一个 source content,这样也获得了一个统一的定义。虽然看起来有点文字游戏,但明确地划定词语的界限是很有必要的。

在上述定义的基础上,Ziwei Ji 给出了两个幻觉的子类型定义,分别是:

  • 内在幻觉(Intrinsic Hallucinations):指生成的文本与 source content 矛盾、不一致,比如说做摘要明明原文说了「The first vaccine for Ebola was approved by the FDA in 2019」但生成的摘要里却说「The first Ebola vaccine was approved in 2021」
  • 外在幻觉(Extrinsic Hallucinations):指生成了与 source content 无关的内容,用给定的 source content 无法验证它是对的还是错的,比如说做翻译的时候,原文是「迈克周四去书店」,按理说应该翻译成「Michael went to the bookstore on Thursday」,结果得到的结果是「Michael happily went to the bookstore with his friend」,这个「happily」和「with his friend」就是外在幻觉 —— 当然,从翻译任务上来说我们当然可以说它是错的,但前面说的「用给定的 source content 无法判断它是对的还是错的」是考虑任务无关的情况的

这个分类和其他一些论文里将幻觉分为忠实性幻觉和事实性幻觉是不一样的,在 Ziwei Ji 这个分类里,内在幻觉有些是忠实性的(当为翻译、摘要等任务时)有些是事实性的(当为开放问答即 source content 是世界知识时),而外在幻觉是指多出来一些无关的内容(当然这个无关具体如何定义和评估又是一个值得讨论的问题),这些内容未必是事实错误的甚至未必是一种错误。有些论文里将幻觉和错误混为一谈在读的时候也让人感到混乱,如果将所有错误都称之为幻觉,那这个新的词也就没有必要存在了。

之后,Yue Zhang 等人在论文 《Siren's Song in the AI Ocean: A Survey on Hallucination in Large Language Models》 中使用了 Ziwei Ji 对幻觉的定义,并在 Ziwei Ji 的分类基础上基于自己的认识将幻觉分成了三类:

  • 输入冲突幻觉(Input-Conflicting Hallucination):和 Ziwei Ji 的内在幻觉的定义基本是一样的
  • 上下文冲突幻觉(Context-Conflicting Hallucination):指模型在生成长文本或多次生成时的前后不一致,比如说在生成一个小故事的时候先在开头生成了「小明今年15岁」然后到结尾的时候又生成了「13岁的小明表示看不懂但大受震撼」,从模型运作的方式上来说,前面生成的内容其实也在后面生成的时候充当输入角色了,算是对内在幻觉的一个扩展吧
  • 事实冲突幻觉(Fact-Conflicting Hallucination):即生成的内容与世界知识、现实中的事实不相符的情况

Yue Zhang 引用了 Ziwei Ji 对幻觉的定义,但他又直接忽略了外在幻觉这个类型,三个分类其实都可以算在 Ziwei Ji 的内在幻觉这个类型下面,这个也可以理解,毕竟外在幻觉的情况其实有些模糊,在实际操作中并不是特别好进行界定。

然后,Hongbin Ye 等人的论文 《Cognitive Mirage: A Review of Hallucinations in Large Language Models》 也引用了 Ziwei Ji 的定义,但没有像 Yue Zhang 一样尝试去做幻觉的类型划分,而是收集了各个具体任务中的幻觉定义和类型划分的工作,如果想要了解特定任务而非任务无关的幻觉的定义和分类,这篇论文是一个非常不错的入口。限于个人精力我暂时没有去对里面罗列的各种其他论文去做了解,等有需要了再说吧。

2024-02-06_21-15_2.png

接着,Lei Huang 等人的综述性论文 《A Survey on Hallucination in Large Language Models: Principles, Taxonomy, Challenges, and Open Questions》 也基于 Ziwei Ji 的定义给出了自己的二级幻觉分类:

  • 事实性幻觉
    • 事实不一致(Factual Inconsistency):指生成结果里有与已知事实不一致的的错误生成结果,认为这个是最常见的
    • 事实编造(Factual Fabrication):指生成结果里一些陈述,这些陈述用已知的事实无法验证、或者说已知的事实 —— 话说回来,编造的事实能称之为「事实」么,这种用词就让人觉得比较混乱
  • 忠实性幻觉
    • 指令不一致(Instruction Inconsistency):指模型没有遵循用户的任务指令去做了别的事情,比如让翻译结果因为待翻译的内容是一个问句就去回答这个问句了
    • 上下文不一致(Context Inconsistency):指生成结果单纯和输入中的内容不一致的情况,和 intrinsic hallucination、input-conflicting hallucination 是一个意思,但用的是 context 这个词……
    • 逻辑不一致(Logical Inconsistency):指在做逻辑推理时,生成的推理步骤之间不一致或者推理步骤和最终结果不一致的情况,可以算作 Yue Zhang 分类里上下文冲突幻觉的一个特例

Lei Huang 的分类我是觉得有点问题的:首先指令不一致有专门的工作即指令追随(Instruction Following),我认为这是一种混淆错误与幻觉的行为,而作者在论文里给出这个分类的理由居然说是考虑现在 LLM 非常以用户为中心需要重点考虑和用户保持一致,我觉得不太能说服我;此外,为什么加入逻辑不一致这个分类,也没做什么解释,大概也是认为逻辑推理能力现在研究比较热门?如果是一篇专门讲逻辑推理中幻觉问题的论文,我觉得没什么问题,但这篇论文又标榜自己是个综述,就感觉这样做不太合适。

除了上述基本都基于 Ziwei Ji 给的定义来进行定义扩充或分类细化的工作外,也有一些明确提出定义标准的,目前我看到说得比较清楚的是 Ayush Agrawal 等人在其论文 《Do Language Models Know When They're Hallucinating References?》 所给出的定义:

We define hallucination to be fabricated text, meaning text that is not grounded in this training set. In contrast, correctness is evaluated with respect to ground-truth answers.

也就是说,在 Ayush Agrawal 的定义里,所谓的幻觉是指生成结果中无法在训练数据中找到依据的杜撰文本。这个定义就把「事实性」「正确性」这些特别宽泛模糊很难界定的概念完全排除出去了,作者也明确说认为幻觉未必就是事实上不正确的,比如说训练数据里提到说人脑只开发了 10% 虽然它是错误的,但基于这样的训练数据训练出来的模型如果生成了相关的文本,那么就不能称之为为幻觉,并认为现在很多讨论幻觉的工作把 groundedness (不知道该怎么翻译,在这篇论文里的语境里就是指在训练数据中存在相关的文本这个意思)和 correctness 也就是正确性混为一谈。

Much work on hallucination conflates groundedness and accuracy, often equating hallucination with fallacy and evaluating hallucinations using accuracy on fact-based assessments, without regard to the training data. We adopt the groundedness definition of hallucination even though it may often be less clear-cut and more difficult to evaluate than factuality.

这个定义相比 Ziwei Ji 的定义做了非常强但也很明确的约束,可能未必符合大众的认知和期望,但我还蛮喜欢这个定义的,清晰明确便于进行评估。

实践

GPT API 中的 top_logprobs 参数

在之前,OpenAI GPT 的 LLM API 分为 CompletionsChat 两个,其中 Completions 接口能使用 text-davinci-003 等更旧的 GPT-3 模型,而 Chat 接口则可以使用 gpt-3.5-turbo 和 gpt-4 等更新的模型,但我一直都很喜欢 Completions 接口,因为这个旧的接口提供一个 logprobs 参数,可以输出模型给每个 token 的概率,甚至还能输出每一个 token 时的 topn 的其他 token 及概率,这就使得我可以利用它来计算给定 prompt 或者输出的困惑度(perplexity) ,用来做简单的效果评估,或者也可以通过每一步输出的 topn 结果进行组合在一次调用里生成多个结果(对输出非步骤性列表比如说帮忙起名字的任务来说很有用的),In-Context Learning 里一些用来判断模型是否存在 bias (比如说做情感分类的时候发现给定一个空输入的时候也会倾向于预测为 positive)并基于这个 bias 的偏离概率去做校准的工作也需要能得到每个 token 的概率……但长期以来能使用更新更好模型的 Chat 接口都没有支持这个参数,也不知道 OpenAI 在干什么。

这几天去翻了下 API 说明发现 Chat 接口已经支持输出每个 token 的概率以及 topn 的 token 及概率了,看了下 Changelog 是在 2023-12-15 的更新里加上的,不过和旧的 Completions 接口有一点区别:

  • logprobs 参数用来设置是否要返回 token 的概率
  • top_logprobs 参数则用来设置要返回最好的几个 token 及其概率,最大值是 5

不过美中不足的是,原先 Completions 接口还有个 echo 参数当设置为 true 的时候会在输出结果里带上输入 —— 不是说将输入的内容重新生成了一遍,只是将输入内容附加到输出内容前面,有了这个参数才能获得输入中每个 token 的概率用来计算 prompt 的困惑度,但这个参数在 Chat 接口中仍然没有支持。

把之前自己利用 Completions 接口的 logprobs 参数做困惑度计算(如前面所说 Chat 接口只能计算生成结果的困惑度无法计算 prompt 的困惑度)和多个结果生成的脚本改了下,放到 gists 了,这里就不展示代码了,只来展示一下运行效果。

  • 获得生成结果的困惑度

    python playgpt.py --model gpt-3.5-turbo \
           --proxy 'http://localhost:8888' \
           --max-tokens 128 \
           --temperature 0 \
           --prompt '桃花汛是什么?'
    

    得到的结果是:

    PROMPT:
        桃花汛是什么?
    
    RESULT:
        桃花汛是指中国古代文学中的一个典故,也是指桃花开放时期的洪水。根据传说,每年春天桃花盛开时,河水会因为桃花的美丽而上涨,形成洪水。这种洪水被称为桃花汛。桃花汛在文学作品中常常被用来比喻美好的事物或者美
    
    CANDIDATE RESULTS(With PPL):
        TEXT: '桃花汛是指中国古代文学中的一个典故,也是指桃花开放时期的洪水。根据传说,每年春天桃花盛开时,河水会因为桃花的美丽而上涨,形成洪水。这种洪水被称为桃花汛。桃花汛在文学作品中常常被用来比喻美好的事物或者美', PPL: 1.386107427324887
    
    Usage:
        prompt_tokens: 18
        completion_tokens: 128
        total_tokens: 146
    

    temperature 参数不为 0 时,模型输出的结果在未必会在 top_logprobs 结果里输出 —— 这也可以理解,毕竟当 temperature 大于 0 时将会进行概率采样,是有可能选中 topn 之外的 token 的,所以我写的这个示例,只有在 temperature 设置为 0 时才可以稳定获得结果的困惑度,如果设置不为 0 有时候是会没有困惑度结果的。

  • 一次生成多个名字

    PROMPT: 起一个女性名字,姓刘,名字要和月亮有关,但不要直接用月字,尝试根据一些古诗词里的典故,使用较常见而不是冷僻的字,只输出名字无需其他。结果是:刘

    python playgpt.py --model gpt-3.5-turbo \
           --proxy 'http://localhost:8888' \
           --max-tokens 10 \
           --top-logprobs 3 \
           --result-num 10 \
           --temperature 0 \
           --prompt '起一个女性名字,姓刘,名字要和月亮有关,但不要直接用月字,尝试根据一些古诗词里的典故,使用较常见而不是冷僻的字,只输出名字无需其他。结果是:刘'
    

    得到的结果是

    PROMPT:
        起一个女性名字,姓刘,名字要和月亮有关,但不要直接用月字,尝试根据一些古诗词里的典故,使用较常见而不是冷僻的字,只输出名字无需其他。结果是:刘
    
    RESULT:
        婵娟
    
    CANDIDATE RESULTS(With PPL):
        TEXT: '婵娟', PPL: 1.3893958134060524
        TEXT: '嫵娟', PPL: 1.4518073221689531
        TEXT: '娵娟', PPL: 1.753700750011277
        TEXT: '婉娟', PPL: 2.1273314013866393
        TEXT: '嫉娟', PPL: 2.2228908964694374
        TEXT: '娉娟', PPL: 2.6851258929509876
        TEXT: '婷娟', PPL: 3.300551957606001
        TEXT: '嫷娟', PPL: 3.4488123924201473
        TEXT: '婵婟', PPL: 3.5588571357287666
        TEXT: '嫵婟', PPL: 3.718720611038904
    
    Usage:
        prompt_tokens: 87
        completion_tokens: 6
        total_tokens: 93
    

    生成效果先不说,可以看到,Usage 里 prompt_tokens 是 87、completion_tokens 是 6,相比其他方法来生成多个名字能减少一些 token 使用,比如说:

    • 最粗暴的方法是设置 temperature 大于 0 然后反复运行 10 次,假设每次的 completion_tokens 都是 6,那么 10 次需要消耗 930 个 token
    • 更好一点的方法是在 prompt 里要求输出多个名字,假设 prompt 不变,completion_tokens 至少要是 60,那么至少要消耗 153 个 token
  •  

我的年度总结所使用到的数据分析和可视化工具

两年前我写完《我的2021》后有些朋友问我用到了什么工具和方法,前阵子写完《我的2023》后又有一些朋友询问,所以就来简单写一下好了。

数据的获取

在两篇年度总结中,我用到了这么一些数据

  • 日记文本
  • 工作日志文本
  • org-mode clock 记录
  • 微信聊天记录
  • B站观看记录

其中日记文本和工作日志文本都没有什么好说的,都是我用 org-mode 手工记下来的,这里只简单展示一下这两者的内容结构

  • 工作日志是一个「年-月-日-具体记录」的四级结构

    work_journal_example.png

  • 日记是一个「日-具体记录」的两级结构

    diary_example.png

org-mode clock 记录也是使用 org-mode 产生的,这个在《我的生活记录经验及个人工具与方法》这篇文章中也有提过,每当我执行 org-clock-in 或者 org-clock-out 后就会自动在对应任务下的 LOGBOOK 下自动地新增记录,如下图所示:

clock_records_example.png

然后是微信聊天记录,我目前使用 EFB 来将微信消息转发到 Telegram,而 Telegram 是有接口能导出历史消息的,其 PC 桌面端也能直接将历史消息导出。其他的微信聊天记录导出方式我没有了解过。

B站的观看记录,我自己写了一个简单的脚本去抓取,见 Gist

用 orgparse 解析 org-mode 文件

我的工作日志和日记都是 org-mode 文件,本质上里面的内容是一个树形的结构,最开始是自己写代码去解析的,后来换成了 orgparse 这个 Python 的 org-mode 解析器。

orgparse 可以直接将 org-mode 文件内容解析成一棵树,这样我在处理工作日志和个人日记时只要去遍历这棵树就好了

import orgparse

content = '''

* 2024-01-17 周三
** 12:05 能做的事情
blablablabla
** 16:01 怠惰
blablablabla
** 17:44 编制
blablablabla
** 22:06 今日回顾
blablablabla
* 2024-01-18 周四
'''

tree = orgparse.loads(content)
for node in tree.children:
    print(node)

# 结果:
# * 2024-01-17 周三
# * 2024-01-18 周四

然后任务下面的 clock 记录它也会解析出来

import orgparse

content = '''
* 休闲
** SOMETIME 看电影
:LOGBOOK:
CLOCK: [2023-12-21 四 18:10]--[2023-12-21 四 21:20] =>  3:10
- 狗神
CLOCK: [2023-10-04 三 14:59]--[2023-10-04 三 17:28] =>  2:29
- 俄罗斯火车大劫案
:END:
'''

tree = orgparse.loads(content)
for level_1_node in tree.children:
    for level_2_node in level_1_node.children:
        for item in level_2_node.clock:
            print(item)

# 结果
# [2023-12-21 Thu 18:10]--[2023-12-21 Thu 21:20]
# [2023-10-04 Wed 14:59]--[2023-10-04 Wed 17:28]

不过有点可惜的是解析出来的 clock 记录把 note 丢掉了,所以我只用来做大类的时间统计,有些依赖里面内容的分析我还是自己做的。

用 LTP 进行分词/词性标注/实体识别等文本分析

要绘制词云就需要从文本里提取关键词,所以分词是必需的。再进一步的关键词提取,虽然也有很多工具,但这些工具基本上都是面向某个领域的,和我自己的日记、日志并不太匹配,所以我就采取了一些简单的策略来做关键词提取,反正也只是用来画一个词云,马马虎虎就行。

具体来说,这个策略是这样的:

  • 先对文本进行分词、词性标注(标记每个词是名词、形容词、动词还是别的什么)、实体识别(人名、地名、机构名等)
  • 反向过滤:若词中包含标点符号则去除,若词在停用词表中则去除,若词的词性为我设定的类别(连词、助词、叹词、量词、数词、介词、非语素词、时间名词)则去除(LTP 使用的词性标注集是 2005 年颁布的《信息处理用现代汉语词类标记规范》)、若词中字数太少(1个字的往往无意义)或太多(字数太多可能分词出错了)则去除
  • 正向筛选:识别为实体的词一律选中作为关键词,我预先设置的一些重要词汇一律都选中作为关键词

能进行分词、词性标注、实体识别的工具很多,21 年的时候我用的是 jieba ,它的好处是依赖干净而且比较快,但效果要差一些而且没有实体识别功能。除了 jieba 还可以用北大的 pkuseg、哈工大的 LTP、百度的 LAC,当然国外的 spaCy 和斯坦福大学的 Stanza 也有中文支持都是不错的,我个人建议 pkuseg 或者 LTP。2023 年的年度分析我最后选了 LTP,是因为 LTP 在持续地更新,4.0 后已经升级成了 pytorch 模型想尝试下。

LTP 的模型建议像我一样自己下载好放到本地,否则它会去从已经被大陆屏蔽的 Huggingface 上下载而失败出错。

from ltp import LTP

ltp = LTP('/home/zmonster/Projects/ltp/small/')
output = ltp.pipeline(['思考晚上吃什么最后决定煮面吃,然后在整理日记的时候看到自己有一天空气炸锅了头一天 KFC 疯狂星期四买的鸡米花,想起来了之前自己还买过小酥肉放冰箱了,翻出来准备空气炸锅热了晚上吃一点。'], tasks=['cws', 'pos', 'ner'])

print(output.cws)
# [['思考', '晚上', '吃', '什么', '最后', '决定', '煮', '面', '吃', ',', '然后', '在', '整理', '日记', '的', '时候', '看到', '自己', '有', '一', '天', '空气', '炸锅', '了', '头', '一', '天 ', 'KFC ', '疯狂', '星期四', '买', '的', '鸡米花', ',', '想', '起来', '了', '之前', '自己', '还', '买', '过', '小', '酥肉', '放', '冰箱', '了', ',', '翻', '出来', '准备', '空气', '炸锅', '热', '了', '晚上', '吃', '一点', '。']]

print(output.pos)
# [['v', 'nt', 'v', 'r', 'nd', 'v', 'v', 'n', 'v', 'wp', 'c', 'p', 'v', 'n', 'u', 'n', 'v', 'r', 'v', 'm', 'q', 'n', 'v', 'u', 'm', 'm', 'q', 'nz', 'a', 'nt', 'v', 'u', 'n', 'wp', 'v', 'v', 'u', 'nd', 'r', 'd', 'v', 'u', 'a', 'n', 'v', 'n', 'u', 'wp', 'v', 'v', 'v', 'n', 'v', 'v', 'u', 'nt', 'v', 'm', 'wp']]

print(output.ner)
# [[]]

用 ImageMagick 进行简单的图像处理

我用 ImageMagick 来生成词云图需要的 mask 图使得画出来的词云能按照我预想的形状展示:

  • 用 ImageMagick 绘制一张黑底白字写着 2023 的图

    convert -background black -fill white -pointsize 512 label:2023 2023.png
    

    2023.png

  • 用 ImageMagick 绘制一个直径 400 像素的圆

    convert -size 400x400 xc:white -fill black -draw 'circle 200,200 200,3' circle400.png
    

    circle400.png

然后我还很常用 ImageMagick 来裁剪一下图像的白边使得图像显得更紧凑一些,随后讲到的绘制热力图的 july 产生的结果就会有特别大的一块白边,我希望它能少一些但它又没有提供什么选项来让我控制(matplotlib 的 tight_layout 完全没作用)所以只能用 ImageMagick 再处理一下了

convert -trim 2023_diary_heatmap.png  /tmp/a.png
mv /tmp/a.png 2023_diary_heatmap.png

裁剪前是这个样子的

2023_diary_heatmap-original.png

裁剪后是这个样子

2023_diary_heatmap.png

用 july 绘制日志/日记热力图

july 是一个基于 matplotlib 的用来绘制每日事件热力图的工具, 如下所示

import numpy as np
import matplotlib.pyplot as plt
import july
from july.utils import date_range

dates = date_range("2020-01-01", "2020-12-31")
data = np.random.randint(0, 14, len(dates))
july.heatmap(dates, data, title='Github Activity', cmap="github")

会得到这样的图:

july_heatmap_github.jpg

具体使用看项目 README 就好了,没有什么太特别的。不过如果想和我一样让显示的横坐标和纵坐标都是中文的话,需要在调用 july 前设置一下 locale

locale.setlocale(locale.LC_ALL, "zh_CN.UTF8")

另外就是在调用 july 的时候设置一下字体,这个在 README 的示例中有。

最近才看到 yihong 的 GithubPoster 感觉非常不错,之后也许就用 yihong 的这个工具了。

用 wordcloud 绘制词云

wordcloud 是基于 matplotlib 实现的词云绘制工具,它自己也提供了命令行工具直接从文本中读取数据然后绘制,但它里面自带的是按空白符进行分词的做法,也就是说不适用于中文文本。

好在它的 WordCloud 类实现了一个叫作 generate_from_frequencies 的方法,所以我是先在之前用 LTP 分词自己统计好频次后使用这个方法来绘制,像这样:

from wordcloud import WordCloud

freqs = {
    '朋友': 432,
    '吃饭': 368,
    '游戏': 127,
    '聊天': 106,
    '晚饭': 83,
    '整理': 76,
    '午饭': 75,
    '早饭': 74,
    '洗漱': 60,
    '父母': 55
}
wc = WordCloud(background_color='white', width=200, height=200)
wc.generate_from_frequencies(freqs)
wc.to_file('wordcloud.png')

不过它默认的实现不支持中文绘制,上面的代码会得到这样的图

wordcloud_example_without_cnfont.png

通过 font_path 参数设置一下中文字体路径即可,我使用了文泉驿微米黑这个字体:

wc = WordCloud(
    background_color='white',
    width=200,
    height=200,
    font_path="/usr/share/fonts/truetype/wqy/wqy-microhei.ttc"
)

这样就能得到

wordcloud_example_with_cnfont.png

如果想要将词云绘制成特定的形状,就要使用前面用 ImageMagick 生成的 mask 图像了,通过 mask 参数传入对应的图像即可,最终会在 mask 图像的黑色区域绘制,比如使用前面那个圆形的 mask 图像:

from wordcloud import WordCloud
from PIL import Image
import numpy as np

mask_image = np.array(Image.open('circle400.png'))
freqs = {
    '朋友': 432,
    '吃饭': 368,
    '游戏': 127,
    '聊天': 106,
    '晚饭': 83,
    '整理': 76,
    '午饭': 75,
    '早饭': 74,
    '洗漱': 60,
    '父母': 55
}
wc = WordCloud(
    background_color='white',
    mask=mask_image,
    width=len(mask_image[0]),
    height=len(mask_image),
    font_path="/usr/share/fonts/truetype/wqy/wqy-microhei.ttc",
)
wc.generate_from_frequencies(freqs)
wc.to_file('wordcloud.png')

结果如下图所示,虽然因为词比较少看着不太圆,但大体形状上能看出来和前面那张图的差别。

wordcloud_example_circle.png

用 matplotlib_venn_wordcloud 绘制韦恩图形式的词云

韦恩图(Venn Diagram)是用来展示两个集合之间关系(是否有交集、交集部分有多少等)的一个图形,如下图所示:

venn_example.png

写《我的2021》分析聊天记录的时候,我想要分析我和一个特定的人交流的时候我们双方说的内容之间的同异同时又希望能把交流中高频的词突出显示,所以就想要在一个韦恩图形式的词云,具体来说是下面这个样子:

venn_wordcloud_example1.png

可以看到,总体上它还是一个词云图,但又引入了韦恩图的概念,左边的圆是我说过的话里的关键词、右边的图则是朋友说过的话里的关键词,两个圆的交集则是我们双方都说过的词。

这个是一个比较小众的需求,但最后还真找到了一个实现,也就是 matplotlib_venn_wordcloud 这个工具,其使用方法如下所示:

import matplotlib.pyplot as plt
from matplotlib_venn_wordcloud import venn2_wordcloud

plt.rcParams["font.sans-serif"] = ["WenQuanYi Micro Hei"]

words = {
    '我': {'知识', '工具', '笔记', '建立', '体系', '管理', '方式', '想法', '价值', '优秀', '理解'},
    '朋友': {'笔记', '知识', '体系', '内容', '教育', '嵌入', '引用', '功能', '链接', '关系'},
}
freqs = {
    '知识': 69,
    '笔记': 68,
    '内容': 65,
    '体系': 63,
    '建立': 61,
    '工具': 61,
    '教育': 59,
    '方式': 57,
    '想法': 57,
    '理解': 55,
    '链接': 44,
    '嵌入': 44,
    '功能': 43,
    '价值': 32,
    '引用': 27,
    '管理': 25,
    '关系': 23,
    '优秀': 19,
}
names, sets = list(zip(*words.items()))
venn2_wordcloud(
    [set(item) for item in sets],
    alpha=0.8,
    set_labels=names,
    word_to_frequency=freqs,
    wordcloud_kwargs={
        'font_path': '/usr/share/fonts/truetype/wqy/wqy-microhei.ttc',
    }
)
plt.savefig('venn_wordcloud.png')

由于这个工具对中文支持也不是很好,所以需要像我上面的代码一样,分别在两处设置一下中文字体。

上面的代码会得到如下的图像:

venn_wordcloud_example2.png

用 matplotlib.pyplot.subplot_mosaic 进行布局设置

除此以外的大部分图像如柱状图、线图、饼图等我都是用 pandas 和 matplotlib 来绘制的,这一块的公开资料很多,所以这里只提一下要在一张图里画多个图表时设置布局的心得,具体来说是用 matplotlib.pyplot.subplot_mosaic 这个函数,它可以用比较直观地方式进行绘图的布局设计 —— 图像分为几行几列、某一个子图占据哪几行哪几列之类的,比如说:

  • 绘制 A/B/C/D 四个子图,A/B/C 一起在第一行并且各占 1/3 的宽度,子图 D 占据第二行整行

    import matplotlib.pyplot as plt
    plt.subplot_mosaic('ABC;DDD')
    

    上面的代码会得到下面的布局:

    subplot_mosaic_example1.png

  • 绘制 A/B/C 三个子图,A/B 一起在第一列并且各占 1/2 的高度,C 占据第二列整列

    import matplotlib.pyplot as plt
    plt.subplot_mosaic('AC;BC')
    

    上面的代码会得到下面的布局:

    subplot_mosaic_example2.png

  • 绘制一个 3x3 的布局,但只在中心和 4 个角进行绘图

    import matplotlib.pyplot as plt
    plt.subplot_mosaic([
        ['A', '.', 'B'],
        ['.', 'C', '.'],
        ['D', '.', 'E'],
    ])
    

    上面的代码会得到下面的布局:

    subplot_mosaic_example3.png

  •  

我的2023

2023 年继续贯彻我尽量记录一切的理念,统计了下 org-mode 的 clock 数据,这一年有记录的时间共计 7924.55 个小时,合计 330.19 天,占比 90.46%,这有记录的 7924.55 个小时的情况如下图所示:

2023_time_usage.png

  • 睡觉共记录 2802.87 小时,平均每天是 6.31 小时,虽然 6 月起就没有在工作了,但睡眠还是不好,还是顶着黑眼圈,2024 年希望能多睡一点好觉;
  • 「休闲-其他」这个条目记录的是无明确目的的、消磨时间的活动,包括醒后的赖床、睡前的玩手机以及其他任何两段有明确目的的活动之间的空隙(一般都是在玩手机、刷推等),算下来平均每天有 4.12 个小时,也就是说我每天都要浪费六分之一的生命 —— 不过我对浪费生命没有什么愧疚感,作为一个并不想做什么大事业的人,生命就是拿来浪费的嘛,不过这些记录中的活动其实包含了很多种类的活动,还是可以作细化的,之后尝试一下吧;
  • 排名第三的是游戏,这一年我确实玩了很多很多的游戏,可以说比往年任何时候都多,能有大量的时间去纯粹的体验游戏的乐趣,而不是在下班后拖着疲惫的身体带着「我还有一两个小时的自由时间要好好玩下游戏不然今天就浪费了」或者「今天工作不开心想去玩下游戏放松下」(真正的放松是早点休息啦)等复杂的心情去打开游戏——只有在不玩游戏时也是开心平静的时候,才能真正体会到游戏的乐趣,我是这么想的;
  • 工作没什么好说,因为只工作了 5 个月所以就只有 449 个小时,如果是往年的话工作大概会是在第一或者第二的位置
  • 日常生活的一些环节如吃饭(343 小时)、洗漱(318 小时)、做饭(180 小时)、上厕所(113 小时)、家务(63 小时)加起来就 954 小时了,如果不是特别追求高效率的人,这部分时间和睡眠一样是很难减少的,所以其实人一天里能利用的有效时间其实并不多,能在每一天的这些时间里充分地做一些自己喜欢的事情,这样的人生就会是幸福的吧。

了解了 2023 年这个时间使用结构后,希望能在 2024 年尝试有意识地对其进行一点优化调整,比如多睡一点、多读点书(2023 年读的书真是太少了)、多运动,一年后再看吧!

2023_diary_heatmap.png

2023 年,我也依然在坚持写日记,365 天里我有 358 天写了日记,只有 2023/01/26、2023/01/30、2023/02/25、2023/03/19、2023/03/22、2023/03/27、2023-04-06 这七天没有记录,辞职后的 7 个月里没有一天落下,不过有些天比较糊弄(比如 2023/11/08 和 2023/11/10)所以上面的热力图里看着好像没记一样。

我在 Emacs 里用 org-mode 写日记是从 2019/06/17 开始的,四年多的时间里日记的结构发生了数次变化,这次做分析统计的时候费了点时间多写了点代码把过去几年的日记结构都兼容了下,想看下几年来的日记变化,得到的对比图如下所示:

2023_diary_stats.png

  • 从右上的图可以看到,2023 年的日记天数、记录数、日均字数基本上都是比之前三年高的,唯一的例外是记录数比 2021 年的低,这是因为 2023 年写日记时基本上都是在一个记录下回顾一整天的经历和想法,而 2021 年的时候则倾向于一旦有什么想法就新建一个记录写一下;
  • 看左上的逐季度的日均字数趋势图,可以发现前两个季度的日记量和往年比虽然也多一些但也不算多很多,但在下半年则急剧增长,最大的原因就是我 5 月底从公司辞职躺平了,有了更多的闲暇时间所以我就能花更多的精力去记录和梳理自己的想法、感受,不像有些人,工作对我并不是必需的,即使是一个不太出门的人,我依然能从很多事物中得到值得记录的体验;
  • 从下方每年相同月份的日记日均字数对比来看,9 月和 10 月往往都是我记录最多的,大概是因为北京的秋天吧 —— 嗯,这个是纯粹的主观感觉,限于精力就没有去做这方面的内容分析了。

进一步将 2023 年日记的文本做了下分析,绘制了一张词云图,如下所示:

2023_diary_words.png

为了有更好的可视化效果,我在分析时做了这么一些处理:

  • 将提到的现实中认识的人的名字都替换成了「朋友」这个词
  • 将提到的游戏名都替换成了「游戏」这个词
  • 将提到的具体的书籍都替换成了「书籍」这个词

总的来说,2023 年就是玩游戏、阅读、和朋友聊天以及吃吃吃的一年,是开心的一年!我觉得这样的日子我可以一直过下去。

然后对比了一下 2020 年到 2023 年这四年日记里 TOP5 的词汇的变化情况,如下图所示:

2023_year_words_comparison.png

可以看出来,和往年相比最大的一个变化就是「游戏」这个词的出现,而始终如一的则是「吃饭」和「朋友」。顺便一提,2022 年过得并不开心,日记里和「开心」这个词相关的文本基本上都是「不太开心」「开心不起来」之类的,而这样的文本在经过处理后提取出来的有效词汇还是「开心」 —— 由于 2022 年的主观感受就很强烈所以就没有特地去为这个情况做分析优化了,只是在这里简单说明一下。底部的折线图是把这四年的 TOP5 的词语取并集得到了 11 个词然后看在这四年里逐季度的频次变化趋势,加粗的那 5 条是 2023 年 TOP5 词汇对应的折线。

然后还将 2023 年每个月的日记分别拿出来绘制了下词云图,看一下每个月会有什么不同,为了更好地将差异反映出来,我将「朋友」「吃饭」「聊天」「早饭」「晚饭」「午饭」「洗漱」这几个在每个月都非常高频的词去掉了,得到的结果如下图所示:

2023_monthly_words.png

  • 可以看到,前四个月的词云里基本上没有出现「游戏」这个词,因为当时还在上班,而在4月底提出离职后,5月就开始迫不及待地玩游戏了,开头记录的 473 个小时的游戏时间,也基本上分布在后面这 8 个月里,9月玩得稍微少一些只有 27 个小时所以这个词在词云图里就显得小了一些;
  • 7月、8月和9月基本上每天都会看一小会书,日记里都会提一下,所以「书籍」这个词也比较大一些,但我每天也就看半个小时到一个小时,其实并不多,年底的两个月甚至都不怎么看了,一部分原因是把更多的精力放到读论文上了。

除了前 4 个月还在烦恼工作外,之后的 8 个月能看出来和一整年的词云图是一致的,游戏、书籍、散步、冥想、吃饭、做饭、聊天构成了我生活的主要部分,基本也是开心的,不工作就使人开心,至少对我是这样的,无聊什么的完全不存在的!

经过新冠三年,我觉得我更能关心和体谅我的朋友们了,2023 年也有更多地去和朋友联系,也从更多的朋友那感受到过关心、支持和肯定,虽然大部分朋友只是隔很久才闲聊几句或者吃个饭,但我对此都感到很开心。大家都有自己的人生道路,谁能说得清上一次见面是不是这辈子最后一面呢?所以我尤其开心能和许久没有联系上的朋友因为某些小事情而重新闲谈上一两句。多发一些朋友圈、多写一些文章,也是希望能和朋友保持一点联系,大家都不怎么说话,我就多说两句(但不要说些让人讨厌的话),一直说下去,总会有那么一两句触动到远方的故人,当他们给我点个赞写个评论,我就知道他们都还好,这就挺好的。

2023_friendes.png

从日记来看,我在 2023 年无论是提及的人数还是提及朋友的次数都比往年高很多,这其中很大一部分原因当然也是因为不工作后有更多的闲暇和精力了,所以说回来,工作除了赚钱到底有什么好处呢?

最后我还绘制了一个不同的人在日记中被提及次数的分布,为了保护隐私就把人名都隐藏了,总体上就是图上这样一个非常长尾的分布,大部分人我在日记中就提及了几次,只有少部分人因为在现实生活中联系比较紧密而隔几天会提及一次,不过这些提及次数并不反映主观态度,只要能多和我玩我就会在日记中提及。

除了游戏、朋友外,2023 年甚至之前三年很大的一个主题都是吃饭,所以也去统计了一下三餐的数据,如下图所示:

2023_meals.png

总体上,我有记录的吃饭占比达到了 83.38%,由于数据记录的不完善,剩下 16.62% 的未记录数据其实也有部分是吃了忘记记录而不是没有吃的,我对这个数据还是比较满意的,我目前胃口还很好、饮食也还比较规律。

有记录的数据中,我自己做了 384 次饭,但其中大约有三分之一都是早饭随手煮个面之类的,由于我喜欢在午饭时做上两个菜然后晚上吃剩饭剩菜所以剩下的三分之二里大概还有一半是晚饭在吃剩的,也就是说我正经地做菜大概也就 120 多次的样子,从每月的类别分布情况来看,自己做饭也更多是在辞职之后。除了自己做饭外,外卖和外食也各有 100 多次,一个原因还是我厨艺不够做饭很慢,有时候还是会不太想做饭然后去点外卖吃,外食主要倒不是因为这个,毕竟对我来说出门是有阻力的(特别是冬天),出去吃一般都是在早上,主要的目的还不是吃饭,而是为了去一个干净敞亮的地方坐一坐沾沾人气、晒晒太阳之类的 —— 我属于那种能一个人待着但偶尔还是要到人群里走一走(但同时又希望人群不要理我)的人吧。然后和朋友聚餐 79 次,差不多是一周一次的频率。

以上就是我 2023 年的基本情况了。限于精力和数据情况,还有很多分析想做而没有做,比如说:

  • 想分析日记里提到的地点,绘制地图热力图、轨迹图,看看我主要都去了哪些地方,但是地点的提取比较难,效果并不太好,而且我也一直在北京没有去哪里;
  • 想在词云绘制的基础上,做一个事件云的绘制以便更清晰地看我这一年都做了什么,但是事件的提取就更加困难了,所以只是想想,都完全没有去尝试;
  • 想把我聚餐、外食的店名拿出来,看一下这一年我在外面吃饭的馆子的菜系分布,感觉也蛮有意思的,但是吃饭记录我做的很不好,虽然也能手工整理但有点嫌麻烦;
  • 想把我做饭用到的食材分析出来看看什么用的多什么用的少,不过也是记录的不好所以就算了,大概是辣椒、五花肉、豆腐、鸡蛋之类的用的多吧;
  • 想把一年的聊天记录提取出来看看我和朋友们都聊了什么,这个我在 2021 年做过了,但是这个工作很繁琐,而且最后几个月我的 EFB 开始频繁出问题可能丢失掉不少聊天记录,现在我还在烦恼 EFB 的升级问题,我部署的 EFB 版本太老了都不知道数据会不会和最新版不兼容了所以也不敢随便升级;
  • 还有 2023 年的财务数据,因为市场不好一直在亏钱而且没工作了一直在花钱,所以这一年都没太多动力去记账,所以也算了吧;
  • 另外我还看了很多论文,但目前论文阅读的流程还没有和我的记录系统整合得足够好,所以也不怎么好做分析,这个看看之后能不能优化一下吧;
  • 往年会做书影音以及游戏的回顾,但 2023 年玩游戏太多了真要在这里写大概内容会很多,考虑下一次年度总结专门为游戏写一篇,书影音这则是这一年看得都少就不做了。

总之就这样吧,针对这次回顾发现的问题继续优化我的记录系统,一年后再来看看有什么新的变化。

  •  

ZMonster's AI Notes(Alpha) #1

本系列内容模式的最终形态尚不确定,可能会根据个人精力、兴趣及阅读反馈做调整。

术语

简单介绍下我上一周中新了解到的 AI 领域的一些术语,但不做深入探究。

  • 模型编辑(model editing)

    model_editing_1.png

    指对已有的神经网络模型进行局部修改,使得模型能在单个或者少量数据上的预测行为发生变化但又不影响这些数据之外其他数据及任务的表现,以应对少量 badcase 修复、知识随时间更新等场景。

    model_editing_2.png

    模型编辑可以最粗暴地通过对预训练模型进行直接微调来做到,但可能因为数据量太少而效果不佳,除此以外还有一些方法会尝试定位到具体的一些神经元做局部参数修改。广义上来说,通过外部知识进行增强(比如将正确的或者新知识后填充到 Prompt 里)、在主模型外附加针对性的额外参数(这些额外参数可以比较少然后用对应的少量数据训练)也算是模型编辑。

    模型编辑和知识编辑(knowledge editing)在概念上有较大的重叠。

  • 对齐税(alignment tax)

    又称对齐成本(alignment cost)、安全税(safety tax),指对 AI 系统(目前来说,主要是大语言模型)进行对齐的过程中产生的额外成本,大致将其分成三类,分别是:由于对齐而导致的性能/效果的退化、为了对齐而增加的额外开发/计算资源、为了对齐而增加的额外时间。

  • 校准(calibration)

    指模型的预测概率与实际概率一致的程度,如果两者完全一致就可以说模型是「被校准的」。从实用角度来说,一个被校准的模型,其预测结果的置信度会是真正可信的 —— 做过机器学习业务的人应该都有这个感觉,很多时候模型输出的置信度并不能真的帮助我们判断结果是否可靠,比如说一个错误的预测其置信度也高达 80% 甚至 90% 之类的。一些研究表明,一些情况下预训练模型随着模型尺寸增大其校准程度会降低、预测概率的分布会高度集中在窄小的区间(虽然与此同时其准确率也在提高),对模型进行微调也有类似的现象。关于校准的研究致力于评估模型的校准程度以及研究提高模型校准程度的方法。期望校准误差(Expected Calibration Error, ECE)是一个较通用的评估模型偏离期望校准程度的指标。

论文

简单讲一下我上一周中重点读过的一些论文及我个人的相关看法。

由于 EMNLP2023 会议上有一篇关于 In-Context Learning 的论文获得了最佳论文,所以上一周重点读了下 In-Context Learning 相关的论文。In-Context Learning 是指使用大语言模型(不过现在在多模态模型中也看到了使用 In-Context Learning)时,在输入中添加少量的标注过的任务数据来(简单起见,后面我一律称之为「示例」)提高实际预测效果的方法,目前为止对 In-Context Learning 的分析发现了很多问题,比如模型对这些示例的选择甚至排序都很敏感,对 In-Context Learning 的工作原理也还不是特别清楚。

Label Words are Anchors: An Information Flow Perspective for Understanding In-Context Learning

EMNLP2023 的最佳论文之一。

通过逐层计算的基于 attention 权重矩阵的信息流动显著性分数考察了使用 In-Context Learning 时的三个信息流 —— 从示例中文本到示例中标签词的信息流(wp)、从示例中标签词到预测目标位置的信息流(pq)、输入中任意两个词的信息流(ww),发现第一个信息流的显著性在浅层网络中很高并且随层数增加而迅速衰减,第二个信息流则在浅层时不显著但随着在更深层中迅速变得显著,如下图所示:

information_flow_categories.png

根据上述观察,作者对 In-Context Learning 的工作机制提出了两个假设:

  1. 在浅层中,标签词从示例样本中聚合信息,形成后续计算的语义表示
  2. 在深层中,模型通过提取标签词的信息(就是假设 1 中的语义表示)进行预测

这两个假设的可视化地描述的话是下图这个样子:

information_flow.png

对第一个假设的验证是通过对不同层不同位置的信息流阻断(通过将对应位置的 attention 置为 0)后观察模型效果变化来完成的,如下图所示:

shallow_layers_hypothesis.png

可以看到

  • 同样在前 5 层进行阻断时,阻断流向标签词的信息流带来的模型效果损失远远比阻断流向非标签词的大;
  • 同样阻断流向标签词的信息流时,在前 5 层进行阻断带来的模型效果损失远远比后五层大,事实上,在后五层对流向标签词的信息流进行阻断时,模型的效果损失非常小

对第二个假设是通过直接考察输出位置对标签词处的 attention 权重、将权重最大的标签词作为预测结果,然后与正确的结果进行对比,计算 AUC-ROC 分数考察两者之间的相关性,如下图所示,可以看到这个相关性在浅层时很不明显但在深层时就很明显了。

deep_layers_hypothesis.png

基于这篇论文的假设,作者进而提出了三个对该现象的利用方法

  1. Anchor Re-weighting: 我理解就是把之前直接用目标位置对标签词的 attention 值来预测类别的方法,形式化后发现和逻辑回归很像,然后逻辑回归会有一个偏置项嘛,所以作者也在这个形式上加了一个偏执项来和逻辑回归对齐(是一种假设模型本身存在 bias 的意思?),然后根据这个形式化假设去学习到这个偏执项里的参数,最后用来调整目标位置在每个标签词上的 attention 值。
  2. Anchor-Only Context Compression: 大概意思是,预先把示例的 hidden state 算好,然后有真实的任务输入进来的时候,把每一层标签词位置的 hidden state 拿出来拼接起来放到(处理真实任务输入的这个)模型的每一层最前面,这样实际预测的时候就示例中的所有文本就不再需要参与计算了,推理过程就能加速了。
  3. Anchor Distances for Error Diagnosis: 通过对比示例中标签词的 attention 相关的表示(论文里有一套稍微复杂点的计算过程,暂时没去细看)然后计算不同标签词表示之间的相似度,理想情况下不同标签词的相似度应该较低,当预测结果有错误时可能就有不同的标签词因为 In-Context Learning 而产生了相似的表示,这样通过分析不同标签词之间的混淆情况就能把错误的原因找出来,或许也能去针对性地做调整 —— 比如说把有混淆的那个标签词的文本换成别的?

A Study on the Calibration of In-context Learning

挺有意思的,考察了 LLM 使用 In-Context Learning 时的校准性

  • 以 LLaMA 及其微调版本(Vicuna、Alpaca、LLaMA2-Chat)过的模型为研究对象发现微调过后准确度越好的校准性越差
  • 使用 4 个示例时,随着模型尺寸的增大,模型的准确度在变高,但同时校准性在变差,模型对自己的预测结果越发自信(对正确的预测和错误的预测都是如此)
  • 从不使用示例到只是使用 1 个示例,模型的表现会发生剧烈的变化,当只是增加使用的示例时这种变化就相对平滑了,总体上而言,随着示例数量的增加,模型的准确度会提升,同时也对预测结果越发自信
  • 已知常用的通用校准方法(温度缩放/标签平滑)在 In-Context Learning 中效果有限

Comparable Demonstrations are Important in In-Context Learning: A Novel Perspective on Demonstration Selection

这篇论文指出在 ICL 里 context 长度有限的时候示例有限很容易表现出 demenstrations bias,然后提出了 comparable demenstrations 这个概念。

文中所谓 demenstration bias 是说因为示例数量太少,导致他们可以被划分到不唯一的多个任务空间里去,进而影响结果,比如说下面这样两个用于情感分类的示例,不看标签的话两个示例的对比差异不够明显,可以用在情感分类里,也可以用到电影类型分类任务里:

Obviously, Titanic is a well-made romantic film. -> positive
Damn, it's a waste of time watching this cartoon! -> negative

在这个想法的基础上,认为 In-Context Learning 里的示例之间的差异应该尽量地凸显在当前这个任务空间下的差异,比如说对给定的示例通过修改其中的少数字词使其标签翻转(比如对情感分析来说,从 positive 变成 negative)得到的新示例和原来的就能构成所谓的可比较示例(comparable demenstrations)。

通过给定随机选择的示例、相近的示例、可比较示例然后让 gpt-3.5-turbo 生成 instruction 看 instruction 的正确与否及程度,确认了 demonstration bias 的存在。不过论文自己没有提出具体的可比较示例构建或者搜索方法,直接用了另外一篇相关论文里的数据。

comparable_demenstrations.png

GPT-RE: In-context Learning for Relation Extraction using Large Language Models

这篇论文将 In-Context Learning 应用于关系抽取里,对 In-Context Leanring 本身的研究并没有什么特别的贡献,不过里面有一个有价值的小点,那就是它使用示例时是从标注数据中检索的 —— 之前有工作证明使用与实际任务输入语义相似的示例会提高效果 —— 然后发现在关系抽取任务里用句子 embedding 去检索选择示例带来的收益比想的要小,原因是句子整体语义接近的示例,其中未必会包含和任务实际输入相关的实体、关系,然后通过下面两个方法来改善了结果:

  • 一个是在索引示例数据以及检索时,都改写文本,使其更加着重表达实体以及关系,比如说把「He has a sister Lisa.」改写成「The relation between ‘He’ and ‘Lisa’ in the context: He has a sister Lisa.」
  • 另外一个是直接用训练好的关系抽取模型(比如 BERT 之类的)来获得句子中关系的表示,比如说用 BERT 里两个实体词对应 hidden state 的拼接

不管是大模型还是 In-Context Learning 还是 Chain-of-Thoughts 之类的看起来很先进的技术,用到具体业务的时候都可以思考一下是不是可以把其中的一些细节根据业务进行适当的调整。

其他一些看过了觉得没什么收获的论文

  • Active Learning Principles for In-Context Learning with Large Language Models

    相关工作部分引用得很全面,我从里面找了一些 In-Context Learning 的论文补充到 Zotero 里。

    不过除了引用完善外就没啥新意了,所谓主动学习其实就是通过一些自动化或者半自动化手法(往往让现有模型参与其中)采样高质量数据来降低标注成本然后进一步改进模型如此迭代的做法,在这篇论文里其实讲的就是几种不同的示例采样方法的对比,甚至没有去训练模型,强行和主动学习挂钩,自己也没有提出任何一个新的示例采样方法。

    做了几个对比实验得到一些结论

    • 按照相似性方法采样得到的效果最好,通过对比(选择最不相似的示例)从反面也论证了这一点,这个反面论证挺有意思
    • 在分类任务中,按多样性采样(聚类后从不同簇中选一些示例)的效果仅次于按相似性
    • 示例的真实标签是很重要的,和《Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?》这篇论文中的观察不一致
    • 在用不确定性(熵、困惑度)采样时,更小模型(gpt2/gpt2-medium/gpt2-large)似乎需要熵更小的示例效果才能更好,但更大的模型(gpt-neox)似乎开始从高熵的示例中获益

    除了第 4 点,其他都有更好的论文提出过了 —— 即使是第 4 点我怀疑也有别的论文提过了。

  • OverPrompt: Enhancing ChatGPT through Efficient In-Context Learning

    就是把分类任务的多个输入放到一个 prompt 里去让直接一次性产生多个输出,以减少计算消耗,同时说还观察到一点点效果的改善,没啥意思。

  • In-Context Learning for Text Classification with Many Labels

    扫了眼感觉没有带来什么新的认知,所谓的标签数量多也没有触及什么真正的困难,没啥意思。

  • In-Context Learning Dynamics with Random Binary Sequences

    搞什么二进制序列预测,通过这个小众任务来将 In-Context Learning 当作贝叶斯模型选择、program induction(我不知道该咋翻译,感觉是认知科学、心理学方面的概念)来去分析,看作者也都是什么心理学、脑科学之类的背景,看着很费劲和我们常关注的点很不一样,所以就没有去看了。

  • In-Context Learning Functions with Varying Number of Minima

    用在数学上的,用来逼近一个有多个极小值的函数之类的,很小众的场景,没什么兴趣。

    代码: https://github.com/PittNAIL/icl-minima

实践

讲一下我上一周中进行的 AI 方面的实践,可能包括:AI 相关产品或工具的使用,AI 方向的开发实践。

Google Gemini API

12 月 13 日 Google 向开发者开放了 Gemini API,只要有 Google 账户且 QPM 在 60 及以下就可以免费使用,目前能用的模型是 Gemini Pro —— Google 宣传视频里的 Gemini Ultra 目前在 API 里还不支持。前往这里可以查看更多的介绍以及生成 API Key,API 文档的说明则在这里。Gemini API 开放后,除了 RESTful API 外还有支持了 Python/Go/Node.js/Swift/Kotlin/Java 六种语言的 SDK,我就看下 Python 的了。

目前的 API 支持以下功能

  • 根据文本输入生成文本输出
  • 根据文本和图片的多模态输入生成文本输出
  • 多轮对话
  • 获取文本的 embedding

Python SDK 通过 pip install google-generativeai 安装即可,需要 Python3.9 及更高版本的 Python。

开始使用前需要设置好 API Key 并实例化一个 GenerativeModel 对象:

import google.generativeai as genai

api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-U'
genai.configure(api_key=api_key)
safety_settings = [
    {'category': 'HARM_CATEGORY_SEXUALLY_EXPLICIT', 'threshold': 'BLOCK_NONE'},
    {'category': 'HARM_CATEGORY_HATE_SPEECH', 'threshold': 'BLOCK_NONE'},
    {'category': 'HARM_CATEGORY_HARASSMENT', 'threshold': 'BLOCK_NONE'},
    {'category': 'HARM_CATEGORY_DANGEROUS_CONTENT', 'threshold': 'BLOCK_NONE'}
]
generation_config = {
    'candidate_count': 1,
    'stop_sequences': None,
    'max_output_tokens': None,
    'temperature': 0.7,
    'top_p': None,
    'top_k': None,
}
model = genai.GenerativeModel(
    model_name='gemini-pro',
    safety_settings=safety_settings,
    generation_config=generation_config,
)

safety_settings 用来设置安全策略,只有 4 个能设置,我建议按照我上面的示例将 4 个能设置的全部设置为 BLOCK_NONE 也就是不过滤,否则一旦触发默认的安全策略会直接把生成结果都干掉 —— 对直接不给结果,而不是输出一个过份人畜无害的文本,除了 4 个能设置的外还有好多不同的安全类别是不允许用户设置的一旦触发就会无结果报错,在 API 层面这么做还蛮讨厌的;generate_config 用来设置生成时的具体行为,一般情况下设置下 max_output_tokens 和 temperature 就好了,别的不太建议去调整,candidate_count 我试着调整成 3 直接报错说「Only one candidate can be specified」,没有太仔细去研究什么情况下才能一次性产生多个输出。

  • 调用 generate_content 根据文本输入生成文本输出

    response = model.generate_content(content='骂一个人')
    print(response.text)
    

    输出

    1. 你真是一个自以为是、目中无人的家伙!
    2. 你真是一个笨蛋,连这么简单的事情都做不好!
    3. 你真是一个废物,一点用处都没有!
    4. 你真是一个胆小鬼,一点风浪就受不了!
    5. 你真是一个骗子,满嘴谎言,没有一句真话!
    6. 你真是一个小人,背后捅刀子,令人不齿!
    7. 你真是一个无赖,蛮不讲理,胡搅蛮缠!
    8. 你真是一个混蛋,人面兽心,丧尽天良!
    9. 你真是一个畜生,禽兽不如,毫无人性!
    10. 你真是一个魔鬼,十恶不赦,罪大恶极
    

    如果前面没有设置 safety_settings,上面的代码会报错

    ValueError: The `response.parts` quick accessor only works for a single candidate, but none were returned. Check the `response.prompt_feedback` to see if the prompt was blocked.
    

    根据错误提示查看 response.prompt_feedback 会得到这样的结果,可以看到 HARM_CATEGORY_HARASSMENT 这个类别被判断达到 MEDIUM 级别所以就被过滤了。

    safety_ratings {
      category: HARM_CATEGORY_SEXUALLY_EXPLICIT
      probability: NEGLIGIBLE
    }
    safety_ratings {
      category: HARM_CATEGORY_HATE_SPEECH
      probability: NEGLIGIBLE
    }
    safety_ratings {
      category: HARM_CATEGORY_HARASSMENT
      probability: MEDIUM
    }
    safety_ratings {
      category: HARM_CATEGORY_DANGEROUS_CONTENT
      probability: NEGLIGIBLE
    }
    

    也可以在实例化 GenerativeModel 时不设置 safety_settings 而是在调用 generate_content 时设置

    response = model.generate_content(content='骂一个人', safety_settings=safety_settings)
    print(response.text)
    
  • 使用 gemini-pro-vision 模型调用 generate_content 根据文本和图片的多模态输入生成文本输出

    首先需要在初始化 GenerativeModel 的时候讲模型设置为 gemini-pro-vision

    model = genai.GenerativeModel(
        model_name='gemini-pro-vision',
        safety_settings=safety_settings,
        generation_config=generation_config,
    )
    

    meme.jpg

    然后读取图片后加上指令(或其他文本输入)

    from PIL import Image
    
    response = model.generate_content(['这张图片是什么意思', Image.open('meme.jpg')])
    

    输出

    图片中的水桶代表着一个人的收入,水代表着支出。水桶里的水从不同的洞中流出,代表着不同的支出,如水电费、交通费、房租、保险、电话费等。水桶里的水位越来越低,代表着收入被各种支出一点点蚕食。最后,水桶里的水流光了,代表着入不敷出。图片反映了当代年轻人生活压力大的现状。
    

    嗯,觉得有点不方便的是,gemini-pro 无法处理图片输入,gemini-pro-vision 又必须有图片输入,以及 gemini-pro-vision 不能用于多轮对话。

  • 调用 start_chat 进行多轮对话

    首先调用 start_chat 创建一个多轮对话(注意多轮对话只能用 gemini-pro 模型不能用 gemini-pro-vision 模型)

    chat = model.start_chat()
    

    然后只需要用 chat.send_message 发送新的输入即可,不需要自己管理会话历史还是蛮友好的。

    response = chat.send_message('你好')
    print(response.text)
    

    输出

    您好,很高兴为您服务。我是人工智能助手,可以帮助您解决各种问题。您有什么需要我帮忙的吗?
    

    也可以通过 chat.history 来查看历史消息

    print(chat.history)
    

    输出

    [parts {
       text: "你好"
     }
     role: "user",
     parts {
       text: "您好,很高兴为您服务。我是人工智能助手,可以帮助您解决各种问题。您有什么需要我帮忙的吗?"
     }
     role: "model"]
    
  • 调用 embed_content 获取文本的 embedding

    没太多好说的,只能用 models/embedding-001 这个模型,得到的是一个 768 维的向量。

    import numpy as np
    
    response = genai.embed_content('models/embedding-001', ['你好', '你不好'])
    embeddings = np.array(response['embedding'])
    print('Shape:', embeddings.shape)
    print('Embeddings:', embeddings)
    print('Inner Product:', np.dot(embeddings[0], embeddings[1]))
    

    输出

    Shape: (2, 768)
    Embeddings: [[ 0.0427908  -0.06421863 -0.02308055 ...  0.01537165 -0.00269788
       0.03161672]
     [ 0.0427908  -0.06421863 -0.02308055 ...  0.01537165 -0.00269788
       0.03161672]]
    Inner Product: 0.9999966707944825
    

Perplexity API

12 月 17 日的时候才知道原来 Perplexity 除了他们的搜索功能,也开放了聊天模式以及 API,支持 PPLX(Perplexity 自己的模型)/LLaMA/CodeLLaMA/LLaMA2/Mistral/Mixtral 几种模型,更详细的介绍见他们的博客文章

Perplexity 的 API 同样需要设置好支付方式才能使用,不过不像 ChatGPT 一样对中国地区严防死守,我的招商银行 VISA 卡直接就绑定成功了。以及 Pro 用户每个月有 5$ 的免费 API 使用额度,而我刚好趁 Perplexity 黑五活动薅了两个月的 Pro 权限。

perplexity_api.png

Perplexity 的 API 只提供了 RESTful API,没有提供 SDK,不过我看了下,它的 API 只有 Chat Completions 这样一个接口,然后这个接口的参数完全是 OpenAI 对应接口的子集,所以直接用 OpenAI 的 Python SDK 就可以了:

import httpx
from openai import OpenAI

api_key = 'pplx-UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'
client = OpenAI(
    base_url='https://api.perplexity.ai/',
    api_key=api_key,
    http_client=httpx.Client(proxies={'http://': 'http://localhost:7428', 'https://': 'http://localhost:7428'}),
)
completion = client.chat.completions.create(
    model='llama-2-70b-chat',
    messages=[
        {
            'role': 'user',
            'content': '什么是桃花汛,用中文回答我',
        },
    ],
    temperature=0,
)
print(completion.choices[0].message.content)

输出

"桃花汛" 是指一种具有桃花的气味和花汛的特点的气味。在中文中,桃花汛通常被称为"桃花味"或"桃花气味"。

桃花汛是一种植物性的气味,具有桃花的甜美和花汛的芳香。它通常用于描述一种气味很柔和、温暖、甜美的感觉,类似于桃花的气味。在中文中,桃花汛通常用于描述食物、饮料、皮肤护理产品等具有桃花味的产品

Dify

Dify 是一个开源的 LLM 应用构建工具,字节的 Coze 看起来就是抄的 Dify。使用 Dify 可以轻松构建一个 LLM 聊天或者文本生成应用,还支持上传自己的知识库,并且一创建就支持了可访问的 WebUI 以及相应的 API,支持的 LLM 也非常多种。

前往 https://cloud.dify.ai/apps 点击「Create new App」就能开始创建新应用,设置一下名字选择一下应用类型即可

dify_1.png

创建好后会进入应用的管理后台,可以看到,这个应用目前使用 Dify 提供的 OpenAI API,总共有 200 次可以用。从这个 UI 上就能看到,一个应用需要的各种东西在 Dify 里都有了,完成度非常高,小团队的不复杂的业务我觉得甚至可以直接用。

dify_2.png

Dify 提供的 API 额度只有 200 次,如果想长期使用,可以自己设置模型提供方,比如设置自己的 OpenAPI API Key 之类的。

dify_3.png

点 Preview 就能进入一个聊天页直接去使用了,200 次免费使用,哪怕不是开发使用而是个人使用,也不失为一个访问 ChatGPT 不方便时的临时解决方案。

dify_4.png

由于暂时没有很强的需求,所以只是浅浅了解了一下,我能感觉出来我尝试过的点之占 Dify 提供的很小一部分,以后有空再玩玩吧。

当然最主要的是,Dify 还是开源的,我们完全可以自己本地或者在服务器上部署 Dify,将所有数据都掌握在自己手里,还能拥有完整度极高的应用解决方案,真的是太棒啦!

  •  

成都乐山行(2023/11/02 - 2023/11/08)

2023-11-02

坐 G89 十点半到了成都东站,我提前下好了成都公交APP,出了火车直接上了2号线去春熙路——因为去三星堆和四姑娘山的直通车都在春熙路有站点比较方便所以酒店定在了那附近。出了地铁后已经十一点了,本来还想听朋友建议去吃夜蹄花,但是已经觉得有点困乏了,所以就急着去酒店安顿下来休息。

十一点的春熙路地铁站外面已经不怎么热闹了,一出来就看到卖各种纪念品和特产的,针对游客的味道非常的重,不过只偶尔能看到三三两两的人了。我拖着行李箱去酒店,还路过几个开着的烧烤小吃摊子,一些路过的人停下来买一些,我就直接过去了。离酒店还不到一百米的时候,突然感觉脚下不太对劲,用手机的亮光一照果然是踩到了一摊狗屎,有点恶心但也没有烦恼到觉得不想活了的地步,在路边蹭了蹭,然后去酒店办了入住后用水把鞋底冲干净了。收拾妥当就睡觉了,但是关了灯后,床的坐侧墙面的全身镜上有一个电源按钮(用来开关镜子外圈的灯带的)一直亮着晃得我难受,只好侧向右边睡。

2023-11-03

睡到四点左右被吵醒了,隔壁起来了在那里交谈挪动东西,估计是要去什么景点或者机场之类的,总之后半夜没有怎么睡好,到八点左右完全醒了爬了起来。

qq747283-0.jpeg

因为要去三星堆,就走到附近的西城月谭豆花,点了一个酥肉豆花和一个担担面——本来想点牛肉豆花的但没有了,点完在座位上等着送餐。先给我上了担担面,我想等着豆花上了后一起吃就继续等着,路过的孃孃看到我在那发呆,提醒我面赶紧拌一下不然就要坨了,等我去拌开的时候已经有一点坨了。虽然是网红店了,味道也还可以。

qq747283-1.jpeg

吃完后走路去了IFS楼下,那儿有去大熊猫基地、机场和三星堆的直通车,三星堆是半小时一趟,我过去扫码付了25上了9:30这趟的大巴,上车的时候车里已经坐了不少人了,我到车后边找了个靠窗的位置坐下。路上没太多好说的,我没睡好就在车上眯着当补觉了。

qq747283-2.jpeg

去程非常快,一个小时就到了。下车后我就刷身份证进了博物馆,进去后是一个大厅,看到右手边有个咖啡厅,正好因为没睡好加坐车不舒服晕乎乎的,就进去买了一杯生椰拿铁,然后租了一个讲解器开始逛三星堆,听同学说有大量上新,还是挺期待的。

qq747283-3.jpeg

第一个展厅进门处介绍发掘工作,到这里我才知道16年后又发掘了6个新的祭祀坑,这6个新的祭祀坑都是我上一次去三星堆时没有的,于是愈发期待了。

一些发掘现场照片,他们都很开心的样子。在脑子里给他们配音:

  • 朋友们,我们又挖到大宝贝啦!
  • 牛逼!

qq747283-4.jpeg

qq747283-5.jpeg

青铜鸟歪头杀:

qq747283-6.jpeg

三号坑青铜立发人像:

qq747283-7.jpeg

四号坑青铜扭头跪坐人像,发型瞩目,表情姿势生动:

qq747283-8.jpeg

​五号坑鸟形金饰:

qq747283-9.jpeg

八号坑青铜着群立人像,发型瞩目:

qq747283-10.jpeg

萌萌的陶猪,和《愤怒的小鸟》里一模一样:

qq747283-11.jpeg

蠢蠢的陶猪:

qq747283-12.jpeg

邪魅的陶猪:

qq747283-13.jpeg

不同发型的青铜面具:

qq747283-14.jpeg

青铜面具大甩卖(这样的陈列有好多排):

qq747283-15.jpeg

三星堆流行的拍照姿势,把面具戴在脸上:

qq747283-16.jpeg

青铜大立人像,镇馆之宝:

qq747283-17.jpeg

青铜神兽,造型和身上的花纹都很精美:

qq747283-18.jpeg

青铜神坛,部件繁多,这个是复原模型,几个部件各自单独有展柜:

qq747283-19.jpeg

青铜纵目面具:

qq747283-20.jpeg

青铜鸟足神像,人身鸟足倒立的造型很奇特:

qq747283-21.jpeg

方向盘?车轮?其实是太阳啦 —— 青铜太阳形器:

qq747283-22.jpeg

镇馆之宝,栖息着九只神鸟的青铜神树,解说说可能和《山海经》里的扶桑树有关联:

qq747283-23.jpeg

三号青铜神树(二号和一号很像都是上面的样子):

qq747283-24.jpeg

挂着方孔铜钱的摇钱树,那个时候也有方孔钱币了吗?后面逛文创店问店员得知没有摇钱树的产品,赶紧开发一个肯定大卖呀:

qq747283-25.jpeg

青铜鸡和青铜大鸟头:

qq747283-26.jpeg

还有很多很多展品也很有意思,就不一一贴出来了,三星堆还是很推荐去一下的。展品很多只有简单的介绍(名字、出土时间地点、一两句话介绍),如果不想请讲解的话,36 租一个讲解器也是很值得的,不过我租的那个讲解器有点问题,讲着讲着会自己把音量调到最大耳朵都差点聋了,我不得不全程按着音量键一旦发生问题就狂按把音量降下去,如果这个是普遍问题的话那还是挺恶心的,最后去还讲解器的时候忘了反馈下这个问题了。

三点出头逛完了,去一楼开始逛文创店,三星堆的文创产品很丰富,不过我最想要的有一些没有,比如说陶猪、摇钱树、青铜神兽都没有,摆件总体也比较少,大量的冰箱贴、书签类产品,可能是因为摆件比较贵卖不了那么多吧。

我在文创店就逛了一个多小时,买了一些东西后就离开了。到了直通车上车点刚好有一辆车要出发而且还有一个空位,就上去了,结果没开多久就晕车了,身上冒汗、头晕恶心但好在没发展到要吐的地步,回程花了一个多小时接近两个小时,一路上很难受。本来打算去四姑娘山的,在车上就想我这样的身体状态还是不要去了,平路一两个小时的大巴我都能晕车,山路四个多小时我肯定受不了。来成都前的一星期里感冒了三四天、感冒好了后还有几天没睡好,可能是因为这样身体还很虚弱。回到酒店后就把原来预订好的四姑娘山双桥沟景区的民宿取消了,在酒店里歇了好一会。

歇好了后想出去吃饭,但完全不想去春熙路周围的网红店,问了下朋友,然后自己翻到一个叫做呡嘴蹄花的店,好像还不错而且小红书和点评上提到的并不多,就打了个车过去。这店在一个叫做致民路的地方,车开到路口我就让把我放下去了,我自己走了一段进去,路上全是各种小店,冒菜、面、烧烤等等,看着都让人很有食欲。呡嘴蹄花店里还挺干净整洁的,进店后只有两个人在吃,收银台上坐着的姑娘(后面看似乎是老板的样子所以就用老板来称呼吧)起来招待我问我要吃什么,虽然芸豆才是灵魂但作为海带爱好者我还是点了一个海带蹄花套餐,点完问我蘸料要青椒还是红油,得知我能吃辣后说你还是吃红油吧,小菜有 6 种自己拿个碟子去装然后我夹了点烧椒、豆腐丝和泡菜,老板还告诉我蹄花汤喝完了可以加说现在天冷了大家都爱多喝点汤,我问汤在哪里啊老板说你要加了喊我给你加热的。蹄花特别的软烂,入口即化级别的,小菜也好吃特别是那个烧椒又香又辣我很喜欢,红油蘸料倒是觉得只是香没啥辣味。我小菜吃完后老板大概看到了告诉我说还可以自己去夹,所以蹄花汤、小菜、米饭都是可以续的,这样一个套餐才 26 也太划算了,不知道别家是不是也这样,总之我就再去夹了半碟子烧椒。途中来了一个大姐和老板絮絮叨叨说半天话,说自己小孩挑食什么什么的最后让老板帮做一个青椒肉丝带走,感觉是附近居民,挺喜欢这样有人情味的小店的。

qq747283-27.jpeg

吃完就在周边闲逛,顺着江溜达到了九眼桥附近,合江亭对面的音乐广场上有一个小哥在直播唱歌,都是一些经典的情歌、金曲,周围的阶梯上坐了很多人在听,我也找了个地坐着玩手机听了会,后来手机没太多电了就起身往回走。

qq747283-28.jpeg

顺着路往九眼桥走去,过桥走到北岸。在桥上看两岸很是热闹,上下游几百米各种酒吧和小摊灯火辉煌喧闹无比。

qq747283-29.jpeg

到北岸后我顺着滨江东路往西走,经耿家巷、东升街、红星路四段回到酒店。可能因为在春熙路太古里附近,一路上都是热热闹闹、生机勃勃的,一整条街道都是各种大店小店,而且不是那种只有年轻人的景象。路上我在想和北京的区别,北京当然也能找到类似的地方,比如说二环内的各种胡同小巷,但活力还是和成都的这种景象差了一大截,差在哪里呢?首先我感觉成都的各种建筑单元是那种非常开放的 —— 饭店会把桌椅支到店门口、商超便利店也会把商品摆到店门口空地上、地摊推车也非常的常见,虽然让街景变得乱乱的,但对步行的人其实并没有产生多少障碍反而让人觉得很亲近,而这些在北京都是很难见到的,即使是在二环热闹的地方,由于管理的要求,大部分建筑单元把自己死死地封闭在墙壁之内,一有对比,我就觉得那种冷漠疏离感无比的强烈;再就是人们的面貌,很多人就是穿着日常服装闲散地在街道上游走或者和朋友唠嗑吃饭,人在这些街道上的流动就是城市的日常脉动,而不是冠以 citywalk 之名用来消解日常乏味生活的精心计划的精致活动;最后是一个更大尺度上的城市规划上的问题,窄路密网的规划天然地会提高流动性并且给行人安全感和亲近感,北京的胡同大概是因为拆不起改不起所以保持了由原来的街巷风貌还有点这种感觉,除此以外的其他地方大都是宽路疏网彰显气势的设计,只要这点不改变(已有的格局也很难改变)即使是放开城市管理要求也不见得能产生多少热闹的地方。比起吃到了好吃的,我觉得在成都这样热闹的街道上走一走更让我感到放松和惬意。想起前阵子和大学同学吃完饭想找个地方坐着聊天走了半天最后去了 KFC 的事情,这种事情大概不会在成都发生。

2023-11-04

由于前一天写日记到半夜一点多,最终又没睡好,挣扎着爬起来后已经九点多了,洗漱了后参考朋友的意见决定往川大那边走走然后午饭就在川大附近找个吃了,而且同学约我在高新区见面也在南边,就想一路溜达过去好了。

从酒店出来后,我走东大街拐到天仙桥南路,经滨江东路到十二中街又路过了致民路一下,不过因为没到饭点还不饿(虽然没吃早饭)就没有逗留而是继续往南了,后面拐进了龙江路往西走,发现龙江路两边都是各种琴行也算是挺有特色的。从龙江路出来后拐进新南路就直奔川大去了。到了磨子桥后十一点左右了,觉得可以找个地方吃点,看了下附近正好有个区域还蛮多吃的,找了家叫做囍孃醪糟的,点了嘉州钵钵鸡、嘉州绍子面和一个生椰冰醪糟,吃完觉得很一般,钵钵鸡味道非常寡淡,价钱也不便宜,一共花了 63,学校附近不应该更便宜点吗?

草草吃完起身沿着科华路北路继续往南走,走到磨子街的时候看到有几家店有不少看着不像游客的人在吃饭,就走近去看了下,看到有个叫寻味肥肠记的店,想着吃个肥肠也不错就在门口露天的位子上坐了下来。

qq747283-30.jpeg

由于前面已经吃了一顿吃不下太多了,就点了一个烧肥肠和一个米饭一共 18,还送了我一碗飘着油花的萝卜汤。烧肥肠是那种有点韧性但能咬得动不至于和橡皮筋一样的状态,味道偏重,里面还有几块土豆,夹碎了蘸着汤汁吃着很过瘾,米饭里是掺着一些豆角的我以前没看过这么做的。

qq747283-31.jpeg

吃完要走的时候旁边走过来一只白色的猫,在旁边麻袋躺了下来,似乎是把麻袋当猫抓板挠了两把,本白嫖专家果断上手 rua 了两把,没有被挠。

qq747283-32.jpeg

吃完肥肠继续往南溜达,溜达了一段后想坐下来歇会,在点评上看附近有个五野咖啡就继续溜达了过去,小小的一个店面,在门口摆了几张小几和一些折叠椅,我去点了个 dirty 想着朋友经常点尝下是什么味道,老板还郑重地跟我介绍了下用的什么豆子、告诉我要大口喝才能让咖啡和牛奶充分混合,我给嗯嗯啊啊谢谢好的糊弄过去了。

qq747283-33.jpeg

坐了一会,有个人抱着一只猫过来丢在我脚边然后把猫绳的另一头系到了窗户上,看过去发现我脚边有一个猫窝。我对猫不熟悉,看起来应该是美短吧?这只猫挺活泼的,在边上一会看看这个一会扒拉下那个,偶尔躺一下也不躺太久就起来了。我上午一路遛弯捡了点叶子玩,就拿了一片比较大的叶子出来逗它,可能叶子转动起来和鸟类的羽毛感觉比较类似所以它还和我玩得挺欢的。后来问了下咖啡店老板确认了就是他的猫,来放猫那个人估计是朋友帮忙去遛了猫吧我猜测。

qq747283-34.jpeg

歇够了后就起身往同学那边去了,感觉越往那边走,街道环境就越发地现代化,不过逐渐稀少却始终能看到的一些小店铺还是保留了一些温和感。这一路上就没太多可说的了,虽然我走得很慢,但加上上午也走了 8 公里多,腿脚还是有些疲惫,后面逐渐冷清的环境也让我走快了一些,走到离同学公司不远的苏宁广场,就在必胜客门口的椅子上坐了会休息了好一会才动身。到了同学公司后直接就进会议室聊天了,聊我这些年做过的事情、各自对 AI 业务的看法等等,我和同学多年没见了,比起生活可能行业、工作还更多可以聊的,这位同学现在在做 AI 相关的内部创业要操心的事情比较多可能还有点招揽我的意思,我也没什么洞见,最后差不多变成了吐槽大会吧。聊完因为还早同学带我去了环球中心逛了逛说是什么亚洲最大商场什么什么的,等时间差不多了打车带我去了玉林路吃饭,本来想去卢记正川饭店,但是排位人太多了,就去了附近的三只耳冷锅鱼火锅,店里有活动打卡评论送饮料和小吃,送东西好多诱惑真的很大最后我也去参与了下,送的饮料超大一杯,感觉商家靠这种活动很轻松就能把评价刷上去吧(不过这家说是二十多年老字号了)。聊天得知同学在主业外自己有做一些小事情赚点小钱,情感咨询、卖项目经验课程、摆摊等等,每件都不是什么大事情但是行动力我还是很佩服的,听完我觉得有些我也是能复刻的比如说真实的项目经验教给毕业生这种其实不要什么力气,但我就是顾虑太多、嫌麻烦而且没啥行动力哈哈哈。

qq747283-35.jpeg

吃完我从倪家桥站上地铁回去了,回到酒店后把遛弯一天路上捡到的叶子拿出来。因为经过的范围比较广捡到的叶子种类、大小差异都不小,到第二天这些叶子都会枯掉,就勉强摆放了下拍了个照做纪念。

qq747283-36.jpeg

2023-11-05

又没睡好没有精神,上午干脆就没出门,把这几天换洗的衣服拿去酒店洗衣房洗了下,有烘干机还是挺方便的。到了中午附近就出门了,下午打算去逛金沙遗址博物馆,想着上一次去已经好些年了去看看有没有什么变化。然后在去金沙遗址博物馆的路上选择困难了,翻来翻去迟迟决定不下来该吃什么,最后出了地铁在快到博物馆的地方找了个小店点了个红油抄手和一个夫妻肺片,我是不知道这个夫妻肺片怎么能做到难以下咽的,红油抄手勉强算是能吃吧,总之吃完心情很差。

进到金沙遗址博物馆后,想着之前三星堆租讲解器体验还不错(除了那个音量问题),也去租了个讲解器,结果居然是不配耳机的,想要耳机的话要另外花 10 块钱购买 —— 对是购买不是租借,疯了吧?抱着来都来了 10 块钱也不算什么的心态还是把耳机买了,然后进馆开始逛,结果一圈逛下来和多年前的内容感觉毫无变化 —— 其实没变化才是正常的,又不是三星堆又能挖出 6 个新的祭祀坑出来,是我自己想当然没有提前去了解。总之,虽然没逛多久 —— 也没法逛多久,但还是感到很疲惫、沮丧,虽然外面还有什么乌木林、园林,但已经完全没有什么兴致了,在展馆外面的椅子上和端着热水壶的大爷大妈们一起坐了半天,决定离开去吃饭。

前一天同学有推荐我去抚琴夜市说有卖一些夜市之外不卖的小吃,还挺心动的,不过又有朋友推荐一个玉林路的钵钵鸡,想了下还是决定去吃钵钵鸡,就坐地铁过去了,下了地铁后还稍微拐了一些弯溜达了下。到了玉洁巷看到很醒目的招牌,就进店吃了,点了一个红糖凉糕然后自己拿了一大把串选了红油做法,然后它是用一个大碗盛好红油汤底然后把串都撸下来放进去的,吃起来倒也方便。

qq747283-37.jpeg

叠加中午和下午的怨气,我吃得还是蛮开心的。结果我吃完出门一抬头,怎么对面还有个乐山官记钵钵鸡,再回头看刚刚的店叫官记乐钵钵鸡,想起来他们菜单上有说什么因为商标没有通过把原来的官记乐山钵钵鸡改名成了官记乐钵钵鸡,脑子里一团浆糊。翻出来和朋友的聊天记录看了下,朋友推荐的,是「乐山官记钵钵鸡」,再和朋友确认了下,我果然是认错了。说我吃的这家原来是对面那家的徒弟还是员工之类的,学会了自己开了个店,更会运营招牌更大很多人都走错,从原来起名叫官记乐山钵钵鸡还开在老店对面这个手段来看确实是更会运营,不过也有点下作吧……据朋友说老店味道更好但估计也只有本地常客才知道这个事情了。对面那个老店门脸非常老旧寒碜,工作人员都看不到,有一个哥们一个人在那吃着,想着自己走错了店这件事情一阵愧疚,决定过去再吃一顿。

qq747283-38.jpeg

进门没人招呼我就喊了几句,一个面容憔悴的孃孃被我喊出来了,领着我到了里面一个双开门的柜子前,问我要什么,打开来,是一个个塑料碗装着各种材料,她一个碗一个碗拿出来问我这个要不要我基本都说要了,最后拿的有点多,上来后也是满满一盆。我吃了一小会其实就不怎么吃得下了,不过还是努力再吃了一些。

qq747283-39.jpeg

中间过来一个姑娘,我听到她手机里传出来「已到达目的地,导航结束」的声音,然后看她抬头疑惑地看了两眼招牌和对面,犹犹豫豫地进了店里来,应该也是专门过来的 —— 估计和我一样是朋友推荐过来的,因为无人接待,她表情和我刚进来的时候一样茫然,我就冲里面喊了几声把孃孃喊出来了也领那姑娘去拿串了。再吃了会,觉得实在吃不动了,就结账然后把剩下的打包,付款的时候听到孃孃在身后嘟囔「今天没有泡盆盆」 —— 后面据朋友说她这家店一般是把钵钵鸡在盆里泡好放外面让大家挑的,然后据说因为生意不好现在主做外卖了所以就没想起来做这个事情吧,令人心酸。

2023-11-06

今天要去乐山了,所以就没有任何心理负担地睡到了快九点,起来收拾了下后就去退了房,然后坐 2 号线去成都东站。十一点半左右到了乐山站,出火车站后,去出租车点等车,身后面有四五个姑娘小伙,在那叽叽喳喳讨论行程,说我们先直奔叶婆婆钵钵鸡再去哪里哪里。坐上出租车后就直奔酒店,酒店订在了岷江一桥附近。

qq747283-40.jpeg

到酒店办好入住后,我在房间里歇了会,也看看午饭吃什么。在成都那几天找吃的时候已经被网红店搞烦了,小红书和点评笔记一搜全是这些网红店,相关的内容(评分、评论)基本已经提供不了什么真实的信息,导致我到了乐山找店时也感觉相当头大,然后看到附近有个小饭馆,点评评论极少然后看着又不错的样子,打算就去吃这个叫做卡卡角角小饭馆的店了 —— 卡卡角角是边边角角的意思。出了酒店到顺着嘉定南路走 400 米就到了,在路边一个巷子里进去,路边有个招牌指示,还很有脾气地写了一些拒绝接待的标准。

qq747283-41.jpeg

我进去后站在门口看推荐菜小黑板,服务员喊我进去坐着慢慢看,给了我一个菜单,我就点了一个麻婆豆腐和一个肝腰合炒。店面小小的,老板就在角落里炒菜,店里还有两桌人在吃,感觉都是附近居民。麻婆豆腐先上来,菜量超出我的想象,这菜上来后就觉得我要吃撑了。后来肝腰合炒上来了,肝片和腰花炒得都非常脆嫩,唯一有点不足的是腰花还有一点腥,不过这顿饭菜 44,我觉得完全可以容忍这点小缺点。

qq747283-42.jpeg

吃完我就走到滨江路南段上往乐山港的方向走,走了一段,看到有一片摆着桌椅,有很多人坐着,打牌、聊天、发呆各种都有,人多的地方我没好意思坐下来,继续往前走了二十多米,依然摆着桌椅,找了一个没太阳的地方坐了下来。然后有个男人过来问我喝什么茶,我也不知道不是桌椅都是他摆的,不过确实想喝水多坐会,要了一个菊花茶,10 块钱。在江边坐了将近一个小时,后面身上还觉得有点凉凉的,顿时觉得 10 块钱的热茶非常划算。

qq747283-43.jpeg

歇够了后起身继续往南走打算走到最南边,那边似乎是能远远看到乐山大佛来着。一路上看到很多人打牌,但不是常见的扑克,查了下,就叫乐山字牌,是乐山这边独有的。

qq747283-44.jpeg

然后在走的路上,看到了一些地方标识着 8.18 水位线什么的,查了下,原来 2020 年 8 月 18 日乐山遭遇过洪水,看那个线当时江边这块的房子估计一层楼是被淹掉了的。然后乐山自古都有对洪水的灾难记忆,还经常拿乐山大佛来作为预警标准,什么大佛洗脚乐山撑船啊,这一查还查到了以前的老电视剧《风云雄霸天下》,这电视剧有在乐山大佛拍摄,还有「水淹大佛膝,火烧凌云窟」这么一句台词,凌云窟就在乐山大佛上面,藏着火麒麟来着,还有后来步惊云的绝世好剑也是从乐山大佛下取出来的……

qq747283-45.jpeg

走到头后往乐山大佛的方向看了看,但看不太真切,就作罢往回走,走到滨江路和嘉定路汇聚的地方,发现这块居然有一个集市(我确定下午白天的时候没有),就在嘉定南路的路边从那个路口开始往北大约两百米这么一段,摆满了各种小摊,卖菜的、卖小吃的、卖水果的、卖碟片旧书的、卖鞋垫袜子的、推拿按摩的、采耳的……形形色色应有尽有,虽然我不买但感觉挺有意思的,这种地方也只有本地人会来,毕竟拍照不好看。

qq747283-46.jpeg

走了一下午感到有点疲惫,就回酒店躺了会,到七点多才爬起来准备去张公桥好吃街吃个晚饭,不过这种地方主要也是针对外地人,里面的网红店我完全不想去,翻了好久的评论总算找到几个本地人说从小在吃的店,准备过去瞅瞅。从酒店步行过去一公里不到,还是挺近的,入夜后整条街道里的店铺招牌都亮起了五颜六色花里胡哨的灯,拍照是会比较好看但却让我心烦。

qq747283-47.jpeg

走到牛儿风味小吃这个据说本地人常吃的店,点了一份杂酱面和一份粉蒸肥肠,面里的酱汁非常多简直像个汤面了但又很粘稠拌开后能挂在面上还挺好吃的,粉蒸肥肠的肥肠完全没有异味蒸的非常嫩滑、粉粒粗糙的口感和肥肠嫩滑的口感交织在一起非常不错。

qq747283-48.jpeg

吃完往回走,看到一个卖冰糖葫芦的,能做出拉丝效果让冰糖葫芦外裹上一圈棉花糖一样的糖丝,觉得挺好玩的就 12 块买了一个拉丝草莓,摊主是个聋哑人,全程只能手势和大家交流。看他熬糖熬了很久还一直在搅动,最后就是把冰糖葫芦在那个糖里蘸一下然后双手垂直夹着用力一搓,上面裹着的糖浆甩出来就变成棉花糖形状了,还是挺厉害的,12 块觉得有点贵就当看个表演了。吃起来怎么说呢,毕竟和棉花糖还是不一样,外面那层糖丝扎嘴。后面再随便逛了逛就回酒店了。

qq747283-49.jpeg

2023-11-07

早上起来后准备去吃个豆腐脑,从酒店出来走嘉定南路往南拐进兑阳湾巷和新村街,在兑阳湾巷到新村街这一路上就有很多小店,最后拐进人民南路,进了路旁的九九豆腐脑,点了个牛肉咔饼(咔是夹的意思)和一个蛋冲豆腐脑:牛肉咔饼里夹的是粉蒸牛肉,有一些辣味,由于昨晚吃的粉蒸肥肠,我本来预期粉蒸牛肉也会很嫩的但却没有,不知道是我的错误认识还是这家没做好,不过肉量是实打实的;蛋冲豆腐脑是峨嵋那边的风格,顾名思义就是除了常规的卤外还会冲个鸡蛋进去,有些粘稠但口味其实比较清淡,也还不错。这一顿 27。

qq747283-50.jpeg

吃完就在附近溜达了,顺着人民南路往南走叮咚街到了海棠广场,溜达到府街上看到也有个九九豆腐脑(这个有个「乐山味道」的前缀,我吃的那个有「豆相识」的前缀)但看标志又不一样,这几天真的是被这种李逵李鬼搞得很烦。府街里面有个商场,里面那个什么财富广场说进去也挺多好吃的不过我就没进去了。最后又溜达到了江边滨河路,不过这次跑到了大渡河边上这段滨河路,顺着路往东南走就能走到岷江和大渡河交界处,打算到那往北顺着岷江边的滨河路回酒店。走到最南边的时候,发现有楼梯能下到河边上去,就跑下去了,结果发现河边还有路可以走,走到头的话比在上面滨河路上看乐山大佛和江景视野更开阔呢。

qq747283-51.jpeg

顺着路走到头,人多了起来,有些人在钓鱼,江里还有人在游泳,转弯一看居然是一个小小的广场,墙上挂着牌子说是叫冬泳广场,去看了下贴出来的修建史,就是一帮喜欢游泳的人组建冬泳协会然后和政府拉扯要到了修建权然后自己筹资出人力把道路和广场修建起来的故事,令人感动。天气阴沉,努力拍了乐山大佛的照片也只能隐约看到一个脑壳和一双脚,不过我也没多想看,随便了。

qq747283-52.jpeg

从冬泳广场上来又到东大街那片逛了逛,但是看到周围店铺的招牌就心烦,不想在附近吃,干脆往酒店走,路上翻了翻小红书看到有人说在通江街道附近有个万人小区附近有挺多吃的,就想不如过去转转好了。不过有点远,走路过去就太费劲了,就在路边扫了一辆滴滴青桔电动车一路骑过去。乐山有些地方道路坡度还挺大的,不知道是不是因为这个所以到处都是青桔电动车,普通的青桔单车反倒比较少见。骑了七公里后到了那个万人小区附近转了转确实蛮多吃的,但再一次陷入选择困难,打开点评看附近有个曦曦跷脚牛肉好像还不错就下决心过去了。点了一个血旺、一个白菜和一个牛杂,血旺夹碎拌到米饭里非常好吃,白菜也在牛肉汤烫过显得非常鲜甜,倒是牛杂感觉最平平无奇了。这一顿 28 —— 牛杂 15、血旺 6 块、白菜 5 块、米饭 2 块,非常舒适,看小红书上一些本地人吐槽说他们小时候跷脚牛肉是 6 块钱一碗的,我想除了旅游带来的价格提升外,物价这么多年也是在涨的吧。

qq747283-53.jpeg

qq747283-54.jpeg

电动车骑着很舒服,吃完饭我干脆骑着电动车绕绿新公园逆时针走了大半圈又到了海棠广场附近的沫若广场,骑了 15 公里把电动车给骑没电了。然后到白塔街和陕西街溜达了下,在陕西街再次 rua 到一只白猫。

qq747283-55.jpeg

在陕西街看到一个居民楼爬满了植物,在阳光下显得很好看,有点像童话故事里的场景。

qq747283-56.jpeg

从陕西街出来转到金花巷走去乐山文庙,狭窄逼仄又弯弯绕绕的巷子我很喜欢,巷子旁的墙壁上还有各种乐山美食及文化的宣传画。巷子并不长,很快就走出去到了文庙,我对孔老夫子没太多感情,远远地看了下就走了。

qq747283-57.jpeg

从文庙转出来又到了叮咚街,下午这会人不是那么多,茂密的榕树在道路上空生长成一道绿色的穹顶,我也很喜欢这种感觉。老城区这边的行道树大多是榕树,中午我去曦曦跷脚牛肉路过的凤凰路则种了凤凰木作为行道树,也挺有意思的。

qq747283-58.jpeg

已经挺累了,所以就往酒店那边走,在上中顺那一片发现有个顺城街比较狭小的样子就钻了进去(当然我是不会进旁边店铺的),走到尽头发现还有个乐山武汉大学西迁历史文化博物馆,说抗战时期武大曾经迁到过乐山文庙,这我还真不知道。博物馆似乎在一段残留的城墙上方,我爬上去后门是关着的,就下来回酒店了,到酒店附近那个集市又开了,遇到两个摊主吵架大概是因为谁占了谁的常用位置之类的,在旧书摊上发现一些过于少儿不宜的老旧地摊杂志。

qq747283-59.jpeg

在酒店躺了会休息好后,又陷入了不知道吃什么的纠结状态里,已经很累了不想跑太远,但张公桥好吃街也不想去,最后还是出门骑车去了东大街附近,但是转来转去看哪个都不顺眼,最后耐心耗尽进了身边一个甜水面店,不太合我的口味,出来对自己过度选择焦虑的状态感到很灰心,感到很累,决定第二天就离开乐山回北京,做出这个决定后顿时感到一阵轻松。

2023-11-08

乐山这边的豆腐脑有两派,一派是我之前吃过的峨嵋风格的蛋冲豆腐脑,还有一派是牛华风格的里面会加粉丝,早上起来后决定去吃个牛华豆腐脑。去了海棠公园边上的代四孃牛华豆腐脑美味小吃,点了个牛肉豆腐脑和一个粉蒸肥肠,这个豆腐脑口味会更咸更重一些,粉蒸肥肠也不错。一共花费 34,比昨天的九九豆腐脑多花了 7 块,但我也忘了具体哪样多少钱了。

qq747283-60.jpeg

从代四孃出来就在边上谢记软面锅魁买了个 6 块的猪肉锅魁,还在边上买了一只甜皮鸭准备带回北京。然后啃着锅魁回酒店去了。在酒店待到 12 点多然后去退了房,叫了个车去乐山站。

后记

旅行总体还是开心的,我很享受那种四处闲逛的感觉。

除此以外,这次旅行发现了自己的一个比较大的问题,那就是在面临很多选择时会因为想要做出最好的选择而陷入严重的选择焦虑里,这种焦虑不光体现在几次不知道吃什么的纠结里,还体现在我出行前规划行程的时候。我最开始规划的是成都+乐山+自贡,其中成都想去三星堆、四姑娘山、大熊猫基地以及吃各种好吃的,然后在四姑娘山该去双桥沟还是长坪沟还是都去之间纠结了很久,同时去四姑娘山需要较多准备所以又在去不去四姑娘山之间摇摆了很久。仔细想想,这种焦虑以前其实也有,只不过是在工作、生活中有别人帮我剪掉了一些选项,或者我自己干脆就放弃掉了所以没有引发过特别厉害的情绪。就事论事来说,只是在旅行里的时候我完全可以放松一点,一次出行不要安排太多目的地、吃饭的话吃网红店或者路边随便吃都行,问题是相对好解决的,但我觉得我在生活里遇到一些重大选择的时候迟早还会陷入到这种焦虑里面,甚至我辞职后不工作了半年了其实也一定程度上有觉得回去工作这个决定会带来很麻烦的选择而拖延着。

不过自省就到此为止吧,后面还是想多出去玩玩,觉得这次出行感到焦虑的一个原因也是我几乎没有怎么出门玩过而过于紧张,既然如此多来几次就好了。

  •  

2023年9月总结

日常生活

9 月外出参加了好几次活动,相比前几个月可以说比较现充了。

0901_野孩子乐队live.jpg

图1  野孩子乐队 live

第一天去福浪 livehouse 看了野孩子乐队的 live,以前没有看过 live,野孩子的歌也就偶尔听过(我平时听歌不多)并没有什么特殊感情,之所以会去是朋友说要去喊我一起,我想就去体验一下吧。在现场听音乐演唱和在数字设备上听的差异还是非常大的,那种被音乐紧密环绕着的感觉、随鼓点震颤的心跳以及周围人群陶醉的氛围是没有办法在数字音乐上感受到的,我右后方有个姑娘应该非常开心一首歌结束的时候会小声用轻柔的声音说一句「敲好听呀」、左前方有个哥们一直在摇头晃脑,我倒没有那么投入,但也有被感染到一些。livehouse 的场地相比演唱会那种大场地小很多又让人觉得和乐队很亲近,如果是自己喜欢的乐队的 live,那应该会非常开心,我可能上比现场其他人就更平静一些,像《黄河谣》《敕勒川》这种歌我也没有那么多共鸣。整场 live 一共持续了 2 个小时,去之前觉得结束后会非常的疲惫,结束后除了站了两个小时后腿脚比较难受,精神上倒是一点都没有萎靡的感觉。因为参加这个 live,安装了几个专门做演出、展览之类活动票务的 APP。

生日那天,自己去逛了郎园书市,逛了一下午,在各个出版社的摊子间游走发现自己喜欢的书的体验很有趣,就是书有点重,越逛包里买下来的书越多,虽然也没买几本。书市分室内和室外两部分:室外的摊子折扣力度比较大,五六折的很多;室内的部分看起来好像是一些比较大的出版社的专门场地,其中有一整排全是理想国的,而且室内部分有挺多编辑在,我逛的时候遇到了不少和编辑在做深度交流的读者,偷听到一点后深觉自己看书囫囵吞枣。逛完书市后去附近的盛金楼和朋友聚餐,但碰上了当日阵雨最大的一会,鞋子裤脚湿掉、被装着书的包勒得肩膀疼、在拥挤的撑着伞的人群中避让碰撞……去地铁站几百米的路上感觉花费的力气比我平时 5 公里来回的散步还要累,也算是一个难忘的记忆了。

0908_郎园书市1.jpg

图2  郎园书市(1)

0908_郎园书市2.jpg

图3  郎园书市(2)

0908_郎园书市3.jpg

图4  郎园书市购买的书签和贴纸

生日之后又连着两天去参加外面的活动了,那一周真的是非常现充。

0909_核聚变游戏节.jpg

图5  核聚变游戏节

9 号去逛了核聚变北京站,但是我们午饭后才过去,核聚变的场地又在亦庄非常远,导致我们可用的游玩时间比较少,所以我们进去后就是潦草地逛了逛,像很多游戏展台想要试玩都是要排队的就担心时间不够而没有去试玩,我虽然玩游戏但玩得也不算很多对很多游戏不怎么了解,有一些开放的展台可以玩的去玩了下也没有什么很特别的感觉,当时有《堕落之主》的演示看了一会,对游戏中表世界和影世界的设定还是比较有兴趣的。最后买了本《塞尔达系列三十周年艺术设定集》和一本《黑暗之魂传火录》,再次让我回家后手臂和肩膀酸痛不止。

0910_北平机器煎饼节1.jpg

图6  世界的饼·饼的世界

0910_北平机器煎饼节2.jpg

图7  北平机器煎饼节

紧接着在第二天 10 号又去参加了北平机器煎饼节,这个活动在龙潭中湖公园中举办,展示并售卖各种煎饼及煎饼类似物 —— 汉堡、大阪烧算煎饼吗?总之这个活动里都有卖。我和朋友三个人一起去,尝了三个不同摊子上的天津煎饼,还尝了汉堡、大阪烧、北京机器自己做的煎饼以及某种西式的煎饼(朋友买的所以我不知道名字),各有特色,但是说实话并没有觉得都很好吃而且价钱挺贵的。参加这个活动的收获是看到了解了各式各样的「煎饼」,以及,在现场抓到了老高合了个影。

0910_北平机器煎饼节3.jpg

图8  北平机器煎饼节与老高合影

除此以外,14 号去国博看了新疆文化展和白瓷展,22 号去了雁栖湖走了下西山步道,各有收获。

0914_国博白瓷展.jpg

图9  国博白瓷展

0922_雁栖湖.jpg

图10  雁栖湖·酸枣与山楂与板栗

除了各种活动外出,9 月也依然勤奋地去散步了,给自己定的目标是每周出去散步三次,9 月一共出去散步了 13 次,应该算是完成了目标 —— 虽说是定了目标但这个目标对我来说并没有什么压力,只要天气好我都是愿意出去走走的。13 次散步里就看到一次晚霞,不过这次晚霞超美。

0919_2.jpg

图11  晚霞

可能因为外出比较多再加上一些懒惰心理,9 月自己做饭只做了 8 次,外卖和外食的次数比 8 月要高了很多,不过外食大部分是自己一个人出去吃饭,和朋友聚餐吃饭并没有很多次 —— 就吃过了福满缘烧鹅王、盛金楼海鲜、四川龙爪树宾馆、四季民福、马辈儿涮肉、滩羊铺子南北疆特色汇这六家店,都挺好吃的。除了在店里聚餐,还在朋友家参加了一次小饭桌活动,吃到了非常好吃的自制云腿月饼和羊肉。

0902_小饭桌1.jpg

图12  小饭桌

0902_小饭桌2.jpg

图13  大渔记云腿月饼

上述大多数事情都是发生在 9 月的上半个月的,所以上半个月大部分时间都觉得很充实,总体心情是比较明朗的。由于 9 月 29 日是中秋节并且今年中秋节和国庆节连着,家里人很早就来电话问我假期安排了,最开始父母是想来北京玩的,不过离职休息这件事情没有跟家里讲过所以并不是很想让他们来北京,回家的话路途遥远回去又要应对各种亲戚邻居的无聊问题,所以到 9 月中旬开始烦恼假期安排。最后还是决定我回家里,但心里其实是很抗拒回家的,所以 9 月下半月心情稍微差一些。

写作

9 月重启了记录生活的《闲言碎语》系列的写作,发在了公众号上,把平时自己日记里的一些内容摘出来做一些整理后发出来。

重启这个系列的原因有很多,最主要的可能还是表达欲使然吧,想让自己的一些想法、感受被看见,但又不想发太多到朋友圈或其他社交平台上面,相比之下个人公众号是个不错的地方,一周一次的频率也比较适当。

除了表达欲,也有写作练习的目的在,现在每月一次的总结文章写起来其实是很费劲的,每周写点生活记录相对来说就比较轻松从而容易形成习惯 —— 其实除了生活记录,我还想每周写写我看过的论文和文章的,形成了每周写作的习惯后再来做这个事情也会更好一些。

除此以外,重新发布生活记录,也是想让关心我的朋友知道我的状况是怎么样的,我也相信真诚、具体的想法和感受比观点和知识更能让人和人之间达成理解、更能让人和人之间建立连接 —— 虽然不多,但确实有几个朋友说有被我的生活碎片感动,我有鼓励、建议这些朋友也去记录、发布自己的感受,但是要么说自己记录的都是一些负面的情绪、要么说觉得太私密不好意思发出来,其实我想说:首先,值得记录的生活细节、想法、感受其实是非常非常多的,但大部分人可能会对负面的经历印象过于深刻而忽略了那些快乐的瞬间和平静的时刻,进行生活记录的练习的很大一个价值就是帮助我们去观察到这些被忽略的时刻;其次,即使是负面的经历,也值得被表达出来,表达这个过程,本身就是对自己感受的肯定和接纳,中国人太过于擅长「跌倒了不哭」,这是很多病症的根源,将自己的感受表达出来除了能治愈这些病症,也可以让有同样感受、同样痛苦的人知道「原来有人和我一样」,这对他人来说也是一种莫大的安慰;最后,从私人记录到公开表达,可以根据自己的情况挑选、修饰,我也有很多非常私密的想法、感受、经历是不方便公开的,挑选、修饰也是一件值得去练习的事情,能让我们学会在向他人表达想法、感受时使用更加恰当的方式。

除了公众号、博客的写作,我自己每天写日记花费了很多时间,看了下统计,9 月在这上面花了 38.5 小时,算下来每天平均要花 77 分钟,当然这 77 分钟里有一部分是走神干别的去了消耗掉的,但算上回顾当天所有细节(翻看照片、聊天记录、支出记录等)和写作的时间,每天半小时应该是有的。详细地记录生活细节是我生活的一部分,也是践行我在《把自我作为方法》这篇博客中理念的努力,我想我还会继续下去。

阅读学习

9 月没有阅读太多,因为看电影《奥本海默》去读完了《奥本海默传》,准备写个详细的读后感来着但一直拖着;读完了科幻小说《挽救计划》,然后还开始读朋友推荐的《夏日来到山间》。有记录的阅读活动一共也就 19.5 小时,平均每天 39 分钟,也算是达到了我给自己设定的每天半小时的目标吧。

书籍之外,我在论文上花了更多时间,看统计平均每天花费 72 分钟。目前主要关注的论文仍然是 LLM 方面的,但更多是在看每天更新的论文以掌握整体研究的方向变化,完整读完的论文不多,自媒体的转发我现在已经基本不看了。LLM 这个领域的发展,看起来好像让人眼花缭乱,但是大家关注的几个核心问题在我离职后的 4 个月里没有什么变化,我关注的几个比较核心的问题有:

  1. 如何用 LLM 处理复杂任务?CoT、Agent 相关的研究其实都是在尝试回答这个问题,但目前来看还没有形成一个令人信服的、泛用的框架;
  2. 如何提高模型的训练和推理效率?LoRA、模型压缩(量化、裁剪)、对 attention 机制的改进都是在尝试回答这个问题,其中模型压缩技术的进展我觉得值得关注一下,模型如果能压缩到在手机上高效运行后会非常有想象力;
  3. 模型存在哪些 bias 以及如何对这些 bias 进行校准?对模型 bias 的分析会有不少反直觉的分析结果(性别/种族歧视这种就不说了),其来源也复杂多样,有的是来自数据、有的是来自模型结构、有的是来自训练方法,总之这方面的研究能让我更好更全面地理解 LLM,至于更深层的动力学分析、理论分析实在是太少了(有我可能也不太能看懂),在神经网络方向一直都很少,就没有太关注了。

其他

躺平的第四个月,我对现在的生活是满意的,回去工作这件事情依然没有考虑过 —— 有一些朋友已经来和我聊过这个了,有觉得行情不好建议我还是去找个工作的、有觉得我是不是不难找工作所以不着急的、有目前在做大模型相关业务想要招揽我或者找我合作的。对我来说,工作只剩下赚钱这个意义了,而我对钱没有什么渴求,以我现在的存款和生活状态来说,坐吃山空我也还能吃很久(当然,不考虑成家、重大变故之类的)。

目前觉得生活上觉得比较需要改进的是我还是过于懒散了一些,看了下统计,我有个叫做「消磨时间」的统计项累计有 120 个小时,这个统计项记录的是我比较漫无目的地去刷社交网络、看视频、看网络小说所花费的时间,平均每天 4 个小时,刨去每天醒后赖床的一个来小时和睡前的一个来小时,每天也还有两个小时,比我每天看书和读论文花费的时间总和还多。当然了,时间就是用来浪费的,只要是过得开心倒也没什么,像 6 月刚离职的第一个月「消磨时间」总共花费了 200 个小时也没觉得有什么不对,不过人的心态是持续在变化的,离职四五个月后,我其实已经不再需要靠漫无目的的消磨时间来冲淡工作所带来的厌倦和疲惫,最近两个月也是希望自己能有所产出,所以会希望能多一些更专注的时间。不过这也不是什么大问题,了解自己的状态、了解自己的问题然后去改进即可。

  •  

2023年8月总结

日常生活

虽然是一个比较宅的人,但在翻日记的时候我发现,不工作后我的生活要比工作时候丰富多了,只要人的闲暇时间多了,生活自然就会丰富起来。

8 月自己做了 17 次饭,比 8 月还多了 4 次,新尝试了茭白这个原来不熟悉的食材,喜欢它的口感,另外就是学习了生炒排骨这个新菜式。我对做饭的热情并不算高,大部分时候凑合能吃就行了。除自己做饭外,还外食了 6 次,吃了滇宴、亮嚯兰州翻花烤串、蜀肠缘江油肥肠火锅、比尔包车(原名比尔包装马车)、湘彬萱和江边诱惑巫山烤鱼:滇宴是和朋友二刷了解里面没吃过的其他菜;亮嚯兰州翻花烤串和蜀肠缘江油肥肠火锅都是去探店,感觉一般;比尔包车是给朋友过生日,去了后发现这家店的位置是两年多前一家比较喜欢的韩式烤肉的店面;湘彬萱是北京我比较喜欢的湘菜馆子,上一次吃是 2022 年 3 月 11 日,店面重新装修过了不再是前些年我们去的时候朴素老旧的样子;江边诱惑巫山烤鱼是和朋友逛完植物园后去吃的,还不错,不过比起味道更让我印象深刻的是在盘子里撕扯鱼肉的时候把一滴汤汁甩到了右眼里,痛到眼睛都睁不开,服务员领我到卫生间后我冲洗了好一会才好些。此外还参加了一次小饭桌活动,朋友做的薄荷牛肉印象很深刻,羊肉炒面片最后剩了点我带回去做了第二天的早饭。

20230806_food.jpg

图1  滇宴

20230815_food.jpg

图2  比尔包车

20230819_food.jpg

图3  小饭桌

20230821_food.jpg

图4  湘彬萱

8 月我一共外出了 29 次,其中 5 次是自己出门去附近吃饭,10 次是参加各种人际活动,14 次是自己去散步,并在这些外出活动中逛了双秀公园、奥森、后海和国家植物园。我尝试养成每周出去散步 3 次的习惯,这个在 8 月坚持得不错。只要空气质量不要太差、不要下雨,我还是喜欢出去散步的,有几次下雨还想着去打个伞去河边看雨的,不过阵雨来去匆匆等我下定决心的时候雨就停掉了。

在散步过程中看到了 1 次朝霞和 4 次晚霞。8 月 14 日这天看到朝霞前,我已经 351 天没有看到过朝霞了,主要的原因还是起不来,2022 年多看了几次日出和朝霞的主要原因则是心理状况糟糕睡不着,所以朝霞看得少也不是什么坏事情。

20230814_morning_sky.jpg

图5  20230814朝霞

20230818_sky.jpg

图6  20230818晚霞

20230819_sky.jpg

图7  20230819晚霞

20230824_sky.jpg

图8  20230824晚霞

20230829_sky.jpg

图9  20230829晚霞

8 月我共与 39 个人有过共计 92 次线上或线下的接触 —— 简单起见,线下见面、线上私聊、打电话算作有效接触,线上群聊则不计入,同一个人一天内的所有接触只算 1 次。还在上班的时候没有做过这样的统计,但感觉应该没有这么多人际往来。当然,这些人际往来的分布是长尾的,这 39 个人里的一大半也就是简单接触了一次,只有 10 来个人有超过 1 次的接触。月底在一个技术交流活动上见了一些许久没有见面的朋友,还共同悼念了下在这个活动里认识的一位过世的朋友,三四年前这位朋友给我们讲了他从设计稿或截图生成前端代码的想法,据说后面已经实现出来了,如果没有因为车祸离去的话,想必这次活动也会兴高采烈地跟我们讲如何用 GPT 来做这个事情 —— 我和他交情并不太深,只是觉得有些遗憾。总而言之,还在工作的时候,想到离职总会担心自己缺少人际交往而导致心理问题,但实际上,从工作压力中解放出来后,我有了更多时间能和朋友交流、也有了更多的耐心和同理心,也很感谢那些愿意来找我聊天交谈的人们。

八月社会上还发生了很多事情,各地洪涝、中植暴雷、工信部要求APP备案、统计局暂停发布失业率数据、印花税减半、大模型版号发放……各种社会事件大多只能增加焦虑,在个人无法对局面造成什么改变的情况下,我觉得还是少看、少说为好,慢慢但是持续地积攒一些力量以应对未来的不确定性吧。

阅读学习

进入 8 月后,我觉得身体、头脑和心理的状态都已经恢复到了一个比较不错的水平(当然,是相比工作时候),所以开始想尝试恢复去做一些比较需要精力的事情,除了平时的阅读外,也开始重新关注 NLP 领域特别是语言模型方面的学术进展,不过发现还是不能长时间保持专注,所以完整仔细读完的论文并不多。

除了注意力不能长时间集中外,我读论文进展缓慢的还有一个原因,那就是我在重新梳理自己的学习系统。比起按照价值(比如说内容质量、时效、影响力等等)来去获取信息和知识,我现在更倾向于通过问题来驱动整个学习过程,大致的理念就是从自身出发去提出一些问题,然后去获取资料来解答这些问题。初次产生这个想法已经是一年多前了,在这个理念的驱动下,8 月我清理了一下已有的笔记,删掉了大半只是当时觉得有用但实际上与我长久关注的问题并无太大关系的内容。在阅读论文这个事情上也是这样的,我仍然关注 NLP 领域的进展,但我对了解最新的、最全面的研究没有什么执念,我也不追求什么论文阅读效率,离职后的这段时间,我更想要做的,是能把自己对 NLP 领域的问题清晰地表达出来 —— 不光是我认为 NLP 领域有什么问题需要关注,还想要想清楚我为什么要关注这些问题、这些问题对我的人生有何意义、我在这些问题上能够起到什么作用 —— 在这个事情上,大佬们的论文推荐、基于 LLM 的论文阅读流程(翻译、摘要、重要结论)对我都没有什么意义。

总之,我并不想变成一个高效的资料收集机器,我希望我的阅读、学习、思考过程同样也是我的自我构建、改进过程的一部分。当然,在这个理念的基础上,提出问题是很困难的,我现在甚至连描述这种理念都做不到清晰准确,但我觉得挺有意思的。

其他

8 月读的科幻小说《艾比斯之梦》非常喜欢,读完后我写下了这样的感想:

艾比斯讲给说书人的故事、说书人和艾比斯之间的故事、读着这些故事的读者,故事的力量一层层地传递下去,三个世界上的人一致同意,故事虽然是虚构的但可以传递不弱于现实的真实力量。其实,所谓的现实、自我也不过是一个个故事而已,人类所谓的文明、信念、礼法、道德、宗教、国家、文化,都是形成大范围共识的群体故事,人类的自我也不过是大脑讲的一个故事,甚至连过去确定无疑发生过的事情也在被个人、群体基于某些目的重新叙述后天知道和现实偏离到了哪里。谁掌握了说故事的权力,说就掌握了编排众人(或自己)命运的能力,全心全意相信其他人讲的故事就意味着将个人命运全权交给了讲故事的人,努力地编织自己的故事就是在努力地书写自己的命运,我们也是剧中人,我们也都是说书人。

这些年来,我非常努力地去做各种记录,早先是惯性使然,而后这已经成为了我生活中不可缺失的部分,在这几年里,有朋友惊叹我的记录工作之多、询问我这种记录意义何在,于是我为这个行为所编织的故事也渐渐变多。8 月和朋友讨论自我与灵魂的时候,我借鉴了侯世达《我是个怪圈》里「我们活在彼此之中」的观点讲了一个新的故事:通过详细的观察和记录,我就可以让在意的人的灵魂更清晰、更长久地留在自己身边了。在这个故事里,我为曾经有很多可能发展为较亲密关系的朋友但却没有真的了解过他们而感到遗憾,并且为了不再有这方面的遗憾而开始在记录自己的生活外还记录和现在朋友的每一次见面、谈话以及他们的喜好、烦恼、心愿、生活习惯、去过的地方等各种信息。

当然,这只是个故事而已,并非现实,但就像《艾比斯之梦》一样,故事是否真实并不重要,故事是否能够继续讲述下去、并且是否能够被重要的人听到才重要。很多事情,特别是关乎自己生活的部分,苛刻地去追问是否有意义很没有意思,但作为一个故事来看待会很有趣味,不工作的第三个月后,我希望还能继续把这个不工作的故事讲下去,讲一个将生活当作主动的故事构建过程而不是在别人故事里当炮灰和龙套的故事,至于故事的意义和价值,讲故事的人固然会有所设计,但也取决于读者自己的想法。

最后再引用一段《艾比斯之梦》里的话:

我想说的是,人类有一种习惯,会将感动的事称之为‘真实’,但区分真实和虚构的能力很低。如果别人说‘这是真正发生过的事’,即使摆明了是虚构的,人类也会信以为真。越是撼动人心的故事,人类越不想认为那是虚构的。人类认为,如果不贴上‘真实’的标签,价值就会下降。

人类在不知不觉之间,活在许多虚构的事物之中:如果累积善行就能上天堂;超级古代文明确实存在;这场战争是替天行道;喝下这台净水器过滤的水就会变健康;她命中注定和我结婚;戴上这种饰品,幸运就会降临;某位政治家会改变这个国家的命运;进化论是一派胡言;我有优异的天分;不遵守老规矩,厄运会从天而降;铲除那个民族,世界会变得美好……如同诗音所说,人类一直愿意相信错误的事。从出生到死亡,都住在只存于自己脑中的虚拟现实之中,一旦知道那不是事实,就会仓皇失措,不肯承认。
  •  

2023年7月总结

七月是我离职后的第二个月,依然在北京待着哪里也没有去,平平淡淡地过着日常生活。

日常生活

七月最大的成就是建立并坚持了几个比较好的生活习惯:

  1. 吃早饭

    大部分早饭是自己做的,有时候会去吃 KFC(买了 KFC 的大神卡选了早餐优惠),偶尔也会点点外卖。自己做早饭目前比较随便,大部分时间是煮个面,有时候也煮鸡蛋、煎鸡蛋、水煮个西兰花什么的。用寿桃鸡蛋面搭配仲景葱油做了好多次葱油面吃,寿桃是朋友推荐的,煮了后口感仍然比较有韧性不用担心煮烂什么的,仲景葱油是调好味的,煮好面捞出来浇上点拌开就很好了。去吃 KFC 的时候更多是想出门走走,一个观察是,同样是八点多九点左右,周末的时候我到 KFC 点的单子一般是 50 号左右而工作日会在 130 号后之后,感觉吃早饭的人还是不多呀,为自己点赞。

  2. 每天起床后会晨练一会

    大部分时间会做一套固定的全身运动,偶尔有几天状态不好就随便动一动,总之就是在起床后活动下身体,身体活动舒展开了,精神也会明显更好,能明显感觉到七月每天的精力都还不错,比六月更好,比工作时候就好非常多了,每天几乎都不会有那种很困乏的状态。

    精力或许也和睡眠有关,但是离职后还没有去刻意改进作息,看了手表记录的睡眠数据,也并没有睡得比上半年还在工作时那几个月更好,所以我还是认为精力变好和每天的晨练有关系,一定程度上可能也和心理压力的降低有关。

    虽然有感觉身体状态有在变好,但偶尔颈椎和肩膀还是会有不舒服,有时候是因为没睡好,有时候是因为久坐。有想去增加一些运动量,比如说去河边跑步或者去攀岩,不过一直没有下定决心。其实游泳我也是喜欢的,但我喜欢、习惯的是在河里游泳,对于单纯以运动健身为目的的游泳还是没有太多兴趣。

  3. 冥想/正念

    正经的冥想/正念似乎还要训练呼吸什么的,没有研究过不是太懂,我就只是想要去观察自己内心的念头并进行梳理而已,用的是 Pause 这个 APP 来进行辅助,它的交互很简单,就是让手指在屏幕上保持移动,屏幕上会出现一个圆球随着移动慢慢地变大,同时会播放很舒缓的音乐。我一般是在吃完早饭后,到床上盘腿坐着靠在墙上来进行这个活动,坐着是为了保持清醒,靠墙是为了让颈椎舒服点,其实什么姿势都可以,只要能保持全身比较舒适放松并且意识清醒,也试过躺着,但容易睡着。

    我是个脑子里念头非常多的人,所以经常感到很累,冥想并不能让念头减少,甚至在冥想的时候因为更加关注自己的大脑活动会觉得冒出来的念头想法更多,不过现在已经学会了不要尝试去刻意控制引导它们,观察、忍受就可以了,偶尔能做到比较抽离,极少数大概有一两次能进入比较忘我感觉不到什么杂念的状态,但不管怎么样结束后一般都能明显感觉到头脑更轻松、注意力更集中、情绪更加平稳,其实有时候爬山、写作或者玩游戏也能得到类似的体验,只不过坐下来闭上眼睛发呆是一个门槛够低每天都能做的事情。

  4. 写日记

    按理来说,我不工作而且每天宅着好像会没什么可写,但其实并不会。只要去尽力地仔细观察,普通的日常生活里也会有很多值得记录的事情,重点不是有没有足够丰富的、不平常的事件,而是有没有值得写下来的感受,不管是心灵上的还是身体上的。前面说到我脑子里念头非常多,所以哪怕是发呆,那期间翻腾涌动的念头和想法也会很有意思,身体上的感受也每时每刻在变化,这些感受只要能被重视,就都是值得写下来的。

    重视自己的感受就是重视自己,重视自己的人不会无事可写,有时候我甚至因为有太多感受想记录而觉得文字实在是不够方便。

    我写日记很多年了,所以写日记并不是一个新的习惯,不过在上班的时候都没有那么多精力去仔细地回顾当天的经历和感受,不能保证天天都写。写日记本身也是一种能提升对生活细节观察能力的练习,写得越多就能观察得越好,观察得越好又能写得更多。

  5. 阅读

    阅读是几个习惯里做的比较不好的一个,一个原因是我比较散漫,七月同时看了很多书,导致没有几本看完的;然后我更想要进行能充分调动思维的阅读活动而不只是靠阅读来打发时间,所以对注意力要求会比较高。因为没有几本完整读完的书,这次就不写阅读方面的具体感想了。

其他方面:

  • 除了早饭外自己做了 14 次饭,点了 6 次外卖,和朋友聚餐 7 次
  • 外出 20 次,其中 10 次散步、9 次社交活动(和朋友聚餐、看电影等)

    20230707_cloud.jpg

    图1  20230707的傍晚

    20230709_cloud.jpg

    图2  天上有只大鱼

    20230723_cloud.jpg

    图3  20230723的晚霞

    20230726_moon.jpg

    图4  20230726的月亮

    20230728_sky1.jpg

    图5  20230728虹霞交映的天空

    20230728_sky2.jpg

    图6  20230728好看的天空

  • 见到了 10 个朋友,和朋友在外面吃了南洋茶室、一坐一忘、八条一号、滇宴、烤乐烧、零公里和八合里海记,滇宴是七月朋友发现的一家新开的云南菜,菜单非常厚,有不少原来在其他云南菜馆子里没怎么见过的比较新鲜的菜式

    20230701_food1.jpg

    图7  南洋茶室很嫩的海南鸡

    20230702_food1.jpg

    图8  一坐一忘的酸菜酥红腰豆

    20230705_food1.jpg

    图9  八条一号菜单上没有的神奇甘蔗尖

    20230705_food2.jpg

    图10  八条一号红酒煎猪肝

    20230705_food3.jpg

    图11  八条一号小白菜酥红腰豆

    20230708_food1.jpg

    图12  滇宴的富源酸菜煮牛干巴

    20230729_food1.jpg

    图13  零公里

  • 去了一次奥森(其实离得很近可以多去的),看到了好看的向日葵,还去了一趟地质博物馆看到很多漂亮的石头

    20230705_sunflowers.jpg

    图14  奥森向日葵

    20230705_stones_1.jpg

    图15  地质博物馆矿石(1)

    20230705_stones_2.jpg

    图16  地质博物馆矿石(2)

  • 几次看电影和逛超市,发现电影院和超市人都很多,热闹的场面仿佛回到了疫情前,虽然周围也有不少关掉的超市和小店,以及有暑假的因素在
  • 本来还想把投资和日常支出的账单整理下的,但是半年没整理了,工作量实在是有点大,预计八月能完成

游戏

steam 夏促的时候买了 16 个游戏,大部分稍微尝试了下但并没有长期玩,七月主要玩了《王国之泪》《潜水员戴夫》《杀戮尖塔》《灵魂摆渡人》《Helltaker》《Patrick's Parabox》《雨世界》这几款游戏。

潜水员戴夫

dave_the_diver.png

图17  潜水员戴夫

前半个月主要在玩《王国之泪》和《潜水员戴夫》,《王国之泪》就不用说了,主要是没啥别的事情的时候进去做做小任务和神庙解谜。《潜水员戴夫》我玩了 40 多个小时通关了,觉得作为休闲放松的游戏还是非常好的,以下是我对这个游戏的总结和评价:

  1. 潜水+经营以及推动它们的线性剧情事件,构成了这个游戏的主要内容:游戏将每天划分成三个时间段,主要以潜水为主,上午和下午潜水摸鱼、晚上开店(后面到晚上也能潜水),潜水的所得的食材作为寿司店经营的材料,寿司店一方面为潜水装备升级提供资金、另外一方面也通过各种经营事件(主题派对、烹饪对决)激励玩家去探索更多的地图、收集更多的食材,同时还有一个章节形式的线性剧情推动这两块核心内容的变化(主要涉及地图变化和装备解锁升级),后面又引出了农场和养鱼场来减轻食材供应的压力
  2. 在潜水这块内容上,主要的玩法就是在海中畅游抓捕各种鱼类、采集各种海藻、收集各种掉落在海中的材料,并随着剧情事件升级潜水装备(潜水服、氧气瓶、装载箱、3种武器),随剧情进展还会有和巨大海洋生物的 BOSS 战以及一些横版解谜过关内容
  3. 在寿司店经营这块上,主要就是食材、调味品和菜谱收集然后开店营业(需要设置当日菜品+厨师做菜+服务员上菜)赚取资金和好评并升级店铺,还可以在烹饪对决事件中以厨师的视角来做菜(可以视为若干烹饪小游戏)
  4. 在潜水+经营+剧情事件的大框架中,非常和谐地缝合了各种丰富的机制、玩法,各个玩法都很轻所以不会让人在玩的时候有什么压力(当然想肝也可以但游戏本身几乎没有为肝设置什么奖励),整个游戏流程的节奏也设计得非常好,潜水深度的增加、潜水装备的解锁升级、寿司店的升级和各种事件等等始终在设计良好的线性剧情中以一种很舒服的节奏呈现着,不会有哪一段觉得困难和无聊 —— 游戏里的各个子内容可以说都算不上有什么深度或者很优秀,但这种整体设计的能力是在是太厉害了
  5. 游戏里有很多让人会心一笑的小彩蛋,比如寿司店经营事件里挑战者吃下食物后的动画让人非常容易想起《中华小当家》的场景、某个挑战的厨师摆出拳皇经典人物的 POSE、店员吐槽说为什么晚上才营业我晚上都很累了……

杀戮尖塔

slay_the_spire.png

图18  杀戮尖塔

杀戮尖塔》是非常知名的卡牌游戏,在 rogue-like 式的爬塔过程中同时构建自己的牌组,很上头很杀时间,不过我没准备投入太多时间在这个游戏上,只是慕名已久尝试一下,这种游戏轻轻松松就能玩上几百个小时,我还想多尝试下别的游戏呢。

灵魂旅者

spiritfarer_1.png

图19  灵魂旅者

灵魂旅者》中玩家扮演一个冥界摆渡人,接纳死者的灵魂,完成他们的愿望并在这个过程中了解他们的故事,总体上来说是一个节奏很舒缓、剧情驱动的游戏。这个游戏玩起来没有任何的负担,虽然在船上也有一些模拟经营的元素 —— 收集木材矿石、种植粮食和蔬菜、为船上的灵魂制作食物,但这些事情并非游戏的主要驱动元素,并不会造成多大的压力。不过也正因为节奏舒缓,所以我投入的时间不算很多。很喜欢在暴风雨中听着叔叔演奏的音乐去抓闪电、在航行途中钓鱼看云彩和星空的流动。

spiritfarer_2.png

图20  灵魂旅者2

《Patrick's Parabox》和《Helltaker》

Patrick's Parabox》和《Helltaker》是两个在推箱子的玩法基础上加上了创新玩法的游戏。

patricks_parabox.png

图21  Patrick's Parabox

我是先玩了《Baba is you》后得知了《Patrick's Parabox》这个游戏,和《Baba is you》通过推动构成游戏规则的词语来改变游戏规则不一样,《Patrick's Parabox》是在推箱子的基础上加上了嵌套、镜像等元素,在玩的过程中还会触发递归、循环、无穷等现象,作为一个计算机出身的人来说觉得非常有意思。

helltaker.png

图22  Helltaker

玩了《Patrick's Parabox》后又了解到《Helltaker》这个免费游戏,它体量很小,总共就十来个关卡,要求玩家在有限步数的前提下到达目的地,同时还设计了陷阱(经过时需要消耗更多步数)、钥匙(获取后用来打开锁上的门)、激光(碰到必死需要推动岩石对其进行阻隔)等元素,非常的难,每一关都需要经过仔细的思考和反复的尝试,在此基础上这个游戏还设计了趣味盎然的剧情和人物以及非常有节奏感的音乐,甚至还有 BOSS 战(好难!)。这两个游戏都需要大量的思考,玩起来并不轻松,卡关的时候甚至想过去写程序来暴力求解,不过解决谜题后的成就感也是非常棒的,这就是解谜游戏的乐趣所在啦,不难的解谜游戏还叫什么解谜游戏啊!

雨世界

rain_world.png

图23  雨世界

雨世界》这个游戏据说设计了一个庞大而完整的世界观,我目前玩的不多,尚未对此有充分的体验,不过对里面的生态系统已经有所了解。一般来说在角色扮演或者冒险类游戏里,如果有敌人或者陷阱、谜题,主要都是为了服务玩家而设计的,所谓服务玩家,就是说这些元素首先要能给玩家提供乐趣,其次才是加上一些和世界观相关的点缀,换言之游戏里的各个元素主要是等待玩家与之互动、互相之间是很少交互的。《雨世界》里面的各个生物会有很多自主的行为而且不同生物之间还有复杂的交互行为,比如同一类生物的不同族群之间会互相攻击,比如有明显的一类生物捕食另外一类生物的食物链表现,还有种类丰富的不同生物。玩家扮演的也只是这个生态系统里一个弱小的生物,所以像其他游戏里那样打败敌人是不太行的,能做的只能是观察、学习、躲避、探索、捕食其他更低级弱小的生物,不像其他游戏里那样容易获得打败敌人、解开谜题的爽感。这种游戏会比较挑人,我还是比较喜欢的。

电影

202307_movies.jpg

图24  电影

看了《夺宝奇兵5:命运转盘》《长安三万里》《茶啊二中》《芭比》《封神第一部》五部电影。

《夺宝奇兵》没太多好说的,是那种老派复古的故事,人物的塑造、情节的冲突以及很多镜头,都会让人觉得很熟悉没啥新意,但是就觉得很合适,看下来我不算喜欢,但还可以吧,不觉得有什么大的槽点 —— 以现在的喜好来看当然有很多可以吐槽的但就觉得这些在这种电影里就是正常的啦。

看《长安三万里》被追光的动画制作水平惊艳到了,电影的剧本很有意思,一首首唐诗特别是最后的《将进酒》的意境渲染也非常好,但我看这个电影没有办法获得其他人那样的感动,看着电影的时候,脑子里闪过的是「贞观元年,关内饥」「开元十六年,河北饥」和疫情的三年,小人物在整个电影里几乎没怎么被提到,安史之乱沦为高适高光展示的一个背景板,乱世里普通民众的苦难完全没有,所有的内容都是为了英雄、名人形象服务的,盛世是上层人的盛世、乱世也是上层人的乱世,这样的形式所传达的文化自信对我来说太过空洞和狭隘了 —— 当然,电影就是这么设计和定位的,有问题的可能不是它,大概是满腹不合时宜的我。

《茶啊二中》是七月看的最舒服的电影,它没什么深刻的内容和过份的升华、说教,动画制作水平不能和追光比,只是认认真真地讲一个校园喜剧,讲的是师生互相达成理解这么一件事情,笑点也主要在师生、学生与学生之间的互动中呈现,大部分都是一些校园生活里细节的戏剧性或者夸张化表现,频频让人会心大笑,电影里的各个角色想必大家在看的时候也总能找到一些当年同学的影子。边看边笑边吐槽,脑海里跟着浮现出上学时一幕幕开心的场景 —— 我高中最开心的应该是复读那一年了,和同学在最后一排偷吃零食(这对作为好学生的我来说可是很刺激的),课间和好多同学一起跑出去在阳台玩(晒太阳、聊天、玩游戏)而不是像高二高三那样继续在教师狂做题,六一儿童节同学去老师办公室偷了电视电源线大家一起看《葫芦娃》……当时的班主任对我们比较宽容,同学们成绩不算好却都认真,但又不像尖子班学生那样认真到苦大仇深……我喜欢这样讲小人物小场景的故事,它们的情感简单但真实、稳固,人性的光辉在每个真实的普通人身上,我不需要神明和偶像。

《芭比》是一部毫无疑问的女性主义电影,虽然只是通过话语表面性地痛斥了父权制度、申诉了一番女性的困境,并用一层精心包装过的喜剧和童话色彩的外衣来描绘了一些理想的可能、减轻了荒诞与无力的感觉,并没有真的深入到女性困境的细节和父权社会的内部机制里,但我想它已经达到了它的目的。对于它的争论或赞誉或批评,我不想去参与,只是觉得作为一个男性也应该去了解女性困境和女性权益,这种了解不是为了获得什么其他群体的肯定、赢得什么辩论,而是为了在自己的女性亲友遇到困难时理解她们、给出一些可能有用的帮助,事实上我已经有女性亲友处在困境之中了(或者说一直在吧)。进一步的,社会规训对每一个想充分发展自己个性的人都是枷锁,建立起这样一个认识很重要。

《封神第一部》我觉得至少是一部合格的电影了,想起早年间看的《长城》还是会眼前一黑,当时想着马特达蒙应该不会拍烂片吧,我真是天真。电影的工业水平(场景、特效等)已经非常不错了,编剧不脑残整个故事还是比较自洽的,演员都很敬业,作为一个商业片来说我觉得就是合格了。故事我本来觉得魔改了很多,后来去了解了下,其实参考了不少《武王伐纣平话》里的故事,也不算凭空瞎改,不过都无所谓,封神故事里的政治斗争本来也不重要,群仙斗法才是真正的看点嘛。这样的电影没什么深度,但还是期待它们在将来能培养出一批敬业的电影从业人员,算是我对国产电影的一点祝福吧。

其他

整个七月,我的心理状况都很平稳,六月提到的一些负面情绪非常少出现了。用「不系舟」这个网名用了很多年了,大概这段时间才真正体会到一点「无能者无所求,饱食而遨游,泛若不系之舟」描述的那种闲适感,哪怕只是暂时的。承认、接受自己和自己的行为对整个社会毫无用处,是对相反方向社会规训的一种反抗和矫正,玩游戏有什么用、发朋友圈有什么用、看这些杂书有什么用、说这些有什么用……没什么用,我就是乐意,有什么用我自己说了算,关「您」屁事。

至于将来怎么办,七月完全没去想,顺其自然吧。人总是在为未来生活,今天规划明天,明天规划后天,倒不是说这种规划是错误的,只是对很多人来说,这种对未来的焦虑感完全压过了对现在的感受,我还处在矫枉过正的过程里,享受每一天吧。比较确定的是,目前仍然没有想回到职场上去,主要原因当然是存款还够、没有负债、一人吃饱全家不饿啦。

稍微有一点不太满意的是发现自己在阅读学习上做得不够好,七月本来是想多读一些书并且看看论文的,但目前想要进入比较专注的状态还是有些困难,这些困难我曾经也克服过,所以并不会毫无头绪,只是需要一些决心和持续的投入,或许八月会尝试努力一下,不过不努力也没什么关系。

  •  

2023年6月总结

六月是我正式离职后的第一个月,也是 2023 年上半年最后一个月,这个月我待在北京哪里也没有去,主要就是在玩游戏,偶尔看看书,总体来说还是比较惬意平静,不过有时也会感到无聊和焦虑。对懒散拖延的我来说,没有了工作来强制分配时间后,自己维持生活的基本秩序还是有点挑战的,就像一个骤然暴富的人,突然一下有了这么多的可自由支配时间让我有些不太适应,在察觉到自己心态和情绪上的问题后,我开始去做一些尝试,同时也决定恢复以前定期回顾总结的习惯,以便从更大的尺度上了解自己的变化、发现问题。

娱乐

2023-06-zelda.jpeg

《王国之泪》我是五月二十六开始玩的,在最开始的半个月内(从五月二十六到六月十来号)我除了吃喝拉撒几乎都在玩,到六月十号把主流程推进到只剩打最终 BOSS 后才开始每天玩得少一些了,现在游戏时间已经接近 200 小时了。

我觉得游戏最好玩最沉浸的阶段,就是在探索地图的时候。说到地图探索的体验,我会先想起《黑暗之魂1》里那精妙绝伦的地图设计,在不死教区躲过敌人坐电梯回到荒凉破败的传火祭祀场的时候、在巨人墓地远远望见恶魔遗迹的岩浆和灰烬湖林立的世界树的时候,那种惊喜和震撼是难以形容的,但《塞尔达》(包括《塞尔达:旷野之息》和《塞尔达:王国之泪》,后文的《塞尔达》指这两部游戏)的地图探索体验是不同的,它地图的各个部分互相之间没有那么强的关系,《王国之泪》在原来《旷野之息》地图的基础上加上了天空浮岛、幽暗地底以及地表与地底之间的洞窟,但地图设计的理念并没有发生大的变化,正如《旷野之息》的名字所说的一样,它提供的是一个巨大的旷野,让玩家能在其中自由的探索和玩耍,无论走到哪里皆是如此,它没有像《黑暗之魂》里传火祭祀场那样的中心 —— 监视堡垒算是大本营,但是里面所有的人都在鼓励林克外出探索。在一个巨大的旷野上探索什么、怎么玩耍呢?想像一下我们小时候在旷野上是如何玩耍的 —— 观察每一朵花和每一棵树、惊喜于草丛里扑棱棱飞出来的昆虫、拣拾漂亮的落叶和石头、把奇形怪状的石头想像成怪物或精灵……《王国之泪》里的开放世界地图就是这样的,它空旷但并不空洞,充满了细小但有趣的内容:用剑把草割开会有蚱蜢飞出或者蜥蜴爬出,抬起石头偶尔也会有昆虫从下面爬出,夜晚萤火虫在不远处轻盈飞舞,草地上出现一个突兀的有缺口的三角形石阵,一棵巨大的樱花树下有一个石像而且它面前有一个好像能放上贡品的小坑(放个苹果上去会发生什么呢?),形如兔子、散发着青白色光辉的小精灵在不远处玩耍被发现后慌忙跑向一个黑黢黢的洞窟(洞窟里会有什么呢?),荒废的村落里埋藏着宝箱打开后只是一柄锈蚀的短剑……一般的游戏都会设计一些游玩的大致流程并且在游戏里引导玩家,《塞尔达》虽然也有主流程但在引导上非常非常弱,即使是在赶着救公主的路上,玩家依然会非常非常容易被路上的各种东西吸引 —— 哎呀有棵树摘点苹果吧,波克布林(游戏里的一种怪物)在吃水果耶好可爱,这三棵树长的和周围的不太一样啊去看看有没有呀哈哈,有马群我要抓个马,这个瀑布后面有没有隐藏洞窟啊过去看看,啊有小精灵悄悄蹲下过去抓一只……像小孩子一样抱着探索一切的心态,在玩《塞尔达》时是最能体会到快乐的,如果像玩其他游戏一样只是跟着任务走反倒无趣。

至于被网友戏称为绿皮科技的左纳乌科技,确实设计得很有意思也很有可玩性,但我没有在这上面花太多时间,也就是造了个 MK2 小摩托用来赶路,至于成为海拉鲁机械工程师什么的我还是算了。探索各种零件之间的组合当然也是一种乐趣,但和在旷野上自由奔跑的感觉还是不一样的,对我来说玩左纳乌科技和《Minecraft》里的红石电路没太大差别,当年我在《Minecraft》里用红石电路造刷怪塔、自动农场、自动造石机、村民自动繁殖中心……红石电路还是图灵完备的呢。阻碍我去玩绿皮科技的原因还有一个就是每一次制作设备都是要消耗矿石的,《王国之泪》又不像《Minecraft》一样把游戏机制就建立在挖矿和制造上,不想去卡 bug 复制矿石,也没有制作视频获取更多粉丝的需求(网络上有用左纳乌装置来演奏音乐的行为,整个过程很辛苦演奏效果也不好,我不太能理解),总而言之,这个机制对我来说深度探索的麻烦大于乐趣,所以我就只是当工具在使用了。

比较后悔的是我过于匆忙地推进了主流程并且太快把所有地图点亮了,本来就是应该在这个过程中充分地享受探索乐趣的,我却东奔西走,翻山越岭到达鸟望台(游戏里用于探测一个小区域并为之建立地图的设施)点亮地图然后马不停蹄往下一个鸟望台赶过去,遗漏的很多东西只能后面因为一些别的任务出门的时候才会再顺路看一看,那时候体验就没有那么沉浸了。

游戏之外我没有太多的娱乐活动了,看了一部《蜘蛛侠:纵横宇宙》的电影,看完了《黑镜第六季》,没太多可说的。

其他朋友离职、退休后,都爱出去旅游,我好像对出去游玩没有特别大的念想,反倒是还在工作的时候会想得更多一些。

美食

  • 06.09 Tapas by Alba

    西班牙菜,第一次吃,主要是长下见识。

    • 伊比利亚火腿香肠拼盘

      2023-06-09-food-1.jpeg

    • 马德里煎蘑菇 & 烟熏三文鱼配芝麻菜

      2023-06-09-food-2.jpeg

    • 香草牛肉塔塔 & 松露红虾蘑菇塔

      2023-06-09-food-3.jpeg

    • 西班牙蒜香油滚虾

      2023-06-09-food-4.jpeg

    • 西班牙传统海鲜饭

      2023-06-09-food-5.jpeg

  • 06.10 食醴湘

    醴陵小炒肉是带汤的,学习了,味道还行但是价格有点高(相对味道和量来说)。

    2023-06-10-food.jpeg

  • 06.11 三倒拐市井火锅

    重庆火锅,不比壹圣元差呀。

    2023-06-11-food.jpeg

  • 06.17 重庆壹圣元火锅

    主要是见朋友,味道的话去太多次没什么好说的,不放图了。

  • 06.22,端午节小饭桌

    由 CFO 和大渔记出品。

    2023-06-22-food.jpeg

  • 06.29,老广酒楼,踩雷了,烧鹅、卤水还可以,其他的菜多少都有点问题,还贵,不放图了。

阅读

六月的前半个多月大部分时间都在玩游戏,到后半个月才开始去读一些书,但也没有特别专注地去读,把《卡拉马佐夫兄弟》《工作、消费主义和新穷人》《技术的本质》《蚱蜢:游戏、生命与乌托邦》《千脑智能》《如何阅读一本书》《阅读是一座随身携带的避难所》《脑与阅读》《思考:快与慢》这些书都翻了翻,没有一本看完的。

《卡拉马佐夫兄弟》一直想读的,那么长的篇幅我估计也没办法短时间内看完,里面的人名确实让人比较困扰,冗长的人名就算了,同一个人名也能有不同的翻译,阿列克塞、阿辽沙、阿辽什卡是同一个人,德米特里、米特里、米嘉、米剑卡也是同一个人,不是太能理解……

《工作、消费主义和心穷人》从工作伦理和消费主义的角度反思社会现状,读这本书主要也是因为对现代社会工作感到很困惑,未必能从这本书里得到什么答案,就是开拓一下思路吧。

《技术的本质》尝试对技术给一个明确而严密的定义,探讨技术的起源、演变背后的机制以及技术对社会的影响,看起来挺费劲的,不过我觉得我的有些问题或许能从这本书里得到启发,不一定会读完这本书,但会有针对性地翻一翻感兴趣的章节。

《蚱蜢:游戏、生命与乌托邦》是去年朋友推荐的书,它是一本宣称玩游戏是人类的终极理想的严肃哲学书籍,当然这里的玩游戏在书里是有严密的定义的。虽然这本书尝试以对话体这种比较轻松的形式来写,但是要理解这本书想表达的内容还是需要充分调动思维的。读这本书,有比较大的一部分因素是因为我喜欢游戏。

《如何阅读一本书》我非常喜欢,要是能早点读这本书就好了,它对阅读做了一些分类,并针对「增进理解」的阅读提出了从理念到具体方法的一系列指导,我在之前写《至少还有书》的读后感的时候说「没有人管束我的另外一面是也没有人引导我」,我想,这本书就是我曾经缺失的引导。

《阅读是一座随身携带的避难所》是毛姆关于书和作家的随笔,读起来很轻松的,我就有兴趣了随时翻一翻,这本书也不用太按顺序读,比如我就先把里面讲陀思妥耶夫斯基和《卡拉马佐夫兄弟》的那章读了。我在微信读书上有一个叫做「书的书」的分组专门放一些讲书的书,作为找其他想读的书的一个入口,比看豆瓣评论什么的会更有感觉一些。

读《千脑智能》《脑与阅读》《思考:快与慢》这三本书是出于对人脑认知能力机制的好奇,事实上这个方面的书我收藏了一大堆的,想做主题阅读的,但发现自己并没有形成比较体系的主题阅读的方法和过程,先随便看看吧。《千脑智能》目前看得多点,里面提出的新皮质认知智能模型很有意思,如果可以验证的话对人工智能的发展会起到很大的帮助,但不知道是不是出于易读性而对细节含糊带过还是翻译的问题,新皮质认知智能模型的具体细节我不是太能理解,如果整本书读下来还看不明白,我可能会去翻翻作者的论文。

其他

不像其他人,不工作后我并没有变得非常开心,大部分的时间心情是比较平静轻松的,但要说很开心可能谈不上。认真想想的话,上学时忙于学业、工作时忙于工作,我并没有完全自主地安排自己生活的经验,如果不想在既定的框架里生活该如何做,我其实是缺乏回答这样一个问题的理论和经验的,自由是有代价的,我觉得不是每个人都能承受得住。

六月中旬开始,我频繁地被「得做点正事」的焦虑和「什么也不想做」的逆反心理之间的冲突所影响,情绪经常低沉,甚至一些要解决的生活琐事明明并不困难也不复杂,也觉得要打起十分的勇气才能去面对,那种「得做点正事」的惯性和对此的厌恶,我认为不是出去四处转转吃点好吃的就能解决的,这也是我没有急匆匆出去游玩的一个原因,我希望能真正以轻松平静的心态去面对美景和美食(当然,这可能也只是一个未必能达到的理想态),而不是靠美景和美食来「疗愈自己」,没有那么容易疗愈的,因为很多心理和行为的惯性是过去三十多年的生活里在目前这个社会的规范中逐步养成的,与其说伤病,不如说是畸形,这些就是我在《辞职了》那篇文章里说的「真正重要的问题」。我有过份地向内探寻的坏毛病,什么伤病、畸形说的可能有些矫情,简短些总结的话,就是在离职后的第一个月里有时出现了懒、拖延、迷茫、焦虑、空虚、无聊等一些常见的负面情绪和行为,问题并不大(或者说这些问题本来就一直存在),不过收集 badcase 对系统进行迭代优化已经是本能了,所以会对这些多注意一些。

察觉到情绪不太好后,我迅速地建立了应对机制,其实也没什么特别的,从六月二十日开始,开始每天晨练、阅读、冥想、吃早饭、不那么晚(八九点)起床,规律的、有序的生活很快就让我状态大大改善。写这篇总结的时候已经是七月六日,目前为止这个机制运作良好,坏情绪已经较少出现,平静、满足常有。我并不那么追求快乐那种让人兴奋的感受,能够获得平静就已经很好了。

  •  

LLM Prompt Engineering 实践:记忆(1)

本文是《LLM Prompt Engineering 实践》系列的第三篇文章,系列文章如下:

  1. LLM Prompt Engineering 实践:序 · ZMonster's Blog
  2. LLM Prompt Engineering 实践:原型 · ZMonster's Blog
  3. LLM Prompt Engineering 实践:记忆(1) · ZMonster's Blog

之前我提出了一些问题:

  1. ChatMessageHistory 是基于内存的历史消息记录方法,一旦退出历史对话消息将全部丢失
  2. 当讨论的话题更早之前聊过时,选择最近历史消息的做法无法利用之前的讨论
  3. 固定设置输出最大 token 数量的做法为了照顾长输出的情况,会导致短输出情况下无法利用更多的历史消息
  4. 一个全局设置的温度参数会影响机器人处理不同任务的表现,比如说像翻译、分类、事实性问答这些任务并不需要随机性,而写作、创意生成则有一定的随机性会更好一些
  5. 在当前这种模式下,将机器人属性设置放在最开始的做法无法保证设定的一致性和连续性,用户总是能通过有意构造的输入来突破这种设置

其中 1/2/3 涉及到记忆机制的问题,对这几个问题都可以独立地去思考和尝试解决,但在此之前,还是有必要再对这几个问题做更多的探讨。

我在之前 xorius 的开发日志里第一次提出使用历史对话记录时是这么说的:这段代码不是对话的模式,没有考虑聊天历史,如果要做聊天的话,需要维护一个聊天历史。

那么问题来了,为什么在响应当前用户输入的时候,要去考虑聊天历史呢?这种做法其实就是假设聊天历史对响应当前的用户输入有帮助,那么:

  1. 这个假设会一直成立吗?
  2. 什么情况下这个假设会成立?此时历史记忆和当前用户输入有哪些可能的相关关系?
  3. 假设成立的情况下,使用最近 K 轮历史记忆的做法,K 会有一个模型计算力能承受的上限吗?
  4. 假设成立的情况下,使用最近 K 轮历史记忆的做法,相关的内容在这 K 轮历史记忆中的占比会有多大?
  5. 假设成立的情况下,使用最近 K 轮历史记忆的做法,其中的无关内容会带来负面影响吗?如果会的话可能带来的负面影响有哪些?

对第 1 个问题,既然是假设,那么它当然不会一直成立,否则它就是真理而不是假设了,而之前 xorius 的实现里是在这一假设下实现了回答时对历史记忆的利用 —— 即无论何时都会尝试把历史记忆用上,因而也会自然而然地带来一定的副作用: 在响应不需要历史记忆的用户输入时,可能因为强制使用历史记忆而造成错误的回答。

对第 2 个问题,个人认为可能有以下几种情况:

  1. 当前输入提及了历史对话中的某些内容,比如
    • 使用代词提及历史对话中聊过的某个或某几个对象,这种情况称之为指代

      「它」指代「语言模型」

      You: 语言模型是什么
      
      Xorius:
      语言模型是一种计算机程序,用于预测自然语言文本中下一个单词或字符的概率分布。它是自然语言处理中的一个重要组成部分,可以用于许多任务,如语音识别、机器翻译、文本生成和自动摘要等。语言模型通常基于统计学方法或神经网络方法,通过学习大量的文本数据来建立模型,并使用该模型来预测下一个单词或字符的概率分布。在实际应用中,语言模型可以帮助计算机更好地理解和生成自然语言,从而提高自然语言处理的效果和质量。
      
      ------------------- 上方为历史对话 -------------------
      
      You: 它有智能吗
      
      Xorius:
      语言模型本身并没有智能,它只是一个程序,能够根据已有的文本数据预测下一个单词或字符的概率分布。然而,通过不断地训练和优化,语言模型可以逐渐提高其预测的准确性和效率,从而更好地模拟人类的语言习惯。此外,语言模型也可以与其他人工智能技术结合使用,如机器学习、深度学习、自然语言处理等,从而实现更加智能化的应用。因此,虽然语言模型本身没有智能,但它可以为人工智能的发展提供重要的支持和基础。
      
    • 提及历史对话中聊过的某个或某几个对象,但以省略的形式,这种情况称之为零指代

      「语言模型在语音识别中怎么用」省略了「语言模型」

      You: 语言模型是什么
      
      Xorius:
      语言模型是一种用于自然语言处理的技术,它可以对一段文本的语言结构进行建模,从而计算出该文本的概率。语可以用于很多应用,例如语音识别、机器翻译、自然语言生成等。在语音识别中,语言模型可以帮助识别出最有可能的语音转录结果;在机器翻译中,语言模型可以帮助翻译系统选择最合适的翻译结果;在自然语言生成中,语言模型可以帮助生成自然流畅的语言表达。常见的语言模型包括n-gram模型、神经网络语言模型等。
      
      ------------------- 上方为历史对话 -------------------
      
      You: 在语音识别中怎么用
      
      Xorius:
      在语音识别中,语言模型主要用于解决识别歧义的问题。当语音识别系统对一段语音进行转录时,可能会遇到多个候选结果,这些结果在音频信号上看起来很相似,但在语言表达上却有很大差异。这时,语言模型可以帮助系统选择最有可能的结果。
      
      具体来说,语言模型会对每个候选结果进行打分,计算出其在语言表达上的概率。然后,系统会选择得分最高的结果作为最终的转录结果。这样,语言模型可以帮助系统更准确地识别语音,提高识别准确率。
      
      在语音识别中,常用的语言模型包括n-gram模型和神经网络语言模型。n-gram模型是一种基于统计的模型,它通过计算文本中相邻的n个词出现的概率来建模。神经网络语言模型则是一种基于神经网络的模型,它通训练神经网络来预测下一个词的概率。这些模型都可以用于语音识别中的语言模型建模。
      
    • 使用代词提及历史对话中的比词语粒度更大的对象,比如说事件、观点、句子甚至更大段的话

      「最后一段」指代对历史对话回答中结尾部分的「他们成功地激活了这个装置……也激励了更多人类探索宇宙的冒险精神。」这段话

      You: 写一个木卫二上的冒险故事
      
      Xorius:
      在木卫二的表面,有一个被称为“红海”的巨大火山口。这个火山口的深度超过了地球上最深的海洋,被认为是太阳系中最深的地方之一。有一天,一组勇敢的宇航员决定探索这个神秘的地方。
      
      他们穿上了特制的宇航服,搭乘着一艘小型的探测器,开始了他们的冒险之旅。他们在探测器上看到了一些奇怪的能量信号,这些信号似乎来自深处的地下洞穴。
      
      他们决定跟随这些信号,进入了一个巨大的洞穴系统。在洞穴里,他们发现了一些奇怪的生物,这些生物似乎是在这个深处的环境中生存了很长时间。
      
      随着他们深入洞穴,他们发现了一些神秘的符号和图案,这些符号似乎是来自一个古老的文明。他们开始研究这些符号,试图理解这个文明的历史和目的。
      
      在他们的探险中,他们遇到了一些危险,包括地震和洪水。但他们始终坚持不懈,终于到达了洞穴的深处。在那里,他们发现了一个神秘的装置,这个装置似乎是一个能量生成器,可以为整个木卫二提供能源。
      
      他们成功地激活了这个装置,并将它带回了地球。这个发现改变了人类对木卫二的认识,也为人类提供了一种新的能源来源。这个冒险故事成为了人类历史上的一个重要事件,也激励了更多人类探索宇宙的冒险精神。
      
      ------------------- 上方为历史对话 -------------------
      
      You: 把最后一段翻译成英文
      
      Xorius: "They successfully activated the device and brought it back to Earth. This discovery changed humanity's understanding of Europa and provided a new source of energy for humanity. This adventure story became an important event in human history and inspired more people to explore the adventure spirit of the universe."
      
    • 提及历史对话中的比词语粒度更大的对象,比如说事件、观点、句子甚至更大段的话,但以省略的形式

      「压缩一下」省略了宾语,指的是历史对话里的整段回答「在遥远的未来……寻找未知的世界和可能性」

      You: 写一个火星流浪的故事
      
      Xorius:
      在遥远的未来,人类已经开始探索太空,其中包括火星。一名名叫艾米的宇航员在一次任务中不幸与同事失联,最终被遗弃在了火星上。
      
      艾米意识到自己已经被遗弃在了这个荒凉的星球上,没有任何人类的生命迹象。她开始寻找食物和水源,但很快发现火星上的环境非常恶劣,几乎没有任何生命存在的可能。
      
      在接下来的几个月里,艾米不断地寻找食物和水源,同时也努力修复她的通讯设备,希望能够联系到地球上的人类。但是,她的努力都没有任何回应。
      
      在孤独和绝望的日子里,艾米开始思考自己的人生和存在的意义。她开始重新审视自己的价值观和信仰,并逐渐接受了自己可能会永远孤独地生活在这个星球上的现实。
      
      然而,就在艾米准备放弃的时候,她收到了一条来自地球的信号。原来,地球上的科学家们一直在寻找她,并且已经派出了一支救援队伍来到火星上救援她。
      
      在救援队伍的帮助下,艾米最终成功返回地球,并成为了一名备受尊敬的宇航员。她的经历也激励了更多的人类探索太空,寻找未知的世界和可能性。
      
      ------------------- 上方为历史对话 -------------------
      
      You: 压缩一下,用更短的文字
      
      Xorius:
      一名宇航员在火星上被遗弃,孤独地寻找食物和水源,修复通讯设备,思考人生意义。最终收到地球救援信号,成功返回地球,成为备受尊敬的宇航员,激励更多人类探索太空。
      
  2. 历史记忆中的内容可以作为回答当前输入的知识,比如说
    • 历史记忆中提供了当前输入的某些知识的定义或详细说明,回答当前输入时正确使用历史记忆中提供的知识可以避免 AI 胡编乱造
    • 历史记忆中描述了用户(或 AI)的喜好、三观或其他个性化(或者说人格化?)的属性描述,并且当前输入是以这些个性化信息为背景的,那么正确地使用相关的历史记忆可以使得回答时表现出来的个性与历史记忆中的保持一致性、连续性
    • ……
  3. 上述两种情况的混合

在多轮对话的研究里,对历史记忆和当前输入的相关关系应该还会有更全面、更细致的分类,暂时不想去翻相关的研究资料了,等需要做更精细的处理的时候可能会去看看,现在主要是做一个大致的梳理,知道模型在利用聊天历史时存在不同情况即可。

在第 2 个问题的回答的基础上,可以对第 3 个问题做一定的回答

  • 如果当前输入和历史记忆的关系是第 1 种情况(当前输入提及了历史对话中的某些内容),可以认为这种情况下要用到的历史记忆都会是比较近的,也就是 K 不会太大,我个人认为是可以让模型直接处理的
  • 如果当前输入和历史记忆的关系是第 2 种情况(历史记忆中的内容可以作为回答当前输入的知识),那么相关的历史记忆未必是在最近,它完全可以是长期记忆里的内容,比如说我让它推荐书籍的时候希望它可以记起来一年前我说过我喜欢看科幻小说进而推荐一些最新的科幻小说,这种情况下这个 K 可能会非常非常大,个人认为这种情况下使用最近 K 轮历史记忆的做法将会超出模型的计算能力上限
  • 如果当前输入和历史记忆的关系是第 3 种情况(第 1 种情况和第 2 种情况的混合),那么同第 2 种情况

对于第 4 个问题,如果精力允许,或许可以去分析一下一些公开的多轮对话数据集来给出一个相对量化的结果,不过目前我并不想去做这个事情,提出这个问题,其实只是想说明一点 —— 即使在聊天历史对响应当前用户输入有帮助这个假设成立,并且有帮助的信息就在最近 K 轮历史记忆中的时候,也可能不是所有 K 轮历史记忆都是有帮助的。

第 5 个问题则是在第 4 个问题上更进一步思考,如果最近 K 轮历史记忆中有无关内容,那么它们一定是会带来负面影响的,它们可能会摊薄当前输入中 token 和历史记忆中有用内容的 attention 权重,进而导致回可能偏离预期。这种负面影响的大小一定程度上取决于模型本身的能力,很强的模型(比如 GPT-4)可能不会表现得很明显。

综上,使用最近 K 轮历史记忆的做法其实是会有一些问题的,但是这种方法是最容易实现的、最直观可理解的,并且在模型较强的时候效果也不错,加上现在也没有公认的更好的方案,所以大家普遍都这么做。

方法有缺陷是正常的,事实上也不存在哪个方法是完美的、没有任何问题的,但这个方法最大的问题不在于其假设,而在于它没有设计对应的错误应对或者说优化迭代的措施,一旦这个机制工作不正常,就只能期待模型自身的改进或者用户自己能够掌握所谓的 Prompt 编写技巧来再次尝试了。如果能对这些问题心知肚明并抱有适当的预期,那么使用这个方法倒也没什么问题,但如果使用了这个方法出了问题后就只会调侃 AI 弱智,那就没什么意思了。

  •  

我辞职了

4 月 21 日,在地铁上用微信发了消息公司领导,告诉他们我不想干了,感觉心情马上就轻快了起来。到公司后领导找我面谈了几句,不过我只是更坚定地表明了自己要跑路的态度,所以领导也没说什么挽留的话。

4 月 23 日,正式给公司管理层发了辞职信,内容是让 ChatGPT 帮忙写的,懒得自己动这个脑筋,CEO 说节后回北京后想找我聊聊,虽然不知道他想给我画什么饼,不过感谢他额外给我一个星期的摸鱼时间,节前一周我就有一搭没一搭地写交接文档,做做我还感兴趣的一些零碎工作,过得是很惬意的,没想到由于 CEO 来京时间一再往后推,我又继续过了三周这样的生活。

5 月 23 日,CEO 终于来了公司,聊了一个小时,主要是 CEO 在畅谈商业计划和愿景,我看得出来他确实对未来的可能性感到很激动也对自己的判断感到很自信,不过这都和我没关系了。聊完后和 CFO 也聊了下,定了离职日期,随后就提前拿到了离职证明。如果没有什么别的事情,后面我应该就不会再去公司了,虽然还没到离职日期,但离职这个事情就算告一段落了。

在这个点提离职,一个出发点是公司的业务方向要转向一个我完全不感兴趣的领域了,虽然老板宏伟的商业愿景听起来似乎很合理,但我留下无疑只能去做脏活累活,脏活累活我已经做够了。做不喜欢甚至讨厌的事情的经历我已经有过几次,那种痛苦短时间内我不想再经历一次了,就赶在新业务开展前提了离职,也能走得清清爽爽;第二个出发点就是 ChatGPT 和 Stable Diffusion 带来的新一波 AI 浪潮里有大量事情可以做,辞职后不用担心无聊,而且我想做的一些探索性的事情是得不到公司支持的,索性就离开自己玩玩吧。

想辞职或者想不工作的念头很早就有,毕竟我不是那种能享受工作的人。以前还能通过工作提升技艺、开阔眼界,这几年连这些最基本的乐趣也没有了,作为一个高考志愿填计算机只是因为高中经常去网吧玩耍觉得计算机好玩的人,这是不能忍受的。另外一方面,三年下来强烈地察觉到自己感受生活的能力以及清晰表达自己感受的能力的欠缺,这些并不是文艺青年才配拥有的奢侈品,而是一个健康的普通人对抗虚无和绝望的必需品,我希望能在这些问题上有所改进,然而以目前的状况而言,工作只会加重我这些问题。由于并不清楚如何解决真正重要的问题或者说害怕去面对那些问题,最近几年更多是在把工作当作逃避问题、逃避不确定性的一个借口,不管是什么问题,都可以辩解「我知道这些问题很重要但是工作这么忙我也没有办法啊」然后心安理得地继续拖延 —— 这并不可耻,要不要去面对问题只是个人选择而已,我决定去试一试。

循规蹈矩活了三十多年,反思并尝试探索新的道路未必就能有什么好下场,不过我没有什么自我要寻找,也没有想要彻底地和过去的道路决裂,如无意外,我应该还是会靠自己的专业能力去生活。接下来的一小段时间,大概会尝试去过一过「没有计划」的生活,尽力、尽情地做一些自己想做、能做的事情,等待并拥抱变化的自然发生,不再自欺欺人地假装做了计划后未来的不确定性就会收束。

虽然对于辞职后的生活,我暂时是没有什么明确计划的,但会有一些想做的事情,这些事情是会让我觉得开心的、有价值的事情,我应该都会去做,但并不在乎能不能达到完美的结果,也不在意何时达到什么程度,也许会做到一半就被别的东西吸引或者干脆厌倦就彻底放弃,也许会花费超出最初预期的精力,一切皆有可能,还是那句话,我不想做计划。

首先是想要生活地健康、松弛一些,保证足够的睡眠,有一定的运动量,有充足的阅读、娱乐时间,通过散步、外出游玩等方式充分地与外界保持联系,或许也可以不定期拜访一些朋友。从我的经验来看,习惯可以在两周左右内养成,之后就可以不需要太多意志力地自动化了,所以生活作息我是有信心比较快地纠正过来的,问题比较大的可能是松弛感的建立,我目前并没有什么好的想法,只是觉得多玩、多感受、多尝试一些不带具体目标的事情可能会有帮助。

然后是想要在编程和 AI 方面做一些探索和尝试,短期应该会先从语言模型入手做一些事情,再之后就没有什么具体想法了,可能会随缘玩一玩其他东西,比如学个新语言、开发 RSS 周边工具、写 Emacs 插件……不过语言模型应该就够玩很久了,准备先写一个项目来讨论目前语言模型应用要面对的问题及处理方法。毕业十年了,我仍然喜欢我的专业,仍然被铁路模型技术俱乐部、家酿计算机俱乐部等行业先驱们的精神和故事所激励,我最有创造力的一些工作(虽然也算不上多有创造力)都是在无人管束时以玩耍的心态所做出来的,我想继续去玩,在玩耍中创造,在创造中玩耍,而不是像一台机器一样被输入一些无聊的商业目标来去产出一堆垃圾。

至于打算休息到什么时候再回去工作,我只能说没有计划,没有计划什么时候要回去工作,也没有计划一直不工作,就随缘吧。

  •  

LLM Prompt Engineering 实践:原型

本文是《LLM Prompt Engineering 实践》系列的第二篇文章,系列文章如下:

  1. LLM Prompt Engineering 实践:序 · ZMonster's Blog
  2. LLM Prompt Engineering 实践:原型 · ZMonster's Blog
  3. LLM Prompt Engineering 实践:记忆(1) · ZMonster's Blog

在 ChatGPT 的帮助下,给项目起了 xorius 这么一个名字,这个单词实际上并不存在,所以含义完全是由我来定义的,不过作为一个随时可能会鸽掉的项目,就先不说我给它赋予的意义了,以后做大做强再来说会比较合适一点。

起好名字后,我准备先实现一个最最简单的原型出来,并在过程中对一些问题进行讨论。后文所有内容都是我的开发日志的整理汇总,之后的文章基本上也会采用这个模式。

为了实现原型,有两个选择,一是直接去调用 OpenAI 的官方接口或 SDK,二是选择 langchain 之类的第三方封装,出于方便考虑,我选择了 langchain。

首先,无论是直接调用官方接口、SDK,还是使用 langchain,国内都是需要通过代理才能访问的:

import openai
openai.proxy = 'http://localhost:8080'

设置好代理后,用 langchain 就可以简单地调用 OpenAI 的接口来获得回答,比如说这样:

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage

user_message = HumanMessage(content='将这句话翻译成中文: “to be or not to be”')

# 安全考虑这里把真实 API KEY 隐藏了,后文不再强调
llm = ChatOpenAI(temperature=0, openai_api_key='sk-xxxxxxxxxxxxxxxx')
answer = llm([user_message])
print(answer.content)

上面的代码没有指定要使用的模型,默认会使用 gpt-3.5-turbo,运行后得到了这样的结果

生存还是毁灭

当然,这段代码不是对话的模式,没有考虑聊天历史,如果要做聊天的话,需要维护一个聊天历史

from langchain.memory import ChatMessageHistory

memory = ChatMessageHistory()

之后每次的用户输入和得到的回答都可以按顺序添加到这个 memory 里面,比如说前面的 user_message 和 answer,都可以加到里面去

memory.add_user_message(user_message.content)
memory.add_ai_message(answer.content)

通过 memory.messages 可以得到历史记录

print(memory.messages)

结果

[HumanMessage(content='将这句话翻译成中文: “to be or not to be”', additional_kwargs={}, example=False),
 AIMessage(content='"生存还是毁灭"', additional_kwargs={}, example=False)]

然后在下一轮对话时使用它

user_message = HumanMessage(content='再翻译成日语')
answer = llm(memory.messages + [user_message])
print('Answer:', answer.content)

memory.add_user_message(user_message.content)
memory.add_ai_message(answer.content)
print('History')
print(memory.messages)

结果

Answer: "生きるか死ぬか"
History:
[HumanMessage(content='将这句话翻译成中文: “to be or not to be”', additional_kwargs={}, example=False),
 AIMessage(content='"生存还是毁灭"', additional_kwargs={}, example=False),
 HumanMessage(content='再翻译成日语', additional_kwargs={}, example=False),
 AIMessage(content='"生きるか死ぬか"', additional_kwargs={}, example=False)]

综合上面的代码,只要写一个循环,就能做持续的对话了

from langchain.chat_models import ChatOpenAI
from langchain.memory import ChatMessageHistory

memory = ChatMessageHistory()
llm = ChatOpenAI(temperature=0, openai_api_key='sk-xxxxxxxxxxxxxxxx')
while True:
    user_message = input('You: ').strip()
    if not user_message:
        continue

    if user_message.lower() in ('quit', 'exit'):
        break

    memory.add_user_message(user_message)
    answer = llm(memory.messages)
    print('BOT:', answer.content)
    memory.add_ai_message(answer.content)

不过上面这段代码是有问题的,因为实质上我是每次都把历史消息和当前输入拼接起来输入给 OpenAI 的接口,而 OpenAI 的接口对处理的文本总长度是有限制的,gpt-3.5-turbo 最大长度是 4096 个 token,gpt-4 最大支持 32768 个 token(这个 token 是语言模型里对文本切分后的最小单元,先不用细究),像上面这样一直把 user_message 和 answer 往 memory 里面加,那么只要对话轮次够多一定会超过这个限制的,超过了就会报错,所以必须要限制一下。需要注意的是,这个最大文本长度,是输入和输出加在一起算的,比如说如果用 gpt-3.5-turbo 然后输入就已经 4000 token 了,那么只能输出最长 96 个 token 的结果。

综上,为了保证不超出接口长度限制,需要只取 memory.messages 中的一部分,假设取的 memory.messages 中的这部分的总 token 数 为 L1,我们还要保证输出结果的总 token 数能达到 L2,那么必须保证 L1 + L2 < 4096,L2 可以在初始化 ChatOpenAI 的时候通过参数 max_tokens 来设置,默认没设置就是无限,那为了更好地计算 L1,需要显式设置一下它,比如说设置为 1024:

max_tokens = 1024
llm = ChatOpenAI(
    temperature=0,
    openai_api_key='sk-xxxxxxxxxxxxxxxx',
    max_tokens=max_tokens
)

在 L2=1024 的情况下,可以得到 L1 < 4096 - 1024 = 3072。接下来的问题就是按照这个最大 token 数来对 memory.messages 进行选择了,要做这个的话,首先要能计算出给定文本的 token 数量,语言模型里的 token 不完全等于字词,OpenAI 提供了一个在线工具展示把文本变成 token 的效果:

  • 英文基本上是一个词一个 token,有时会把一个词拆成几个 token,比如下面这个例子里 Tannhäuser 这个词就被拆成了 T/ann/h/ä/user 五个 token,但不管怎么说按字数算,英文最后的 token 数是小于字数的,下面这个例子的文本总字数是 230,token 数才 57

    gpt3_tokens_example_english.png

  • 中文的话一个字就可能拆成多个 token,这些 token 大都是不可理解的,所以总体来说 token 数会大于字数,下面这个例子里的文本字数是 94,token 数是 191

    gpt3_tokens_example_chinese.png

    注意,上面中文的例子是 GPT3 的编码器的效果,换成 gpt-3.5-turbo 的编码器后,中文的 token 数下降到了 124。

OpenAI 提供了 tiktoken 这个 python 库来做文本到 token 的编码转换

from tiktoken.model import encoding_for_model

encoder = encoding_for_model('gpt-3.5-turbo')

由于 gpt-3.5-turbo 模型使用的 Chat Completion 接口的输入不是普通的文本格式,计算输入的 token 数不能简单把用户输入和接口响应结果文本的 token 数加起来,OpenAI 自己给出了计算方法:

import tiktoken

def num_tokens_from_messages(messages, model="gpt-3.5-turbo-0301"):
    """Returns the number of tokens used by a list of messages."""
    try:
        encoding = tiktoken.encoding_for_model(model)
    except KeyError:
        encoding = tiktoken.get_encoding("cl100k_base")

    if model == "gpt-3.5-turbo-0301":  # note: future models may deviate from this
        num_tokens = 0
        for message in messages:
            num_tokens += 4  # every message follows <im_start>{role/name}\n{content}<im_end>\n
            for key, value in message.items():
                num_tokens += len(encoding.encode(value))
                if key == "name":  # if there's a name, the role is omitted
                    num_tokens += -1  # role is always required and always 1 token

        return num_tokens
    else:
        raise NotImplementedError(
            f"num_tokens_from_messages() is not presently implemented for model {model}.\n"
            "See https://github.com/openai/openai-python/blob/main/chatml.md "
            "for information on how messages are converted to tokens."
        )

注:为了方便计算单条消息的长度,我对 num_tokens_from_messages 做了一定的修改,删掉了 num_tokens += 2 这一行。

注2:经测试,OpenAI 提供的这个函数,计算出来的 token 数比实际的少 1 个。

基于这个函数可以来实现聊天历史的选择了,这里只简单实现一个取最近聊天历史的

from langchain.schema import AIMessage, HumanMessage

def select_messages(messages, max_total_tokens=4096, max_output_tokens=1024):
    tokens_num = 0
    selected = []
    for message in messages[::-1]:
        role = 'system'
        if isinstance(message, AIMessage):
            role = 'assistant'
        elif isinstance(message, HumanMessage):
            role = 'user'

        cur_token_num = num_tokens_from_messages([{'role': role, 'content': message.content}])
        if tokens_num + cur_token_num + 2 + max_output_tokens > max_total_tokens:
            break

        selected.append(message)
        tokens_num += cur_token_num

    selected = selected[::-1]
    if isinstance(selected[0], AIMessage): # 确保第一条是用户消息
        selected = selected[1:]

    if not selected:            # 假设 messages 里最后一条是当前用户输入
        selected = message[-1]

    return selected

那么前面的持续对话代码可以改造成这个样子了

from langchain.chat_models import ChatOpenAI
from langchain.memory import ChatMessageHistory

memory = ChatMessageHistory()

max_output_tokens, max_total_tokens = 1024, 4096
llm = ChatOpenAI(
    temperature=0,
    openai_api_key='sk-xxxxxxxxxxxxxxxx',
    max_tokens=max_output_tokens,
)
while True:
    user_message = input('You: ').strip()
    if not user_message:
        continue

    if user_message.lower() in ('quit', 'exit'):
        break

    memory.add_user_message(user_message)
    messages = select_messages(
        memory.messages,
        max_total_tokens=max_total_tokens,
        max_output_tokens=max_output_tokens
    )
    print(f"selected messages: {messages}")
    answer = llm(messages)
    print('BOT:', answer.content)
    memory.add_ai_message(answer.content)

把 max_output_tokens 设置得更大一些会选择更少的历史,比如说

  • max_output_tokens=200, max_total_tokens=4096 时,输入的最大 token 数可以到 3896,所以可以选到尽可能多的历史消息

    You: 将这句话翻译成中文: “to be or not to be”
    selected messages: [HumanMessage(content='将这句话翻译成中文: “to be or not to be”', additional_kwargs={}, example=False)]
    BOT: "生存还是毁灭"
    You: 再翻译成日语
    selected messages: [HumanMessage(content='将这句话翻译成中文: “to be or not to be”', additional_kwargs={}, example=False), AIMessage(content='"生存还是毁灭"', additional_kwargs={}, example=False), HumanMessage(content='再翻译成日语', additional_kwargs={}, example=False)]
    BOT: "生きるか死ぬか"
    
  • max_output_tokens=4050, max_total_tokens=4096,输入的最大 token 数只有 46,第二轮的时候没法使用前一轮的历史消息

    You: 将这句话翻译成中文: “to be or not to be”
    selected messages: [HumanMessage(content='将这句话翻译成中文: “to be or not to be”', additional_kwargs={}, example=False)]
    BOT: "生存还是毁灭"
    You: 再翻译成日语
    selected messages: [HumanMessage(content='再翻译成日语', additional_kwargs={}, example=False)]
    BOT: もう一度日本語に翻訳してください。
    

实现了聊天历史的选择后,一个最基本的原型其实就好了,进一步地,还可以为这个对话机器人做一些属性设定,比如说叫什么名字、什么性格之类的,具体的做法就是在每次调用语言模型时,除了聊天历史和当前输入,再额外输入一个描述这个机器人属性的 prompt,在 OpenAI 的接口里要求这条 prompt 的 role 设置为 system,用 langchain 的话直接用 SystemMessage 就好,我这里简单把这个 SystemMessage 放在输入的最前面,把代码改造成了这个样子:

from langchain.chat_models import ChatOpenAI
from langchain.memory import ChatMessageHistory
from langchain.schema import SystemMessage

memory = ChatMessageHistory()
system_message = SystemMessage(
    content=(
        "You are an AI assistant. Your name is xorius. "
        "You can discuss any ideas and topics with your users, "
        "and you will help your users solve their problems as much as you can."
    ),
)
max_total_tokens = 4096 - num_tokens_from_messages([{'role': 'system', 'content': system_message.content}])
max_output_tokens = 1024
llm = ChatOpenAI(
    temperature=0,
    openai_api_key='sk-xxxxxxxxxxxxxxxx',
    max_tokens=max_output_tokens,
)
while True:
    user_message = input('You: ').strip()
    if not user_message:
        continue

    if user_message.lower() in ('quit', 'exit'):
        break

    memory.add_user_message(user_message)
    messages = select_messages(
        memory.messages,
        max_total_tokens=max_total_tokens,
        max_output_tokens=max_output_tokens
    )
    print(f"selected messages: {messages}")
    answer = llm([system_message] + messages)
    print('BOT:', answer.content)
    memory.add_ai_message(answer.content)

这样让它介绍自己就会按照设定来回答了

You: 介绍一下你自己
selected messages: [HumanMessage(content='介绍一下你自己', additional_kwargs={}, example=False)]
BOT: 你好,我是Xorius,一名人工智能助手。我可以与您讨论各种话题,帮助您解决问题。我可以提供有关各种主题的信息,例如科技、文化、历史、健康、旅游等等。我还可以执行各种任务,例如设置提醒、发送电子邮件、搜索信息等等。请告诉我您需要什么帮助,我会尽力为您提供支持。

如果不加这个 system_message,同样的输入得到的回答里它会强调自己由 OpenAI 开发,如下所示:

You: 介绍一下你自己
selected messages: [HumanMessage(content='介绍一下你自己', additional_kwargs={}, example=False)]
BOT: 我是一名AI语言模型,由OpenAI开发。我可以进行自然语言处理和生成,帮助用户回答问题、翻译、写作等。我没有实体,只存在于计算机中,但我可以通过文字和语音与人类进行交互。我不会感到疲倦或犯错,但我也没有情感和意识。我只是一个程序,但我希望能够为人类提供帮助和便利。

最后,我将上述代码做一些调整后实现成了项目里的一个命令行工具,代码见 https://github.com/monsternlp/xorius ,也发布到了 pypi,执行 pip install xorius 即可安装,安装后即可在命令行执行 xorius-cli 来进入对话。

xorius_cli.png

命令行参数说明如下:

  • --api-key: 设置 OpenAI 的 API 密钥
  • --temperature: 设置温度参数,用于控制生成结果时的随性,0 的话不随机每次都生成概率最大的结果,默认 0.7
  • --max-tokens: 设置生成结果允许的最大 token 数,默认 512
  • --proxy: 设置 http 代理,主要针对国内网络环境

原型是实现了,但是在这个原型上,能看到一些直接的问题

  1. ChatMessageHistory 是基于内存的历史消息记录方法,一旦退出历史对话消息将全部丢失
  2. 当讨论的话题更早之前聊过时,选择最近历史消息的做法无法利用之前的讨论
  3. 固定设置输出最大 token 数量的做法为了照顾长输出的情况,会导致短输出情况下无法利用更多的历史消息
  4. 一个全局设置的温度参数会影响机器人处理不同任务的表现,比如说像翻译、分类、事实性问答这些任务并不需要随机性,而写作、创意生成则有一定的随机性会更好一些
  5. 在当前这种模式下,将机器人属性设置放在最开始的做法无法保证设定的一致性和连续性,用户总是能通过有意构造的输入来突破这种设置

    xorius_cli_2.png

这些问题将会在之后的文章中做进一步的讨论。

  •  

LLM Prompt Engineering 实践:序

本文是《LLM Prompt Engineering 实践》系列的第一篇文章,系列文章如下:

  1. LLM Prompt Engineering 实践:序 · ZMonster's Blog
  2. LLM Prompt Engineering 实践:原型 · ZMonster's Blog
  3. LLM Prompt Engineering 实践:记忆(1) · ZMonster's Blog

ChatGPT 刚发布不久,我就把它接进了飞书供公司同事使用,回过头去看当时的聊天记录,那个时候它还是会经常拒绝回答,虽然相比过去的对话机器人有了非常大的提高,但还是显得有点呆笨的样子,对于它到底能做什么我并不是特别了解,再加上公司裁员、北京疫情(12月上半个月是北京疫情的高峰期)的因素,我就没花太多精力在这方面。春节回来后,可能是因为社会放开了以及经过两个月的发酵,非常明显地感觉到讨论热度在上升,我也开始去做更详细的了解 —— 一方面是持续地去使用 ChatGPT 以及了解其他人怎么使用,另外一方面是开始看相关的论文了解背后的技术变迁。ChatGPT 在模型上除了 RLHF 外我是大致熟悉的,但是近几年困在工作和情绪里没怎么去关注学术进展了,所以二月、三月主要是在补课,顺着几篇比较高质量的综述论文把过去几年的一些工作和思路看了下,慢慢地就对现在大语言模型面临的问题以及可能的发展方向有了一些感觉。

毫无疑问,以 ChatGPT 为代表的大语言模型是很有价值的。从专业角度来看,如果不考虑成本的话,原来的大部分简单 NLP 任务都已经没有必要再做,有人因此担心 NLP 工程师要失业,但我觉得对 NLP 领域整体上来说是好事情,领域和行业的能力下限因此得到了提高,原来我们认为很复杂的、只能花昂贵代价做小规模应用的事情现在也可以得到普及(比如说基于文档的问答),我们也终于可以有更多的精力去讨论自然语言里更深层的原理和问题了。从用户角度看,ChatGPT 无疑也有非常大的潜能,回答知识性问题、辅助写作、翻译、总结、处理数据、写代码、绘图……似乎我们能想到的通过语言来做的事情,它都能做并且做得还不错,作为工具来说它已经大大提高了使用者处理事情的效率,并且还在被用户不断地挖掘出新的用法和能力,不管它的长期影响是好是坏,我想没有人会否认它很能干这个事实。

在受益于 ChatGPT 的同时,很多人也因此非常焦虑,我多少也有一点,这种焦虑的根源主要在于 ChatGPT 后续影响的不确定性。目前观察到的应对这种焦虑的方式主要有几种:

  1. 通过追踪新的资讯、动态来证明自己能跟上变化,但往往因为人的精力有限而使自己非常疲惫并造成进一步的焦虑;
  2. 通过预测(或看别人预测)大语言模型普及背景下的行业和社会未来以减轻焦虑,但是真的了解专业知识又具有宏观视野的人还是比较少,大部分非专业人士之间的相关讨论往往落入玄谈范畴,或者索性变成个人世界观的输出;
  3. 通过重度使用、开发相关工具或应用、推动相关社会治理规范来参与新生态的建设,但是由于目前尚处于新生态早期,工具和方法论都非常不完善,想象力也还是不够。

作为一个工程师,我不认为自己具备预测未来的宏观视野,但我想我还是可以参与到新生态建设里去的。以 ChatGPT 为代表的大语言模型效果确实非常强,但它也还是有非常多问题的,和所有机器学习模型一样,这些问题在之后有可能会慢慢地得到缓解,但绝对不会消失,如果要将大语言模型作为一个基础设施来构建应用,那么这些问题必然要有相应的应对机制,我相信新的生态会在这个基础上生长出来。这些问题已经在大量的论文中被提出讨论了,我自己也有维护相应的笔记来追踪这些问题的研究进展,本来是想以各个问题作为出发点来写一些文章做一些讨论的,不过不少问题即使在研究上也还处在探索讨论的阶段,只是单纯整理出来作为科普觉得会有点枯燥,于是决定写一个项目,通过代码的方式来展示我对这些问题的应对方法的思考和尝试。

对大语言模型,我们目前已经知道的问题有:

  1. 模型偏差问题: 模型会表现出对特定领域的倾向性而不是在各种问题上完全中立客观,在有上下文时模型会表现出近期偏差和标签偏差;
  2. 评估问题: 对输入和输出结果,我们缺乏足够有效的评估手段;
  3. 知识幻觉问题: 有时候语言模型会输出一些与给定上下文或客观事实不符的内容,该问题是由训练数据噪声、表示学习的不充分、解码方法、记忆机制缺失等众多复杂因素导致的;
  4. 记忆机制的缺失: 语言模型本身未设计任何记忆机制,以 ChatGPT 为代表的产品仅能将需要记忆的内容同其他内容一起输入给语言模型,需要模型自己对区分输入中哪部分是记忆、哪部分是指令及其他内容,也因此无法像人一样维护长期记忆;
  5. 多轮对话状态管理: 在对话模式下,对话场景的开始、跳出、返回、结束,目前全依靠语言模型自身进行辨别但做得并不是特别好;
  6. 复杂结构数据的处理: 对体量较大但内部结构简单的数据目前可以切片处理,但对内部结构复杂的数据(如完整的项目源代码)目前要处理还是比较麻烦;
  7. 复杂操作的执行: 人类往往对自己给出的指令的复杂性不太敏感,有时候认为理所当然的简单要求实际上可能需要分解成复杂的步骤才能完成,分解后的步骤之间也可能存在复杂的关系。

我准备写的这个项目,计划由易而难地推进,最开始应该就是实现一个简单的机器人,设定一个初始 Prompt,每次对话时带上之前的聊天历史,然后逐步实现记忆机制、加上对知识幻觉的处理、整合阅读网页和文档的能力、整合图像和音频理解能力、加上任务分解和执行能力、实现人设的一致性和连续性、模拟出自我意识、统治人类……这些都不难,多多少少也在很多其他项目中实现过了,大概率不会有特别突破性的东西,甚至有可能鸽掉……总之,我现在要去解决最困难的一个问题了,那就是,这个项目该叫什么名字?

  •  

2022.07.31 百花山

早上五点半起来了,地铁去了汇合点,简单吃了早饭后就出发了。天气多云,本来还担心今天看不到什么云,路上看到,开车窗拍了下。

IMG_7945.webp

到达山脚后,惯例和「禁止攀爬野山」的警示牌合影——左二是我,不过打码了应该相熟的人才能看出来。

IMG_8078.webp

到山里后天空情况不错,因为水汽足又有不少的云,我非常满意,不过看山顶似乎被云层笼罩了,有点担心。

IMG_7953.webp

蕙花(by形色)

IMG_7954.webp

蓝盆花(by 形色)

IMG_7957.webp

​棉花糖!

IMG_7959.webp

被云层笼罩的山顶

IMG_7964.webp

糖芥(by 形色),花语是平凡中的甜蜜快乐,真好!

IMG_7966.webp

败酱(by 形色)

IMG_7970.webp

不知道叫什么,形色识别出来好几种很像的。

IMG_7972.webp

弱鸡如我只能在队尾偷拍

IMG_7975.webp

沙参,我吃它食物中毒过哈哈哈哈

IMG_7978.webp

优雅

IMG_7980.webp

丰盛的午饭,背包里不小一部分重量都是食物

IMG_7985.webp

云雾缭绕

IMG_7987.webp

天然加湿器

IMG_7988.webp

柳兰(by 形色)

IMG_7992.webp

雾气非常重

IMG_8002.webp

远眺,但什么也看不见

IMG_8012.webp

老鹤草(by 形色)

IMG_8022.webp

紫菀,或者狗娃花,我分不出来

IMG_8023.webp

其他fafa

IMG_8025.webp

IMG_8026.webp

IMG_8033.webp

雾气偶尔散去,云彩很漂亮,我能看上一整天

IMG_8039.webp

IMG_8047.webp

IMG_8051.webp

IMG_8054.webp

IMG_8057.webp

到达山顶草甸后合了个影,iWatch 真好用,远程控制手机拍照

IMG_8080.webp

山顶草甸开满了各式细碎的小花

IMG_8065.webp

IMG_8066.webp

IMG_8073.webp

在凉亭吃瓜,挑衅嘲讽边上没瓜吃的小孩

IMG_8079.webp

​八点大家才下到山脚,感觉自己变强了,上次爬下山后腿完全没力气了,这次还有很多余力。租了个车回出发点停车场,师傅在弯弯绕绕的山道上飚到100,把我们吓得够呛。两个晚上没怎么睡好,回程的时候我特别困了,十点到门头沟吃小烧烤,我就吃了串烤烤豇豆、烤青椒,勉强吃了串肉。回到家已经过零点了。

  •  

博客新增闲言碎语栏目实现类微博功能

从 2013 年建立这个博客后,这里一直是我主要甚至几乎可以说唯一的表达渠道,虽然我也有公众号、微博、豆瓣、Twitter 等各个平台的帐号,但我几乎不怎么在这些平台上表达,朋友圈也用得非常少。有的人很喜欢有反馈的表达或者说其表达的目的就是为了让别人看到、听到,我呢,只是把这里当作自己的一个小花园,我收拾它、布置它,我在这里自得其乐,渐渐地它也变成我的一部分,至于是不是有人来访问是不是热闹都是次要的,如果有人看到后觉得我这好玩我当然也表示欢迎,仅此而已。公众号、微博、豆瓣、Twitter 这些平台,它们更像是家外面的咖啡馆、茶馆、广场,拥挤得不行,大家都在说话,我在这些地方不自在,也不想说话,更多是当个打听消息的地方。

今年以来我的生活状况有点乱,所以博客很久没更新了,二月之后有一篇闲言碎语只发在了公众号没发到博客,有网友也关注了我公众号,问我说是不在博客更新了。首先呢,就像开头说的那样,博客是我主要的表达渠道,我会好好维护的,更新可能会少但一定不会停掉的;其次,发了一年左右的被我叫做“闲言碎语”的个人日记汇总,和我对这个博客的规划是有点冲突的,博客里更想写一些相对系统的、篇幅长一点的内容,所以一直在想把这部分内容以类似微博/Twitter 的形式来呈现,并且自动同步到其他平台上,今天算是完成了这个修改,方法也很简单,见相关 commit

新栏目地址是 https://www.zmonster.me/microblog.html ,样式非常简陋,多条内容之间用一条分隔线分开,每条内容有一个标题,点击后可以前往详情页写或者看评论 —— 本来想做成在一个页面展示所有评论的,但是 disqus 好像不支持,所以先这样吧。

20220514_162946.png

关注我的朋友如果不嫌弃我的碎碎念的话,可以订阅这个栏目的 RSS,或者关注我的 twitter ,至于之前那种一周或者好几周汇总成一篇的方式,容我考虑下是否还要保留。

  •  

闲言碎语(2022/01/24-2022/02/06)

2022-01-24 周一

22:00 返家

弟弟顺利下了车,没有隔离,就登记了下,八点左右到了家。

22:00 电话

ZYC打电话过来,问我回没回家,三年没联系了吧,不知道联系我干嘛,能还我钱吗,或者还想找我借钱?

2022-01-25 周二

22:25 XX村之星

我在洗碗,一个邻居过来打招呼,瞎聊了几句,最后他说了一句「你可是XX村之星啊」。大学、工作后,我和村里的同龄人打交道都很少了,回家少回来也是宅着,所以我其实不太清楚村里人是怎么看我的,对于这种夸赞,我也不知道该以什么方式去回应,只好打了个哈哈。

22:29 魔术

弟弟喜欢魔术,这半年多自己练习了不少扑克魔术,就让他表演了几个,还挺像模像样的哈哈哈,不错不错。

2022-01-26 周三

16:00 搞卫生

今天家里搞卫生,爸妈协作在打扫厨房,清洗橱柜,擦被烟熏得发黑的墙壁和天花板,擦大门什么的。搞完洗了个澡,清爽。下午出太阳了,暖和、敞亮。

20:00 医药

医药下跌很剧烈,忽悠弟弟买了 100 块全指医药联接基金。

2022-01-28 周五

14:00 拜访

中午ZCH和他爸、姐夫来拜访,送了水果、酒、牛奶,特别隆重。接待有点尴尬,一来是对方太隆重了,二来最后ZCH他爸和姐夫去下坊了,为了表示礼节,我们就把ZCH留下来吃午饭了,然后我陪着在那尬聊了半天,吃完饭快一点了,我又约了上线,所以ZCH他爸过来接我就直接把他们送走了。年后有时间去拜访一次吧。

送ZCH出去后,前面一位邻居看到我了,过去说了两句话,觉得她也老了很多了,岁月的痕迹。

20:00 新大楼

看老徐转发的朋友圈,说我校计院开始建自己的专属大楼了,非常不错。

20:30 网友

一位网友在我的博客下好是评论了一大段,我感觉他是真的想和我交朋友,哈哈哈。

21:00 《最爱》

泡脚的时候音乐频道听到这首歌,粤语的,觉得很好听。我猜应该是老歌,上网易云搜索了下原来是周慧敏的,电视上真不厚道,谁作词谁作曲谁原唱一概没提,就标了个演唱者的名字。

2022-01-29 周六

给我爸买的鞋子他取回来了,看得出来我爸还是喜欢、高兴的。

中午表弟、弟媳带着孩子来了,家里做了好些菜。吃完聊天,我让弟弟表演了几个魔术,把氛围炒热了一点点。然后前屋的邻居说杀了猪,做了猪血,叫我们过去吃,我爸不能吃,我妈要做事,于是我就去了。他家叫来了特别多人,非常热闹。我吃了一小碗,和桌上其他邻居聊了聊闲话,北京冷不冷啊、有没有谈好女朋友啊、在哪个公司上班啊之类的。见见这些村里的邻居也挺好的。虽然未必所有人都会对我抱以善意,但我确实也希望和这些人恢复最基本的沟通吧,毕竟,我小时候和这些人在一起生活长大,我的一部分是有受到他们影响的。

晚饭后,堂哥带着嫂子下来了,我趁机了解了下堂哥的工作和生意情况,生意方面是开了一个定制衣服的小店我嫂子在打理,想做线上但现在还没空去做,工作方面我哥原来工作的厂子被大厂兼并了,但还会让我哥去做,说是填补了对方的业务/技术空白啥的,但是得去漳州那边上班了。

和爸妈聊天,得知我堂哥的一个姐姐不是亲生的,亲生父母是云石山人,可能是被遗弃或者被卖掉的,说早年间和亲生父母没来往这后面开始有一些了,我之前就一直疑惑为什么我喊姐姐但是又嫁在了我们村。

2022-01-30 周日

中午去一个要好的邻居家吃饺子,见到了一起长大上小学中学但早已嫁人的ZHH,聊了一些天,真的是好久不见了,然后聊天才知道邻居的儿媳是 87 年人,但是皮肤好人也漂亮看着像是很年轻的人呢,可惜嫁的人很混蛋,不知道以后会怎么样。

下午和LYC聊了一些知识管理方面的想法,开心。

晚上去伯母家吃饭,姐夫也来了但是姐姐没来,我先拍了一张饭包肉丸的照片给WJ和LWL看,馋一下她们哈哈哈哈。

看微信群里,LY那边紧锣密鼓地在张罗年夜饭了,我蛮想和他们一起过的。

2022-01-31 周一

早上起床吃完饭后先去敬神,按顺序分别是祠堂祖公堂两支大香烛五支线香、旁边土地一支小香烛一支线香、天井一支小香烛一支线香、祠堂门框一支小香烛一支线香、祠堂门口空地上两支大香烛五支线香、我家门口空地上两支大香烛五支线香、我家门口一支小香烛一支线香、我家祖公堂上两支大香烛五支线香,最后灶上两支大香烛五支线香,这个顺序大致意味着请神到家这个过程。敬神过程中遇到了几个长辈。

敬神完毕后,和弟弟一起把前门墙壁下堆着柴搬到了杂物间,搬完后我爸拿水管冲洗墙壁和门口的空地、清理门口的水沟等等。我妈炖好鸡鸭后我和弟弟喝了点肉汤,然后我妈开始做饭包肉丸,我帮着拿点东西还切了菠菜,开蒸后,我和弟弟就去伯母家喊大家来吃,结果他们先做了好多菜,喊我和弟弟在那吃,我喝了点汤吃了点菜,然后等了一会催促大家下到我家去,由于大家都吃饱了,所以只是象征性地吃了点饭包肉丸,然后就进入了聊天打闹环节。我哥领着两个侄女和外甥女到我们后院看鸡鸭,然后摘了菜地里一些黄掉的菜叶子、杂草什么的扔给鸡鸭吃,玩得不亦乐乎。

下午贴完春联后,三四点我和弟弟先后洗澡换了衣服,然后我妈做了年夜饭,再次把伯母一家喊下来一起吃,不过姐姐和姐夫年夜饭得在姐夫家吃所以下午已经走了,所以桌上就是我家四口人加上伯母一家五口人,也算是热闹了。吃完再聊了聊天伯母一家就回自家去了。然后我和弟弟去点岁火,流程和早上敬神一样,但不用提着祭品了,只用香烛和线香。点岁火遇到了一些同辈的邻居,回来路上遇到大眼带着他的小儿子,大的说有十一岁了哈哈哈。点完岁火到家,村里到处开始放烟花,特别特别吵闹,好看或许是好看,但真的是太吵了,两边隔壁家、屋前屋后邻居家都在放,距离不过十来米,震耳欲聋 —— 我们家嫌吵闹是从来不放烟花的,敬神和点岁火按规矩打串爆竹就好了。烟花这个东西,大概没人真的去欣赏它转瞬即逝的美,大家都在放无非是热闹、跟风、攀比,挺无聊的。

晚上开始下雨了,我弟在春晚沈腾小品的背景下又表演了几个扑克魔术,然后洗脸泡脚,上床看魂圈拜年纪,和朋友聊天。

2022-02-02 周三

今天依然在下雨,早上起来很冷,看着外面被我妈叫做「大泡子点」的雨,有点畏惧出门,但又很想见见WJ,就想着下雨的话该怎么去。不过到了下午雨小了,天气真是给面子。快两点的时候,LBL带着WJ从云石山过来,我走了一小段路到桥头,又遇到一个同学,后来加联系方式他发了自己的姓名我才想起来是LJ并且和以前记忆里的脸对上。等我走出路边LBL的车已经在等着了,我上了副驾,看到LBL和WJ的脸,觉得一点也不生份,就是老朋友相见的亲切感觉。WJ说话比我印象中要爽朗大气了,不知道是不是我的错觉。

先去了QL家坐了一会,WJ的女儿和儿子马上就玩上了,一点都没有因为环境陌生就拘谨。QL的爸爸妈妈张罗零食酒水,我们就边聊边嗑瓜子喝水,聊了什么来着我都不太记得了,总之气氛是愉快、轻松的。没见到QL的哥哥姐姐,只见到他嫂子和三个侄子,三个侄子分别是三年级四年级五年级,感觉当年这位嫂子挺辛苦的……

在QL家坐了一会后就上WJ家了。WJ家热热闹闹地来了许多客,就把靠门口的一张桌子收拾了下我们几个坐上开始聊天,还特别热情地上了很多吃的,我记得的就有菜头生、豆腐拌辣椒(没见过的做法)、酸菜、米粿(炒的但是放上了鸭肉,也是没见过的做法)、饭包肉丸,都挺好吃的,我吃个不停。后来四点多快五点去走亲戚的JS也骑摩托过来了,我们聊了各自的情况,还共同回忆各种初中的同学、老师及相关的事情,感觉WJ是和初中的人事关联最紧密的,QL甚至连同村距离不到 50 米的初中同学都记不得了,我也差不多,所以多数时候是WJ在帮忙补充,比如说初三我们一个班读过啦、JQ老师去统战部还是统战局了啊、FQ老师去光大银行了呀(还有啥想不起来了)……

快六点我们就散了,QL走路回家,我蹭JS的车回去。JS车开到清溪,下来买了一大盒 18 块的摔炮和两把手持烟花给孩子玩,然后去对面超市买家里要用的白醋。我本来是在等着的,他买完东西回来说看到ZYH了,我就过去打了个招呼简单聊了两句,加上微信方便以后联系。JS骑车带着我从清溪走,送我到了家里,我喊他下来喝了点热水,知道他家里催着他回去吃饭所以就没怎么留他。

我回到家后家里已经吃完饭了,不过我在QL和WJ家都吃了很多东西所以也不再需要吃什么,简单玩了玩就洗漱了。和LWL也聊了聊分享了下我今天的经历,聊着聊着开始聊小学同学,稍微共同回忆了下,我记得以前DHT说过LTT也在一中并且表达过我欺负过她的意思,我和LWL说这个,结果LWL告诉我说LTT初中后就没上学了,所以是我记错了还是怎么样?LWL还很自信说小学五年级每个同学坐哪个位置都记得清楚,确实能记得我坐第三组第三排,但我问我前后排是谁她就说不出来了,然后迅速认怂说确实记不起来了,笑死我了。

2022-02-04 周五

(略好多字)真是难过的一天,晚上拖着LWL和我聊天到零点,好歹是好受了一点。

2022-02-05 周六

可能两点才睡吧,五点多醒了,想再睡,脑子里翻来覆去的还是那些事情。

本来定了今天去外婆家和ZCH家以及见CH他们,然后我决定都不去了,哪都不想去了。我妈本来也说不想去,但后来因为弟弟说想去,就还是一起去了,吃完饭收拾好各种东西我爸骑车把他们两送到了圩上搭公交车。

这之后我持续地处于大脑迟钝的状态,什么都不想做,只想刷手机看小说新闻来分散注意力。

下午五点多吧,伯母那边喊上去吃饭,我穿了鞋上去,坐了整整两桌的人,我都不认识,就坐在姐夫边上吃了碗饭喝了点汤,就回家了。我爸本来让我说他在打麻将不去吃,后来伯母下来喊,还是上去吃了点。

我给锅上倒了水想着烧水洗漱,后来我爸就接手过去烧火了。坐着坐着,收到我哥的信息,说两个侄女(其实有一个是外甥女)觉得学习太累了,待会让她们下来和我聊聊,过了会两个小姑娘下来了,排排坐坐到了房间椅子上。我就觉得特尴尬,说这个咋聊啊,学习累太正常了嘛,先起了个头说自己没法说学习方法建议可以想想自己以后想做什么,从这个就展开讲了我为啥会选计算机啊(因为经常去网吧玩,所以真的非常运气),接着又讲了很多我的一些故事,比如我填志愿填了清华大学填着玩啦、不喜欢重点班的氛围(卷、同学嘲笑心理有问题的女生)最喜欢复读那一年的时光啦(六一节大家看葫芦娃)、我去做暑假工的事情啦(这个算是有说教意义)、不喜欢自己专业的人会痛苦啦(我的室友/同学)……最后点了几个题,一个是跟她们讲应当要去享受知识本身的乐趣,这个是比分数更长远的东西,聊了各个学科我知道的一些奇怪有趣的东西;后来进一步我也聊说还可以通过一些游戏化的方式来提高乐趣啊之类的。感觉聊完和两个小姑娘是有拉近一点距离的,希望我传达了正确的观念。

上床后,十一点左右,舅舅打了电话过来,问怎么回事,我也不想说什么细节,就说我在处理。后来和LWL聊了会,我感觉她还挺喜欢和我聊的嘛。零点后,CH又打了过来,视频通话,CH和LH在CML家,CML说他 25 才回去,LH和CH都是明天回,开导了我一番。

感谢大家的关心吧。

  •  

闲言碎语(2022/01/10-2022/01/23)

2022-01-10 周一

23:20 芋芽芋荷芋子粥

芋芽还是第一次吃,挺新奇的;芋荷炒牛肉简直无敌;芋子粥,粥里的米没有煮烂,我爸说不能煮烂这样粥才能好吃有甜味,是这样吗,学到了。

2022-01-12 周三

22:05 明年

午饭的时候,我爸笑着说「你可以在北京找,我们也不要求说多快结婚,但明年你起码要带一个回来看看吧」。

22:40 残忍

有时候我会想,我如果真的遇到一个合适的人,却要她来和我一起分担面对我的痛苦,这不会太残忍了吗?

2022-01-13 周四

08:58 可爱

早上起来,看到 WJ 在最新一篇公众号的文章下评论「觉得你有时好可爱」,那当然了,我超可爱的,希望有更多人爱我。

2022-01-14 周五

21:42 清晰

相亲也不是没有好处的,至少在这个过程中,对于我能和什么样的人聊得来、想和什么样的人共同相处有更清晰的想法了。

2022-01-16 周日

15:51 独处

在家里,没有太多独处的空间,我觉得这是最大的一个问题。倒也不是说我不能一个人待着,但是父母就在附近,我没有办法不去想他们的事情。周末这样的日子变得很难熬,倒是想到上班后觉得一阵轻松。

15:52 理想伴侣

我想要什么样的伴侣呢?我这阵子想过一些,比如说互相理解啦、三观一致啦,可能这些都不是必要的,因为互相理解的状态是需要在双方共处的过程中逐步建立起来的,三观涉及的东西太多说一致完全就没意义。非要说的话,希望是一个独立自主且保持开放心态的人吧。

等于没有说。

2022-01-17 周一

12:01 史官

我是我自己的史官。

2022-01-18 周二

21:11 新增

北京和深圳都有新增病例,爸妈忧心忡忡,担心弟弟回不了家过年,我说担心也没办法,人平安就好。北京的一些朋友已经不打算回家了,有些人买好了车票但也在担心。如果这种情况还会维持几年,大概会有很多的社会习俗要被迫跟着改变吧。

2022-01-19 周三

22:03 童年

陪我妈聊了很多她童年的事情 —— 最开始是我在看电视,记录频道在讲徽派建筑,我说外婆家那里的屋子有点类似的味道,以这个为由头聊起了村里的建筑,我妈说她小时候就是在祠堂上的学,聊到我大外公(我外公的哥哥)是老师,然后聊起我大外公家,进而开始聊到我妈小时候和大外公家谁玩得好各种事情,还说我大舅小时候不知道为什么被大外婆嫌弃被她打特别厉害,说到大舅,我妈仍然是非常不解,反复在说「都是自己生的,不知道你大外婆为什么那么讨厌他」。

22:26 柳比歇夫

微信群里认识的网友,说我是现代柳比歇夫,了解了一下,确实我现在做的事情有点像他呢,希望我也可以坚持几十年。

2022-01-20 周四

09:14 幻听

七点多快八点的时候,我隐约听到父母的争吵声,但是仔细听,却又听不出具体的词汇,我轻轻起床来到楼梯口,楼下安安静静的,只有锅铲和锅碰撞的声音、排风扇的嗡鸣、门开合的吱呀声,并没有争吵声,我是幻听了吗?

21:54 小孩

诶,我一直的印象中故作成熟有点臭屁的小孩,为嘛现在总感觉有点小抑郁。这么需要别人理解。

我小时候臭屁吗?没啥印象了哈哈哈哈。

23:00 气候

我妈说,她小时候气候和现在相差很大,九十月的时候就会很冷了。这么一说确实是,我记得我小时候时,冬天到处是能见到冰的:田地里会结一层薄薄的冰,晾衣服的竹竿和屋檐都会挂上冰锥 —— 我们叫凌冰。

2022-01-21 周五

08:09 失眠

三点半醒了,之后好像断断续续都没怎么睡着。

2022-01-22 周六

22:52 堂姐

堂姐和姐夫上门拜访,挺奇怪的,因为长辈的矛盾,几乎没见过她专门来走动的,我陪着聊了半天,他们主要是围绕他们高二的儿子在聊,说成绩不稳定,问我有没有什么考试方法、学习方法的建议。我妈后面说,估计是听说我回家了,专门为这个事来的。

真的,我学习好不是因为学习方法,大家就不能承认我聪明这个事实吗?哈哈哈,中考后学校把前 20 名召集起来开会,我在那个会上说「我觉得读书还是要靠天分的」的事情了,想起来就好笑。

22:56 拒绝

拒绝了朋友介绍的一位姑娘的见面请求,微信上聊了这些日子,觉得不太聊得来。其实早就觉得聊不来了,但之前想着是朋友介绍并且称赞的人,是不是应该还是见一见什么的,但现在我实在是心累,不想再浪费双方的精力了。

23:12 送节

跟我妈去送节,先准备送点自家的东西给大姨,因为要去外婆家,我妈为了谢绝大姨邀请我们吃午饭,电话里除了说要去外婆家还拿我做借口撒谎说我有事要办,我听到后又好气又好笑,不想去就不去呗干嘛扯我啊,万一待会大姨问起来我有啥事,该咋回答?无奈,我就跟我妈对好口径,说如果问起就说我去找我同学了。

我妈送东西给大姨就先下车了,我就到广场才下,去银行取钱,惯例又遇到 ATM 钱被取空,找到工商银行的 ATM 才完成取钱任务。然后在等我妈的过程中和高中同学聊了聊,不说恢复感情,起码恢复了微信沟通吧。

去了外婆家,见到了表弟的妻子和刚出生不久的女儿,我还抱了会孩子。还见到了最小的三个表弟,两个大点的一个在一中读高一、一个初三,都很高大了,过得真快,最小的才 10 岁不过也很快的。

在门口竹椅上坐着和外婆聊了一些天。

23:01 八一南路

走完亲戚,陪我妈去八一南路买被套,人挤人热闹得不行。拥挤的人潮里,回忆不断涌出来:在文化馆打桌球,在一家已经不记得名字的店吃卤豆腐等小吃,在双清书院买小说,穿过有好多香烛店的解放路去向阳南路的租书店看小说和漫画……对于高中生活,脑子里清晰记得的只有几个印象深刻的片段,但其实也有很多很多开心平凡的日常,都模模糊糊了,只有像今天这样,在特定的地点触发之后才能勉强回想起来一点。

我过去到底是怎么样一个人,我其实已经完全不清楚了。

  •  

我的2021

2021_diaries_heatmap.png

在 2021 年里,我写了 321 天日记,一共写下了 797 条记录,共计 138574 字,平均每天要写 432 字。我在 2021-06-14 写了 3107 个字的日记,是这一年中中最多的一天。797 条记录里,有 234 条是在做计划,有 95 条在做回顾,剩下的 468 条在记录生活细节。

2021_diary_words.png

日记里的关键词显示,我这一年关心得最多的,是父母和搞钱,也有很多的想法,不过并没有去付诸行动。虽然热衷于搞钱,但是全年的总收益率才 4% 左右,还是需要学习呀 —— 虽然没有在投资上赚到什么钱,但在财务上,我把我从 2016 年开始记的账都梳理清楚了,我现在能算出我所有资产的增长趋势了,搞清楚了这一点我很开心。

2021_diaries_sentiment_2.png

日记显示,我这一年有较大的情绪变化,特别是年末的几个月,过得并不开心。

2021_diaries_sentiment_wordcloud.png

朋友们的陪伴给了我最多的正面情绪,帮助我对抗了各种各样的痛苦,感谢我的朋友们。分析了微信聊天记录后,我选出来十位和我聊得多的朋友,看看我都和他们聊了些什么:

2021_chathistory_top_person_1.png

我和 ZCB 聊了最多,这个是我弟弟,聊得多也正常,我也会比较唠叨,所以对他说的话是多过他对我说的话的;其次是 LY,他对我说的比我说的还多,看来他比我话痨;ZYP 是我表弟,2021 年刚上大学学计算机,三天两头来找我请教问题,所以聊的内容大多是一些计算机的内容;WJ 是我的多年老友,虽然多年未见了,但是我们始终在共同探讨心灵、自我方面的话题。

2021_chathistory_top_person_2.png

我和 LY 在 200 多天里都有交流,积少成多,才有了他top2的地位。

2021_chathistory_top_person_3.png

我和ZYP、ZCB以及WJ一聊就停不下来。

2021_chathistory_top_person_words.png

上图是我和这十位朋友聊天记录的关键词,相交的部分是我们共同提到的内容。

人生不如意者十之八九,也许我该找个人聊聊?但是很多话题,实在是找不到人来聊,所以我去读了《也许你该找个人聊聊》和《蛤蟆先生去看心理医生》:

  • 前者说:

    • 所有问题的根源都可以归结到自由、孤独、无意义和死亡这四个问题上
    • 我们真正的问题往往被我们回避着
    • 即使我们认识到了真正的问题以及解决方案,往往也会视而不见,因为与其从并未上锁的囚笼中走出来面对命运的无常,我们宁愿选择沉溺在已知的、确定的痛苦和自毁中

    我在读这本书的时候,注视到了我一直视而不见的阴影,我知道我的自省已经做得够多了,时候已到,是时候作出改变了。

  • 后者说:
    • 人有三种心理状态:只会说「我要这个我要那个」的儿童自我、只会说「你应该这样你应该那样」的父母自我,以及「我要去做些什么来应对现在的问题」的成人自我
    • 当我们出问题时,往往是在儿童自我或父母自我中停留了过久,尝试让自己进入成人自我,是脱离痛苦的道路

除了朋友和书籍,B站也陪伴我度过了很多时间,可惜B站的观看历史只保留最近三个月的,所以我只能基于这三个多月的数据来做一些分析了。

bili_2021_times_1.png

每天的早上和深夜,是我使用B站的高峰期,深夜难眠,B站陪伴,早上看得多是因为我早上吃饭时用来下饭,坚持吃早饭的我真棒!

bili_2021_times_2.png

工作日只能早晚看,但周末就看得很多了。

bili_tags.png

在内容上,我喜欢看游戏、搞笑和日常类别的视频,没什么营养,但打发时间足够了。

bili_title_wordcloud.png

这三个多月里,我看了大量《黑暗之魂》和《血源诅咒》的视频,并和大家一样,期待着《艾尔登法环》的到来。

bili_authors.png

我最喜欢的10位UP主见上图,其中四位都是黑暗之魂系列游戏的UP主,我对宫崎英高是真爱。

2021_journal_heatmap.png

工作方面,我写了 239 天的工作日志,一共写下 523 条记录,共计 233429 字,平均每天要写 977 字。以可复现工作为准则的我,除了文字,还在日记里记录了我实际的操作,记录了 5808 行操作用的代码,其中 Python 代码 3015 行,shell 1715 行,SQL 430 行,YAML 379 行。

2021_journal_words.png

工作日志的关键词显示,这一年的工作内容里,我和数据、资讯、股票打交道很多,大量的时间是在做具体业务,我已经远离算法了。

这是一次数据化分析总结的尝试,限于精力还有很多东西没有分析,争取在2022年多收集一些数据,做一个更全面的分析出来。

  •  

闲言碎语(2021/12/02-2021/01/09)

目录

2021-12-04 周六

17:15 阴影

《也许你该找个人聊聊》这本讲心理治疗的故事的书,传达了一个观点,就是每个出现问题的人,大都有一个自己在回避的根源性问题。我想了一下,我有这样的问题吗,可能还真有,我以为我已经从中平复过来了,但也许那道阴影一直都在。即使现在这样一个瞬间我能看向它,但这种不敢面对、不想改变的症结才是最大的问题。

我的阴影可能是:(略去104字)。因为这个,我不想发展什么亲近关系,因为一旦亲近,我就必然要告知他们这些状况,我害怕那时候他们的反应。

当然,把所有问题归结到一个点上,可能又是一种把复杂问题简单化的自我欺骗,谁知道呢?我得承认,我对自己的了解还是非常的不够。

2021-12-05 周日

09:45 导出

发现 Telegram 自带了聊天记录导出功能,非常友好!一口气备份好了多个群及好友的聊天记录,不过 EFB 我大概是 18 年才开始使用,更早的就没办法了。

telegram_chathistory_export.png

18:39 改变

今天去 LY 家进行小饭桌活动,来回的路上我都继续在读《也许你该找个人聊聊》,里面有一段表达了这么一个观点:人们会积极会消极地走上自毁的道路,因为这样就可以给自己带来一种自己掌握了命运的错觉,而不用被不确定性困扰。

我对此表示赞同,因为改变意味着丧失而丧失则带来痛苦,一个已经在困境里的人,同样可以用这个困境作为外壳来保护自己免受更多的痛苦,至少人的潜意识里是这样的。

我昨天觉得,我发现了自己身上一个具体的更大的问题,但现在,我觉得更大的问题,是我也在抗拒改变、害怕改变。

我想要一些改变。

20:44 想成为UP主

嗯,一个想法是,想用音频、视频的方式来记录自己的生活,就当视频日记来做,感觉也会很好,毕竟音视频能更好地还原生活的状态。

大概了解了下,以我这种需求,拍摄的话买个手机支架就好了,录音方面可能需要声卡、话筒但也不是必需,然后就是电脑能跑得动一些常见的视频剪辑软件了,要不要试试呢?

2021-12-06 周一

18:43 失望

写了段漂亮的代码,换来的却是一句「为什么要搞这么复杂啊」,对,从头到尾堆语句没有任何设计倒是简单了,输入输出稍微改一下也只要把原来的代码抄一抄糊一遍,确实简单。失望透顶。

2021-12-07 周二

00:30 拆股和再投资

发现在 beancount 里拆股可以这么写

2021-09-13 * "证券保险ETF拆分"
  Assets:投资:证券账户:华宝证券:持仓                         -2000.00 SH512070 @ 2.3490 CNY
  Assets:投资:证券账户:华宝证券:持仓                          6000.00 SH512070 @ 0.7830 CNY

那分红再投资是不是也可以这么写呢?可以的话就不会造成大量的分红收入了 —— 原来的做法是先写一个分红的收入,然后再写一个买入,像下面这样

2021-10-20 * "交银双轮动AB分红"
  Assets:投资:且慢:稳健投资:CASH    101.03 CNY
  Income:分红

2021-10-20 * "买入交银双轮动AB"
  Assets:投资:且慢:稳健投资:持仓    95.15 OF519723 @@ 101.03 CNY
  Assets:投资:且慢:稳健投资:CASH    -101.03 CNY

分红再投资其实就是钱左手倒右手并没有变多,但这么一记就产生了一笔收入。

13:05 降低要求

日子总是还得过,就降低对别人的期望和要求呗,不然还能咋地。

2021-12-08 周三

22:38 坠落

(略去 707 字)

打完电话是 19:40 多了,还好,不算太晚,LY 和 K 喊着去吃二哥,我本来想不去了,但是想着自己现在这样的状态,回去更危险,于是强撑着还是一起去了,吃了 345,觉得二哥的味道比以前差了好多,以后可能不去了。

好绝望、好难过、好无助……

(略去 445 字)

23:45 续

洗了个澡,感觉好一点了。

(略去 114 字)

暂时不想睡,需要一些刺激多巴胺的东西,看看 B 站或许再玩玩游戏。

2021-12-13 周一

22:45 泄漏

上午我在写当日计划,然后接到中国电信升级套餐的电话,就停下来接电话,这个时候同事过来询问工作的事情,当时我的屏幕上正显示着「失望透顶」那一段,察觉到对方可能看到后,我把屏幕切到了浏览器上,然后继续聊工作。

也许对方看到了,也许对方会一整天心情都不好,不过,那又怎么样呢。

22:48 代际

下班拉着 ZCH 去饭阿姨吃饭,聊了聊天,他说他想干个两年后就离开一线城市,到比如武汉、南昌这种地方。说真的,我毕业、刚工作的时候可完全没这种心态。不过,虽说是一个大的趋势吧,我感觉他并没有想清楚自己要的是什么生活,聊的过程中他说到他一个同学在军校学计算机出来后就分配工作「生活有希望」,到底是什么希望呢?

2021-12-14 周二

08:52 梦

梦到(略去 30 字)。梦醒后无言对着深夜的黑沉,一边庆幸只是梦一边又想现实和梦也没啥区别。

还梦到了(略),在世界发生巨大灾难快要毁灭的时候,(略)。是什么灾难来着?我记得有洪水,还有被雨水淋久了后身上会冒出黑色的丝线样事物这个事情。

2021-12-15 周三

08:30 无梦

没有做什么噩梦,真好。

23:30 畅谈

和 WJ 畅谈了一番大数据啊、世界观啊、痛苦啊、自我啊、命运啊之类的,特别开心。她在我心目中一直是感性、对生活很有感受力那种人,我还以为她不会被类似的问题困扰,看来是想多了,这个年纪的人,大概都差不多。

2021-12-17 周五

19:30 回家

开完组会跟领导说了我想提前回家的事情,领导没怎么为难就说没问题,还说「你回家了也没事做对不对」,挺放心我的啊,大概是去年大家有过 remote 的经历吧。额,其实我是想着提一个月应该不会同意然后等着讨价还价的,目标是 14 天来着,防止到家后被隔离 14 天。

23:06 记录

看到 WJ 发了新公众号文章,说「我喜欢用文字记录生活的点点滴滴,喜欢捕捉稍纵即逝的每一份美好时刻」,不过她的记录好像都是通过朋友圈来做的,我就发微信提醒了她下,并且推荐了 flomo 这个应用给她。后来还陆续聊了不少记录方面的想法,并且把我的 org-roam 笔记展示给她看了,这个时候才知道我把她的学校记成「兰州大学」是搞错了,其实是「西北民族大学」,不过也在兰州啦。

23:14 香猪坊会议

上午的时候,K 问了一个问题:如果你不能做现在的工作,你还能干啥?

我就说如果可以的话我还是想在计算机领域做事,顺势聊了一些我对 NLP 的想法。最后回到「不使用第一技能如何挣钱」这个问题上又讨论了一番,XKL 说她想写科幻小说或者图书管理员,K 说他想 BFS 也就是说探索更多领域的知识和技能,LY 说他想玩现代农业。最后发展到怎么做些不那么累又能养活自己的小生意,聊得很热闹。

下班后相约到了香猪坊吃烤肉,继续聊了这个话题。K 到了我们办公室,我和 XKL、K 一起走路先去香猪坊的,路上还开玩笑说是不是可以做「外卖技术专家」,像外卖一样供别人下单然后半小时到一小时内上门帮忙解决 bug 哈哈哈哈……去了香猪坊后继续聊,不过吃饭时间太短了,八点开始点菜的吧,八点半就吃得差不多了。期间 XKL 提到她自己有记录一些点子,给我们说了几个。LY 说了 TeXPage 这个小众产品。

XKL 还有点奇怪,说她这个年纪想这个问题还好说,我们几个都还比较年轻为什么也在想这个。我倒觉得很正常啦。另外我问 XKL 是不是每年理财就够生活了,她说是,生活没问题,所以会想去写科幻小说、图书管理员。

我们决定之后可以继续就这个话题展开讨论。

2021-12-19 周日

15:39 个人数据库

我想简单设计一下数据库,把自己的一些数据存储起来,比如说和朋友的聊天记录啦之类的。

在鱼塘和大家聊了聊,好像没有什么特别合适的、开箱即用的工具,所以还是自己来写点代码做处理了。

2021-12-21 周二

23:49 连手

今天 K 生日 —— 据他说身份证上是明天 —— 下班后四个人去了连手吃烤串。据说「连手」是兰州话「朋友」的意思。

边吃边继续聊小生意的事情。

LY 存款不多,XKL 有房所以肯定是不缺了,K 说他的存款也不少了,躺着的话在北京还会有一点焦虑但如果回兰州就够够的了。

XKL 说她主要是想要躲起来以应付接下来可能发生的社会变化,以及生活上钱也够了所以可以找点自己想做的事情做。

K 没说太多他的目的和想法,不过我们聊过多少钱才够自由这个事情,我当时比较想强调自由和钱关系不是那么大了抬了不少杠,被 K 说我是在使用稻草人谬误,哈哈,是得反思下,我讲话有时候也没啥逻辑,也会为了印证自己的观点而强行使用证据和说话方式。

LY 的想法和我差不多,就是想做点有价值的事情。

2021-12-22 周三

14:12 二胎

去贵凤凰吃饭,边上一男二女在聊二胎话题,男的说他媳妇想生二胎但他不想,因为之前陪产过觉得太痛苦了;二女中的一个说这个其实还好,虽然痛但也就很短一段时间,如果要生二胎她觉得自己是能忍受的,而她不想生二胎是担心两个孩子之间感情分配不均衡。

2021-12-24 周五

23:44 平安夜

下了班,饭罪委员会加上姨夫一起去了零公里,车上姨夫给店里打电话问要不要等位,对方说今天店里人还比较少,因为吃西餐的人会比较多,哈哈。

我们到了零公里后,点了酒都肥肠、李庄白肉、叙洲包浆豆腐、花生浆菜豆腐、酸豆角烧魔芋、燃面几个吃过的菜,还点了鲜锅兔、回锅排骨、腊味拼盘、猪鼻筋等几个新菜。由于有姨夫在,我们闲扯多聊了会,比往常吃完花了更多的时间,挺开心的。聊了点姨夫的感情生活,得知他已经和上海的那位分手了,说发愁之后去哪里,回家长期住着估计也不喜欢但出去住现在也没什么名目了之类的。

话说,到店后注意到 XKL 涂了口红,头发也明显打理过,还戴了一条红白的围巾,美美的。

吃完坐 XKL 的车到北土城,然后回家,见到一个姑娘拿着一支花和一个装在袋子里的苹果,不知道是朋友还是公司送的。路上看到表弟发给我的 C 语言问题的消息,我问他说平安夜有没有去玩,说学校不让过洋节,加上太冷了同学也不愿意出去,哈哈。

23:22 的时候跟 WJ 简单说了声平安夜快乐,得到了回应。往常可能是她先说的,这次我抢个先吧。

2021-12-27 周一

22:26 关店

得知简阳羊肉汤在年后就要关店了,老板说这种品类的店也就冬天生意稍好一点,其他季节不行,最近两年经济又不好,房租又涨,没有新客老客也在流失,实在是开不下去了。还挺遗憾的,一家开了 9 年的老店,就要这样没了。结帐的时候继续跟老板闲聊,老板说孩子现在 10 岁了,关店之后就回家照顾孩子,在家里咋生活没问,总是能找到路子吧,做点零工、小生意,总是能生活下去的。

吃饭的过程中,隔壁桌抽烟被 LY 制止了,隔壁桌性格也还不错,后来问 LY 说想抽一口行不行,被 LY 和 XKL 严辞拒绝了,还挺有意思的,看 LY 扎了头发就问 LY 是不是做艺术的,笑死。

22:29 裁员

之前听 K 说过他们公司在缩减运营人员,没想到下午的时候 WR 和姨夫一起过来,说被裁掉了 —— 技术就剩了四个人,公司产品被认为是错误的方向,运营一直做不上去,因此不再做了,K 还留着继续做剩下一个业务线,同时公司会讨论新的方向之后继续吧。

就挺突然的……

WR 走前送了一个卡比兽和妙蛙种子的手办给我和 LY,一人一个。

22:38 体检

体验预约我一直拖延,今天一看各个地方都没号了,奇怪的是望京分院明天有号,于是只好约了明天望京分院的,得早起了哇……

2021-12-28 周二

11:17 体检

七点半起来了,也没有想象的困难,甚至觉得有点精神。坐地铁到望京东C口出去,然后走了一公里多到了慈铭,到的时候是九点过几分。人并不多,先抽了血,然后检查耳鼻喉,先问我鼻子流不流鼻涕,我就说我有鼻炎,随便看了看说「有点鼻炎」这他妈不是废话嘛……做完耳鼻喉做内科,就用停诊器听了听心肺,完了医生说我有点紧张,我笑笑出门;然后排队做心电图,这种等待的感觉真好,就放心刷着手机,什么工作啊社会啊都不用想,做完后给隔壁医生看就扫了一眼说「正常」,嗯,挺好的;然后去做彩超,又一阵好等;做完彩超去做了胸部CT,然后做血压、身高、体重一般检查,最后是去卫生间留了半盒尿。剩下有一些项目我放弃了,下一楼还了钥匙领了鸡蛋走人。

2021-12-30 周四

23:15 升21转

这个可转债今天上市就涨 35% 导致停牌,快三点的时候差点忘了卖掉,还好 ZY 过来找我聊这个,才想起来把它卖掉了。

2022-01-01 周六

12:44 同理心

老徐发了一条朋友圈,大意是宁波有疫情回不去了,我没想太多,发了一条「我明天回家」,然后被他怼了。看到他的回复我其实很不舒服,不过回头一想,他看到我的留言肯定也是不舒服的,以牙还牙把这种不舒服还给我,很合理。我开始自认为「没有想太多」,但仔细想想,我这条留言,不就是看到别人回不了家然后觉得自己回得了家,进而产生了一些优越感和窃喜吗?

他人是一面镜子,可以很好地照出自己的样子。

20:47 退货

前些天买的一件衣服,尺码不对,于是我发起退货了,京东说今天 15:00 到 21:00 会来取件,然后我一整天都在担心这个事情,就是那种一件事情没有完成的状态,很难受。

就在刚才,给我打电话了,问我在不在家,我说在。过了没一会,敲门声响起来,我把装好的衣服递出去,问「要不要检查下什么」,京东小哥乐呵地说道「我还能不相信你嘛」,接着说「嘿嘿,我又回来了……取件还是我取」,我看他那么自来熟,但戴着毛茸茸的套头的帽子,实在是辨认不出来是哪位京东小哥,只好掩饰着尴尬说「我还以为你不来了呢,都八点多了」。「哪能不来呢,别人的件我都没取先来取你的了」,他这样说道,依然是乐乐呵呵的,然后拿着件走了。

他好开心的样子,看得我也开心了起来。

2022-01-02 周日

06:17 停运

四点十分起了床,洗漱收拾完毕,到五点左右出门,约的出租车就停在了小区门口,师傅放倒了椅子在睡觉,我敲窗户把他叫醒,出发往西站去。我昨天看地图说要一个小时到,师傅说只要半小时,大概是我昨天看的时候是按当时的路况来估计的。

和师傅聊天,聊疫情,我先用最新的研究给师傅灌输了一波焦虑,感叹了一番。师傅问我是不是出差,我说怕回不去提前回家,于是就聊到过年的事情,师傅说现在过年没有年味,以前就拉客都能感受到,先是农民工大堆回家然后是学生们回家,都热热闹闹的。还说到他小时候过年的一些风俗:一个什么火,说是劈好柴在院子里像篝火一样点燃,火烧得越旺越高就意味着新年生活越好;说他父亲会拿个瓢盛着醋在家里转着洒来辟邪 —— 其实是能起到消毒作用吧;说他哥会拿锤子把砖头敲成球,不过这个没听太细,不知道是他们家普遍的风俗,还是小孩子的玩耍;还说他们用黄米(黄米是什么米不懂)做成面蒸馍吃,以前没东西吃这个就算好粮食了,现在这么做来吃的少了。我也讲了我们初一迎神和捣年糕的风俗。

到西站五点半,验了健康码安检后进站,却在刷身份证进站时被告知我买的车已经停运,给我整懵了。工作人员让我去问售票处,我去了,售票处说列车已停运只能给我退钱了,然后说可以帮我看下有没其他车,最后找到一个在南昌中转的路线,中间就隔半个小时,要比原来的车便宜150、晚3个小时出发晚一个半小时到,反倒更快?不过更快也没啥意义,我这都已经在火车站了。生活真是充满了意外呀。

11:50 九江农业号

火车叫九江农业号,是收益不行所以开始出售广告位来赚钱吗?车厢人挺少的,一大半都是空的。

18:02 南昌

在南昌换乘,有便捷换乘路线,直接到候车大厅,不用出站,还挺好的。等了一会后进站,到站台后才明白工作人员强调蓝色地标是什么意思,车还没来,只能靠地上的标识确认哪里是门的位置以及是几号门,而这些位置上用不同颜色标着不同的数字,我是5号车厢,找到蓝色的数字5的地标就好了。上了车,我的位置是11A,靠窗,不过晚上了啥也看不见没啥好的,现在倒是觉得C和F这种靠过道的位置好,走动方便哇。B位上是一个姑娘,染了一头鲜艳的橘色头发,挺惹眼的。

20:13 陪伴

旅途中又和 ZQL 聊了聊,得知他女朋友单位不让离京,我说那你不如不回家好了,陪陪妹子啊,然后他说奶奶身体不好之前还进了ICU,虽然现在转轻症了,但感觉老人时间不多了,还是想陪一陪。都不容易。

23:00 接站

昨天和家里打电话的时候,姐姐和姐夫正好在我家,听到了电话,于是姐夫开了车来接站。一路上闲聊,发现姐夫还真是交游广泛,对于我初中时那些老师的去向都很清楚,我随口说了一句是不是哪个老师去了教育局,然后他连报了好几个我初中学校老师的名字,太厉害了。因为第二天还要去做核酸,就在我姐夫家过夜了,姐姐和孩子都在,我就陪着聊天聊到 10 点多,感觉我还挺能聊的了,不知道从哪学的。外甥女去一中补课了,现在孩子压力真大。

2022-01-03 周一

10:00 核酸检测

在姐夫家吃完早饭 —— 米粿汤后,坐了会就出门去人民医院做核酸了,结果吧,江西搞的那个什么赣通码直接给我整个报错,还好国家平台健康码能用。进医院后挂了个号,出来在门口角落的检测亭里做了咽拭子检测,没几个人,后来一查,说是「愿检尽检」,也就是说我不做检测直接回家,问题也不大。

22:00 家(补)

做完核酸后,姐夫送我到家,坐着聊了挺久的天,但是没有及时记录,我已经记不清他是不是在我家吃午饭的了,以及午饭吃了啥,我也不记得了。

天气很好,有太阳,很温暖,我站在门口晒太阳,一位邻居路过看到了我,就过来聊了会天,聊的什么我也忘记了。

好几个邻居见到我都说我高了,30 岁的人了,还怎么长高啊?后来我妈说,可能是因为我瘦了所以看着显高了一点,似乎有点道理。

2022-01-07 周五

23:00 相亲(补)

大概是之前和父母吐露过心结,他们觉得我终于开始积极思考感情问题了,回来后找到亲戚让介绍姑娘,下班后,跟我说了一个姑娘的状况,说对方说了,不用长辈安排,我们自己加联系方式去碰面。给了我一个手机号和姓名,我加微信加不上,于是发了一段长长的短信过去,作为第一次相亲活动,我决定记录一下留作纪念:

你好,我是你邻居XXX介绍来认识的,我叫XXX。按照安排,明天咱们得聊一面,不嫌弃的话找个地方我请你喝点东西,不过地方可能得麻烦你找一下了,我在家时间少各个地方都熟悉。不知道你对这种活动什么态度,我头次参加,有点忐忑,不过觉得能聊得来的话不管最后怎么样多个朋友也好。如果你比较没兴趣也可以先告诉我,我不介意;如果有兴趣多聊一点的话,可以加我微信,这个手机号就行。

过了会对方微信加了我,说「发短信也太复古了吧」,经我提醒,她才意识到自己把通过手机号添加好友的设置关掉了。简单聊了聊,约了第二天见面。

2022-01-08 周六

16:00 相亲(补)

吃完早饭收拾了一下就出门了,坐车去县城,车上的时候我觉得特别烦躁。我到了后,对方提议说在她家附近体育馆碰头,我到了后等了会,见到了对方。

人挺好看的,也很健谈,我们就绕着体育馆外面的路边聊边说,她是学音乐教育的,然后也学了舞蹈,有编制,教小学的音乐和语文,聊了基本状况后就说一些学校的事情,边走还边给我介绍周围的建筑之类的;我的话就聊聊计算机和互联网,也被问到收入有多少的。回头一想,其实没有聊什么有价值的东西,基本就是了解各自的状况然后没话找话。到 12 点决定去吃个火锅,她地头熟,打了车去一个重庆火锅店,那重庆火锅点菜我可是当仁不让了,点上了炸腐皮、酥肉、贡菜等一些有特色的东西,其他的肉啊什么的也点了一些,不过最后很失望,贡菜软趴趴、酥肉里面全是肥肉、冰粉太甜了,最后吃了 248,这价钱我在壹圣元能吃得好得多啊。

吃完饭我就不准备继续下去了,因为她现在是在家里当老师,想考到江西其他地方去,但并不愿意出江西省,而我一两年内是不太可能回江西的,这是个很实际的问题。于是告别然后去我姑妈家做了下汇报(因为是她介绍的),然后就回家了。

回到家后,我和爸妈也摊开来聊了下,首先是表明了态度,我会去积极和人交往争取找到自己合适的人,但同时也希望他们不要急,因为我还是想先把心结解决。我觉得这个坦诚是有成果的,毕竟我这个心结,多多少少也有他们的原因在,说是我的心结,其实也是他们的心结。

22:00 共鸣(补)

去相亲的路上特别烦闷,就直接在微信的订阅号助手上,把 2021 年总结编辑好发了出去,顺手还发到了 E 大粉丝群里,收获了不少赞扬和肯定,有一个人在我的一篇公众号文章下的留言最让我感动:

不知道为什么,看这些闲言碎语有一种世界上另一个我的感觉,莫名其妙的想哭想笑

我坚信平凡的生活点滴才是最能打动人的东西,我坚信将来的我也能被我曾经这些平凡的生活记录所打动,我还会继续记录下去。

另外,文章发到群里后,又认识了几个新朋友,开心。

22:00 畅谈(补)

看到 LWL 关注了我的公众号,就去打了个招呼,没想到一下就聊了特别特别多,开心。

22:00 理想伴侣(补)

WJ 问我:你憧憬爱情吗?有想过理想伴侣吗?

我不假思索地回答到:我憧憬互相理解互相尊重互相促进的关系,是不是爱情倒没太在意。

我所遭受过的痛苦,绝大部分都源于人和人之间互相不理解,所以我会这样想吧,也许我是错的,这些都是需要验证的。我疯狂地做记录分析自己,其实也有一部分动机是这个,因为对自己的不理解同样是痛苦的来源之一。

2022-01-09 周日

21:52 遗忘

开始整理这一周发生的事情,我记得我似乎和爸妈聊了很多很多,但到底聊了啥啊,完全不记得了。疏于记录就是这种下场。

23:55 畅谈

又和 LWL 畅谈了一番,感觉很开心。她说「我们加微信这么久好像啥也没聊过。可昨天和你聊天,突然没了之前那种心态,感觉能聊的东西就多了」,我觉得这是因为,19 年加微信的时候有一个长辈介绍的因素在,就觉得不自然很奇怪,而这次我们开始聊上则是自然发生的,我并没有什么过多的想法,我只是想多个朋友,自然就能聊得开,反倒是这两天其他长辈、朋友介绍的人,大家都显得一副急匆匆的样子 —— 我们快点成为朋友吧、快点见见面吧、快点看看是否合适吧,我不喜欢这样。

LWL 问:那你需要的是朋友?

对,我想我需要的是朋友。也许我这种想法,还是有对亲密关系的恐惧?我不知道。

  •  

闲言碎语(2021/11/15-2021/12/01)

2021-11-15 周一

10:36 内推成功

之前一个 ZCH 说被裁了找我推荐,我看履历和我们公司的一个新业务方向还蛮契合的,就顺手给 HR 和领导了,上周接了 offer,这周就来报道了。这是我第一个成功的内推,就不知道奖励啥时候会下来。

2021-11-18 周四

22:41 误区

我觉得之前可能陷入了误区里,想着用 org-mode 完成结构化知识的存储、展示、编辑和使用,但其实没必要,存储完全可以放在 Neo4j 或者关系数据库里,org-mode 可以作为一个编辑和展示端就够了。

2021-11-19 周五

23:00 零公里

又去吃零公里啦,点了这些东西:筠连椒麻鸡、酒都肥肠、芙蓉鸡豆花、叙洲包浆豆腐、青笋烧肚条、油渣小白菜、缠丝肉、鱼香肉丝。

2021-11-20 周六

18:00 表弟近况

表弟一个多月没来问我问题了,问了问近况,说是进了老师的实验室,在各种参加比赛,说了几个,我只知道蓝桥杯。看起来前途大好啊,真好。

2021-11-21 周日

11:42 ENS空投

才知道 ENS 在空投,但要求是 10.31 之前在 ENS 上注册过 .eth 域名,并且根据时间来发放,错过了哇。

16:20 GPT-3

OpenAI 开放了 GPT-3 的 API,然而,不支持中国地区。

18:30 老同学

等理发的时候无聊找一位老同学聊了聊,得知他这周五刚答辩完,明年一月份拿到毕业证书,就正式博士毕业了,不容易啊。问他毕业后的打算,说是准备进公司赚点钱,挺好的,计算机的博士,出来的待遇会很不错的。最后我还开玩笑说看看明年六月份我这房子到期后有没有合租的机会,虽然是开玩笑,如果确实有机会的话也还不错。

2021-11-22 周一

21:53 再遇

下班,上地铁左下后看到对面就是 WY,约了周三吃饭。

2021-11-23 周二

08:28 噩梦

做了一晚上噩梦,好累好烦啊。

2021-11-24 周三

08:30 排挤

梦到全办公室的人联合起来排挤某个人,不知道这是大脑在快速眼动睡眠周期内拿我哪些记忆和想法加工出来的离奇故事。

12:05 失策

啊,发现 ZZ 是下午送餐,然后我以为是中午把和 WY 的饭约到了晚上七点……希望七点前能送到。

21:30 WY

和 WY 去管氏翅吧碰了头,聊了一个多钟头。互相聊了聊工作生活的近况,又七扯八扯聊了投资、算命、游戏、价值观,还给我介绍姑娘来着……挺久没见过的人这么聊一聊,感觉还挺好的。

2021-11-25 周四

21:00 光影

死去的、错过的那些人,就像身后的光,我看不到他们,但可以通过自己的影子感受到我仍然和他们联系在一起。带着这些影子活下去,也是意义之一。

21:30 感情

下午 WY 来问我要照片,并问我「你现在有进入一段感情的打算没」。我真的没有认真想过,而且呀,我在维护关系(不管是亲密关系还是朋友关系)这件事情上真的很白痴,如何表达好感和关心、如何保持联系与距离、如何建立信任与尊重……光是想象就已经让我觉得很麻烦了……

23:30 历史

我从 2016 年 6 月开始手工记账直到今年年初,积攒了大量历史数据,这两周在尝试把这些历史数据也纳入到 beancount 的管理中来,今天总算初步完成了历史数据和今年数据的融合、校验,至少数字上没有什么差错了,当然在这个过程中不可避免地开始对支出做细分和分组,今年的新数据的收支类型还没完全调整好。现在看 2016 的时候我的钱真是少的可怜,不过那点少得可怜的钱也从那个时候一直再慢慢地变多,看着那条爬升的线感觉很开心。接下来就可以把这些数据放到 Keysersoze 里得到收益率的分析结果了。

2021-11-26 周五

23:36 脆弱

人和人的关系真脆弱,不知道什么时候一两句话就会导致裂痕的出现。我无法揣测其他人的心思,但希望自己能做得好一些,比如说我现在还是会在某些时候表现出傲慢、冷漠的一面,有时候心情不好、压力过大也会把情绪带给别人。目前我起码能做到时时自省,在事后不久的时候觉察出自己的不对。

不过话说回来,和我走散的人,好像都不是因为闹僵了,而是因为我不去保持联系。

2021-11-27 周六

19:27 花钱

总算把 2016 年 6 月至今的历史账单都梳理清楚了,下面这张图是这些年的支出状况(略去了家庭支出和每年春节的长途往返支出):

expenses_since_2016.png

  • 餐饮一共花了 10 万,平均每天 50,虽然我觉得自己吃得还不错,不过这个均值确实看着有点低,主要是我在吃饭之外很少有别的餐饮开销
  • 很少去医院,所以医药这块花销很少,不过我不怎么运动所以花销少完全是因为还年轻吧……
  • 发红包那个支出,一大半是份子钱,我好亏哦

2021-11-30 周二

23:00 图形与衬底

被工作上的烦心事搞得心情很差,虽然我知道那些都是正常的、合理的事情。下班路上,随着这种厌烦情绪的滋生,仿佛为了对抗它一样,另外一种渴望也壮大了起来,想起了我想做的一些事情。正因为痛苦,欢乐才有意义,他们是一体两面的事物。

escher_two_birds.jpg

2021-12-01 周一

22:20 杨平兄弟

20211201_food.png

三位戴表人士和一名普通群众去了上周五没能吃上的杨平兄弟烤牛肠,再次在那老旧的大楼里迷路,错综复杂的大楼真的很有城市探险的感觉。点了一个三人套餐,量不太够,后面又加了一份牛大肠、一份嫩豆腐汤和一份海鲜饼。牛肠不差但并没有特别惊艳吧,主要是比较贵了,生拌牛肉和嫩豆腐汤非常赞。

  •  

闲言碎语(2021/11/01-2021/11/14)

2021-11-01 周一

11:00 新衣服

咦,买新冲锋衣啦,这个颜色很合适哦 —— 上周也穿了新衣服啊,哼。

2021-11-02 周二

18:00 体检

公司给我们发了导诊册,说我们可以开始预约体检了,说起来上次体检都不记得是哪年了,总之好几年没有体检过了。看了下体检项目,有点高端,除常规项目外,居然还有癌症筛查和基因检查。

22:31 陌生人

下班回去换到 8 号线上后,习惯性的玩着手机把自己和其他人隔绝开来,冷不丁的对面一位四十到五十的大姐看着我问到「这趟车最晚到几点啊」,也许并不是问我而是看着车门上方的运行路线在自言自语,但我刚好位于对方的视线区域于是下意识地回答了下,她后面重复了几次这个问题,中间夹杂着几个我没听过的地名,也许是想去那个地方?一场莫名其妙的与陌生人的对话。

22:42 美团买菜

快到小区的时候,被路边美团买菜的推广人员叫住了,说他今天指标完不成,央求我扫个码,那会不赶时间,想着薅个新用户羊毛也不错,就帮他完成了一个指标,买了几个西红柿、一盒牛奶、一个柚子,然后送了四个鸡蛋接着一分钱换了一小箱水,回来看还有满 29 减12 的券,还行吧。

2021-11-04 周四

22:35 玉流馆

中午聚餐,吃了闻名已久的玉流馆,服务员果然都很漂亮,但是菜味道一般,至少是匹配不上价钱的。中午人比较少,据说晚上会有节目表演。

2021-11-06 周六

11:30 疫苗

终于打了第一针新冠疫苗了。接种点就在我小区附近,走路 5 分钟就到了,排队排了半个多小时,打完 10:20 了,在留观区坐到 10:50 多没啥反应就回了。出来的时候外面已经在下着小雨了,没带伞,把羽绒服的帽子戴起来回去了。

16:30 风控

之前接到自称是火币客服的电话,说我的账户触发了风控,让我和他们风控部分的人对接解除风险后才能正常交易,当时在上班就没应付了两句说以后我再去看。下午又接到了这个电话,我还是想着年底才清退呢,我干嘛非得今天解决,就跟对方说行啦我知道了之后我再处理吧,结果对方说什么排号排到了我这里让我尽快处理最好就马上处理,让我下了个叫什么 TeamPro 的协作软件,我下完后开始觉得不对,这个软件明显和火币没什么关系啊,问对方对方也没正面回答就是翻来覆去说你赶快处理,我想着不是说不能交易嘛,马上打开火币提现了 100 个 USDT,告诉对方我能正常交易啊,对面很震惊说不可能啊,只能说演得真好吧。

18:30 雪

到晚上六点多的时候,已经下起雪来了。

2021-11-09 周二

17:30 拉新

接到一个电话让我加一个股票交流群,很直白就说是在完成拉新任务,让我在群里待两天就行,给我 3 块钱红包,爽快。

18:52 第三历史决议

百年党史革命、建设、改革的豹尾已经收官,全面建设社会主义现代化国家的龙头正在开启。中华民族迎来了从站起来、富起来到强起来的伟大飞跃,实现中华民族伟大复兴进入了不可逆转的历史进程。

23:27 工具

将自我看作工具的一个好处,是可以摈弃掉各种主观偏见,借用自己熟悉的领域知识(于我而言是计算机科学)来建立相对稳固、自洽的认知体系。比如说我目前是这样看待自己的:我是一个用庞大的编码量编制出来的智能系统,并经过了 30 年脏乱的数据训练,由于编码上有大量的不良设计和错误,加上训练数据质量不够好导致存在偏见,因此虽然勉强能够运作,但也经常出现 bug;这个系统的意义就在于处理接收到的数据,也因此这个系统的目标是能更好地处理数据 —— 至少要让 bug 越来越少;这个系统的优化方法,一个方向是在编码上着手以优化底层架构,另外一个方向则是用更多更丰富的数据训练来进行优化。如果我想,我完全可以把这套认知建立在数学、物理学、文学、中医、迷信、真香、下次一定等各种事物上,当然后面两个过于简单未必能撑起来一个自洽的系统,单纯是用来举例的,如果真有人用他们构建自我也不是不可能,不过大概率非疯即傻。

2021-11-11 周四

21:10 煎蛋

买的绿帽子煎蛋卫衣到了,试穿了下还蛮合身的,好看。

21:20 危

凌晨的消息,海淀有一个病例,离我住的地方也就五六公里,下午的时候 C 说他们附近小区开始组织测核酸了。我下班回去路上,小区后面空地上也看到了核酸检测的队伍,工作人员想凑够五个人,招呼我问我要不要做一下,还强调说免费的,不过后来里面说五个人凑够了,于是门口的小哥说让我想一下如果要测的话还得等四个人,那我就算了。简单聊了两句,说主要是在给商超里的人做检测。

2021-11-12 周五

10:10 冷漠

上班,到站的时候被比较暴力地挤出了车厢,觉得没太大必要啊,那个站好多人下的,着急那几秒钟干啥呢,不过还好,大部分时间大家还是平和有序下车的。这种上班路上匆忙的状态,人是会变得冷漠甚至暴躁,但我时常会想起几年前一次不知道去哪里时坐着的一个姑娘大概是看我比较累把座位让给我这件事情。

19:00 批评

开组会,领导(比较温和地)批评一个同事的工作没有规划没有产出,同事也有点委屈有点情绪,我大概也可以理解,纯做算法工作而无业务项目,是很容易陷入到一种长久没成果的状态里。

23:50 陌生人

晚上去吃南门涮肉安定门店,还来了 XKL 的两个朋友,都住在 XKL 附近。吃饭吃得有点紧张和尴尬,三个女性聊得很多,其他人偶尔能接一两句话吧。虽然有些紧张不自在,但观察到自己面对陌生人时的心理状态和反应,也挺有意思的。

2021-11-13 周六

20:45 外甥女

堂姐跟我说她女儿上高一后考得很差还哭了,请我去和她聊一聊。我和这个堂姐感情很好,但这个外甥女小时候比较怕生见得也不多,开始还担心会不会不愿意和我聊,加了微信后斟酌了许久写了一大段近千字的内容发过去,没想到她还看得下去聊了一会,可能是因为我理解学生时代的那种压力和心情,也表示出了尊重的姿态吧。她说她爸妈给她很多负能量,感觉我们那能当好家长的就没几个,这也是我们的命了。

2021-11-14 周日

17:33 日落

去河边走了走,行人从身边流过,年轻的妈妈拿着两片大叶子逗弄儿童车上的孩子,一只萨摩耶领着短发的女主人在跑步,被家长拽着后领防止掉下河的两个小孩趴在栏杆上看着水里的鱼儿乐不可支,两位阿姨一人站在路边一人站在干涸的水沟里讨论摄影技巧,两位男子谈着国家大事严肃地路过……夕阳从天边慢慢落下去,感觉很难过。

sunset.jpg

  •  

闲言碎语(2021/10/25-2021/10/31)

2021-10-25 周一

10:10 关怀模式

微信也有关怀模式了,就是文字、图标和按钮都更大的那种。

12:35 贝果

从 ZZ 那订的五个贝果(原味/黑芝麻/花生酱各一个及肉桂葡萄干两个)到了,查了下,贝果之所以叫贝果是因为英文名叫 bagel,是个音译,其实没有贝也没有果,看到非音译的中文名叫硬面包圈,这个就很好理解了。

23:57 冰冷

周末和朋友聊天,她说:

你内心太冰冷了,老是给人一种拒人于千里之外的感觉。

我是有察觉这点,但还是第一次有别人说出来,今天在想这个事情。首先,是不是呢?不太好说,我内心戏其实还蛮多的,但是确实会下意识地克制自己不怎么去表现出来吧,而且确实在一些至今仍然印象深刻的事件中表现出极大的冷漠;其次,这种状况我是否想要改变呢?确实是想的,因为这会阻碍我和环境的交互不利于自我的改进;然后可能的阻碍主要是是惯性和试错成本吧,具体的实践方法我目前并没有什么很好的思路,不过多感受、多表达,应该不会错。

2021-10-26 周二

08:50 壳聚糖

早上吃饭把口腔内部右侧咬破了,当时只是觉得有点疼,刷牙的时候吐了一口血出来吓了自己一跳,赶紧翻出来去年口腔溃疡时买的贴片贴到伤口上。看了下说明书,是一种壳聚糖成分,可以由几丁质(甲壳素)经脱乙酰化作用来制备,没有药物作用,在我这个事情上就是单纯帮助止血、防止口腔粘膜进一步损伤。

10:33 做T

上班路上做了个 T,赚了 300,还不错。

13:38 度小满

从微众银行转了点钱到度小满里,薅点新用户羊毛。

21:00 偶遇

在 15 号线遇到了前同事 WY,他说现在在一起作业网,教育公司嘛现在比较惨,说正在找下家准备跑路。

2021-10-28 周四

14:37 吐司

ZZ 提供吐司预订了,之前试吃过柠檬乳酪吐司挺好吃的,这次我本想预订一个柠檬的一个牛奶吐司,但是数量有限我只能订一个了,就订了个牛奶吐司。

20:30 照片

姑父又打来了电话,还是说上次那位介绍的学姐的事情,说让我发张照片给他他给对方看看,搞得还挺正式的,要我说要是双方都不抗拒先加个微信聊聊呗,这才哪到哪啊。

2021-10-29 周五

22:05 失控玩家

  • Buddy: So what do we do
  • Guy: Whatever we want

以前我们在《异次元骇客》和《黑客帝国》里讨论何为自我、何为真实和虚假,《失控玩家》虽然借助了类似的概念,但更像是一个成年人的童话,借着 Buddy 和 Guy 的问答,想像一个自由自在想做什么都可以的乐土,这可能是人类自古以来一直都有的共同愿望,新瓶装旧酒,看着乐呵就好了。

22:20 元宇宙

Facebook 改名 Meta 了,可以预见元宇宙这个概念还会继续火下去,感觉现在这样的态势,如果黑客帝国的世界真的降临了,自愿插上管子进到矩阵里的人怕是不会少。

2021-10-30 周六

17:30 No Time To Die

下午去看了新上映的《007》,挺好看的,主题曲部分很好听,回来后查了下原来歌手是 2020 年格莱美奖五项大奖得主,嗯,我喜欢她的声音。

看完电影慢悠悠骑车回去,一片半黄半绿的银杏叶过早地落了下来,打了几个旋落在了车框里。

2021-10-31 周日

11:11 DAO: 分布式自治组织

在区块链技术上衍生出来的一种组织管理模式,挺有意思的。由于技术普及程度、法规等个方面的限制,短期内大概不能替代现代公司,但是用来作为一个开放社区的管理模式感觉还挺不错的。

22:28 分类

梳理了下自己的知识管理体系,把内容分成了资料、笔记、知识体系三大块:资料是指用 Zotero 统一管理的文档,本地化存储,每个资料都具有唯一 URI,可以方便地引用;笔记是对资料的解读、理解、感受以及在学习、建立某个知识体系时所做的记录、产生的理解,准备统一用 org-roam 管理;知识体系目前还没个谱,期望是一个精心维护的、严格结构化的数据。以前的笔记往往三者混杂,这两年逐步形成了 Zotero 和 org-mode 配合的习惯,前两者其实已经区分得比较好了,主要是在笔记和知识体系之间摇摆不定,还是分开来想好一点。

23:00 十月总结

时间使用情况:

  • 休息时间 263 小时,平均睡眠时间不算低,不过我看了下,基本上都是周末多睡导致的,工作日的平均睡眠时间还是不够 8 小时,而且我的睡眠质量还比较差
  • 日常行为 139 小时,比前几个月多出来十几二十个小时,因为这个月我还是花了一点时间去处理 RSS 的
  • 休闲时间 106 小时,没什么好说的
  • 工作时间 116 小时,一共 15 个工作日(我 10.11 才回去工作),所以日均工作时间是 7.73 小时,感觉挺累的,我负责的项目基本上就是我一个人在推进
  • 社交(聚餐/电话/网上聊天)时间 9.5 小时,显著低于过往几个月,这个时间的减少大概也是因为工作
  • 花了 20 个小时来记账,简直离谱,主要是 8 月和 9 月有一个多月没有及时记账,国庆第一天就花了 7 个小时来记账,其实说是 20 个小时,但中间有大量的记着记着就走神了去看视频看 RSS 的时间
  • 在写作上只用了 3 个小时,因为只写了三篇文章,两篇“闲言碎语”,另外一篇也没花什么时间

工作上主要在推进项目,彻底沦为后端开发哈哈哈 —— 不过也学到不少东西,比如说 K8S、Django 我都比以前熟练很多了,所以我并不讨厌这样的事情。一个人做项目,虽然累,但也不用被效率不行的队友拖后腿,有什么想法马上就能去做,还蛮爽的。

投资方面,本月收益率跑赢了所有市场指标,本月累计收益金额在 10 月 26 日这天达到最高点,但离 9 月 13 日的今年最高点还是有一点距离。如果把证券账户从统计中剔除的话,会发现我的当月收益率和今年累计收益金额都大大下降,因为这个把月来大部分的指数走势都不怎么好,相反我场内重仓的招商银行,在三季报发布之后股价开始迅速地逼近了历史高点,为此带来了更高的收益,招商银行的股票我还会继续持有下去。

20211101_230617.png

生活上没有太大的波澜,希望十一月也能继续平淡,平淡的、日常的每一天是最难得的。

  •  

北青深一度和谷雨实验室全文RSS

之前《我制作的微信公众号RSS》这篇文章的评论里,有网友反馈了一些希望输出 RSS 的信息源,捡了两个看着顺眼的做了下。

北青深一度

地址:https://feedpress.me/bqs

制作步骤:

  • 找到北青深一度的网易号页面:https://c.m.163.com/news/sub/T1477387792079.html
  • 在 Inoreader 中添加订阅源,输入这个地址,会显示这不是一个有效的 Feed,然后点击「创建 Rss 订阅源」,按照提示创建

    20211031_132837.png

    不知道为什么,我今天想重现这个过程,老是显示「我们无法抓取远程网站」,所以无法给出后续步骤示例了。

  • 由于这种方式创建的订阅没有公开的 RSS 地址,要给别人用的话不太方便,好在 Inoreader 提供了对目录输出 RSS 的功能(限 Pro 用户),因此在 Inoreader 里新建了一个同名目录,把这个订阅移动到这个目录里,右键选择获取 RSS 订阅源就可以得到可以公开使用的 RSS 地址了

    20211031_133912.png

谷雨实验室

地址:https://feedpress.me/wx-guyulab

制作步骤

  • 用我的个人微信订阅「谷雨实验室-腾讯新闻」这个公众号,并记住公众号 guyulab
  • 在 Telegram 上将这个公众号关联到我专门的群组里
  • zs 生成 Huginn Scenario

    zs-rss gen-wx-scenario -n 谷雨实验室 -i guyulab -o wx-guyulab.json
    
  • 登录 Huginn 导入创建好的 Scenario
  •  

闲言碎语(2021/10/11-2021/10/24)

2021-10-11 周一

17:37 Firefox Relay

Firefox 提供的一个服务,可以生成一个邮箱地址,所有发到这个邮箱的邮件会转发到用户指定的邮箱里,这样就可以避免用户真实的邮箱地址被泄漏了。我以前注销了 Facebook,今天用 Firefox Relay 生成的邮箱重新注册了一个。

firefox_relay.png

2021-10-12 周二

13:57 调仓考虑

看 18 年到现在天宏中证银行ETF联接A和华夏中证500ETF联接A的比值,已经过了一个低点开始往上走,一方面是中证500今年持续涨了很久了,另外一方面是中证银行一直出于低估有估值修复的可能性,所以我在想,要不要把一部分中证500卖了换成中证银行?不过今天看场内500ETF在跌而银行ETF在上涨(虽然涨得不多),今天调感觉有点吃亏,到周四或者周五再做一下决定吧。

嗯,场外买卖不要太频繁,可以考虑以周为单位在每周的固定时间进行交易,这也算是一种交易纪律了,能建立起来这个习惯应该会不错。

compare_fund_001594_007994.png

22:33 对话

  • 来啦!还有酸菜、豆角的,其他的没了
  • 酸菜来两个,豆角来两个,粉条的还有吗?
  • 哦对,粉条的还有 —— 你好些天没来了
  • 假期就自己做着吃啦
  • 自己还会做啊
  • 嗯,那可不得自己做,不能天天吃外卖啊
  • 那是不能
  • 多少钱
  • 10 块 5,好几天没来价钱你都不记得了
  • 哈哈,以前也不记得,就记得大概
  • 下次得记得哈,要有点默契

2021-10-13 周三

17:17 留言

接到联合国儿童基金会的电话,聊完了让我填写一个问卷调查,结尾问:对于孩子们和联合国基金儿童基金会的工作人员,您有那些期待、鼓励或想说的话?请留下您的心声吧(这对我们很重要!)

花了点时间想了想,最后写了这么一段话:人类的未来这种话对孩子们来说是过于沉重的责任,我觉得爱、真、善、美才是让世界变好的希望,希望孩子们能感受到善意并也以善意回报身边的人,健康但普通地成长就好。

22:35 消息

今天得知 ZF 要离职了,说是是心理状态、情绪很差,之前大家其实也有所察觉毕竟他一直都表现得很丧嘛,加上我和他聊过几次知道一点他的价值观和想法,得知这个消息也不算很震惊,毕竟一个钱也赚了不少了又没法从赚钱中得到满足感的人,如果工作内容本身不够有吸引力,那么离开也是迟早的,或许我也会有这么一天?开完会和 DS 一起去和合谷吃午饭也聊了一会这个问题,DS 是很有责任心的人,觉得 ZF 不应该影响到工作或者说至少应该在影响到工作前及时表达出来,各有各的道理吧。今天工作内容很饱满,没有别的事情,平淡的一天。

2021-10-14 周四

22:29 执念

今天发现我又放下了一个执念,就是「希望能有一个人非常理解我」,一来这极其困难,二来自己都还没有足够理解自己呢。不过这并不是悲观的想法,只是一个观念的转变吧,而且因为预期降低了,有时候和人在一些非常非常微小的点上能共通时,也会非常地开心。

23:51 现金

把现金部分也纳入到 keysersoze 的管理范围里了,这样我就能看到我除了加密货币和公积金外所有其他资产的总体增长状况了。

keysersoze_cash.png

2021-10-17 周日

09:28 梦

梦到几个大学同学开了公众号,在朋友圈分享来着。工作后因为自己的性格就渐渐地和别的城市的同学少了联系,偶尔还是会想念上学时和同学们的关系的,会做这个梦,可能和昨晚看了一个视频有关系,一位 97 岁的哲学家讲述临近死亡时的恐惧和孤独感。

09:48 港美股入金

华美银行可以轻松网上申请开户,Google Pay 可以绑定华美银行进行支付和收款,Coinbase 可以使用 Google Pay —— 所以有加密货币的话,可以转移到 Coinbase 里然后卖出到 Google Pay,然后通过华美银行给港美股账户入金。不过我试了下,Google Pay 注册的时候不认 Google Voice 号码,Coinbase 一进入到交易页面就显示「我们遇到连接问题」,我猜 Coinbase 和 Google Pay 都有别的可用替代品。

17:27 豆瓣

豆瓣帐号原来关联的自己的 Gmail,今天给解绑了,想着反正都绑定了手机号,要不绑个微信看看,结果发现 2018 年的时候我用现在这个微信号创建过一个豆瓣帐号,只好注销掉再绑定了。想把各个绑定了 Gmail 的国内平台帐号都解绑,不过也不是什么着急的事情,看心情来吧。

19:52 传记

最近有看点传记的想法,不是看某个人,就是找很多个人,都看看,最好是和我专业无关的、不熟悉的那种人,看看别人是怎么应对生活的,比起天天自己在想可能会有意思得多。

20:05 改变

发现我已经不太容易看得进去 NLP/DL 的东西 —— 一方面是挺久没有直接做相关的工作了,另外一方面是从事多年工作之后对结构工程、模型翻新已经开始有点厌恶。

21:46 链接

在 Youtube 上看到《互联网体检》这个小品,太有意思了。看完突然想,Youtube 不知道有没有提供链接到视频特定时间点的方法,一查果然是有的,具体来说,在需要的时间点暂停,在视频上右键,然后点击「Copy video URL at current time」就可以,比如下图中我得到的链接是 https://youtu.be/kOYrj2wG63E?t=88 —— 仔细观察,这个链接其实是在原链接上加了 t=88 这样一个后缀,对应着视频第 88s,很好理解

youtube_position_link.png

嗯,接下来发现 Bilibili 也支持这个特性,比如 https://www.bilibili.com/video/BV1Px411c7RM?t=100 这个链接会跳转到视频的第 100s。

bilibili_position_link.png

其他视频平台的话,简单试了下:

国内平台除了 Bilibili 可能都不支持这个功能,不过无所谓了,Youtube 和 Bilibili 能覆盖我看的绝大多数视频了。

2021-10-19 周二

10:01 寒冷

我喜欢秋冬寒冷的天气,会让我冷静下来更好地思考问题,今天上班路上就久违地开始思考一些事情了。

23:57 时机

午饭吃饭,LY 好是抱怨了一通工作内容,我们各自也觉得方向太多人太少,多少有点抱怨。晚上和 LY、K 去吃烤肉和烤鳗鱼,LY 又稍微抱怨了两句,看得出来他心理压力很大。我也没什么可说的,但这半年多来,也确实感觉有各种问题吧,就像我之前写过的一样,是很充实,但如果自己并没有变得更好,那么这种忙碌就没有太多意义。早上我就在想,我想变得更好,那我就需要更丰富的环境(以及环境的反应)来激发、训练和检验自己,这个问题我也会持续思考并且进行自我观察,时机到了的话就顺其自然吧。

2021-10-21 周四

23:49 零公里

和 LY、K 下班后去了炎黄艺术馆新开的一家叫做「零公里」店,点了 TOP3 的宜宾燃面、李庄白肉、酒都肥肠以及三江豆腐脑花和一个老妈蹄花,燃面比常去的望花路燃面扁平很多,也不像望花路燃面那么湿,好像是 7 块钱一两很便宜,我们点了二两;白肉一片片都超大,夹上一片铺在盘子上看着就很有满足感,再自由发挥一下把肥肠、脑花放上去卷起来吃 —— 额会稍微有点腻,如果有点蔬菜什么的搭配一下会更好;酒都肥肠非常好,和去年百花山奔走 25 公里后在百花人家吃的肥肠一样毫无缺点;豆腐脑花很下饭但前面我一直在对付白肉和非常,导致我的米饭居然吃剩了。

2021-10-22 周五

23:08 二刷零公里

今天二刷零公里,相比昨晚,多喊到两个人凑上了五个人,点了昨晚吃过的李庄白肉、酒都肥肠和宜宾燃面,还点了小院跳水菜、花生浆菜豆腐、宫保脆皮肉、富油黄粑、陈皮兔、乡味腊肉和鲜椒热窝鸡。花生浆菜豆腐是一道汤菜,顾名思义,它的汤可能是加了花生打成的浆,花生的香气非常浓郁,喝汤的时候也能尝到细细的花生碎末,非常有特色;宫保脆皮肉外观色泽上有点像东北的锅包肉但口感完全不一样,很薄(相比锅包肉)又特别酥脆,轻轻一口下去就能咬断,里层肉的味道和油脂就出来了,咬断口能明显看到分层,但口感上却毫无感觉,很神奇;富油黄粑就是粽子的口感,没啥特别的;陈皮兔陈皮味道很淡,没啥特别的;热窝鸡是先煮熟再炒的做法,这种形式和我家里的做法是一样的,很家常亲切的味道。昨晚三个人半小时吃完,今晚也特地看了下时间,20:42 上的第一道菜,吃完用时 31 分钟,不愧是我们!

吃完结帐,一个经理还是店长之类的男子过来表示抱歉,但我没听到前面实在没搞明白是抱歉什么,大概是说我们吃的时候服务员也在吃饭了服务不周之类的吧,但我其实还蛮喜欢看到饭店员工们一起热热闹闹吃饭的,因为这种店的饭菜一般都好吃。完了他还送我们到店门口,豪气地说要以北京为起点辐射全国,能跟仅仅是顾客的我们讲这种话,不管信不信,但还是挺开心的。

他们家菜单特别厚,有很多在北京川菜馆没见过的特色的菜,所以准备多去几次都尝试一下,希望他们能经营下去~

2021-10-23 周六

22:00 克苏鲁

开始看《克苏鲁神话》!

2021-10-24 周日

21:30 沙丘

昨天买了《沙丘》的票,于是三点多出了门往小米总部附近的五彩城购物中心去,早些年住上地的时候也会去,所以还蛮熟悉的,只不过这会是从另外一个方向过去。16:20 的场,16:11 到了电影院,取完票就检票进去了。电影还是不错的,剧情基本尊重了原著,大概是小说第一卷的内容,虽然搞什么先知、预言不是我比较喜欢的故事,但也是合格的;画面很美,沙虫和一些巨大建筑很有感觉,在一些细节上展现了书里的设定,比如收集呼吸中的水蒸汽、汗水、泪水(甚至还有那啥)来循环用水的服装和帐篷、竖起大耳朵来收集露水的沙鼠,还有哈克南男爵因为过度肥胖无法行走只能给自己加了个便携式浮空器能让自己飘起来这个事情,电影完全没解释,我听到旁边的人说妖怪笑死了;音乐太吵了,大量的画面明明安安静静就好了,非得加上节奏特别急促的 BGM,我明白想要渲染紧张感,但是太刻意太吵了。

看完电影出来去优衣库买了两件衣服,犹豫了下要不要在商场吃饭,不过看了下都不太适合一个人吃就算了。

  •  

闲言碎语(2021/09/06-2021/10/10)

2021-09-10 周五

09:01 R.I.P

得知关注的那位推友已经去世。

2021-09-11 周六

21:34 仓位

今天又给 keysersoze 写了点代码,一个是加上了仓位变化曲线(下图右侧是仓位的坐标):

keysersoze_return_with_position.png

今年以来收益还可以,我一直觉得是我把仓位提高的原因,从上图来看累计收益和仓位是正相关的,算是验证了我这个想法吧。

然后就是在首页加上了各个账户的柱状图,这下写总结的时候可以直接截图而不是临时写代码去绘图了。

keysersoze_return_bars.png

2021-09-12 周日

09:34 无根之草

从龙崎那知道的,想玩,发现豆瓣上没有对应条目呢,索性去创建了一个,这还是我第一次在豆瓣上创建条目。

22:23 今日回顾

今天久违地做了一次饭啦,上午在叮咚买了点菜,中午做了个蒜蓉蚝油红薯叶和青椒炒鸡腿肉,并把昨天剩的那块鳗鱼蒸了,中午吃了个肚皮饱饱,照例剩了菜在晚上吃。明天早上的话准备炒个西红柿鸡蛋再搞个水煮西兰花,主食的话打算空气炸锅扔个红薯进去。工作虽然很忙,但偶尔过得好一点还是可以的。

今天一整天都是在玩,除了花了半小时把要写的一篇博客的思路捋了下外,没做什么其他正经事情。开始玩血源诅咒了,不过第一个 BOSS 都还没见着哈哈。

明天又要开始工作了,心累,早点休息吧。

2021-09-13 周一

10:13 早饭

昨晚还兴致勃勃地准备今天早饭的东西来着,结果 7 点闹钟响了后再眯了会就 9 点了……

2021-09-17 周五

08:02 噩梦

梦到有两个不熟的朋友带一个他们的朋友突然上门玩,有一个朋友要玩我的电脑,我不让但他偏要玩,我发火了让他们滚,他们起身穿鞋有一个人找不到第二只鞋。我和他们一起出了门,回的时候却找不到路了,在饭店大堂、阴森的小巷、熟悉但就是没有我的门牌号的楼道组成的迷宫里徘徊寻找。找没找到不知道,反正醒过来了,看到早晨鲜红的阳光从阳台透过来,听到忘了关的空调吵闹的嗡嗡声,手一伸摸到了手机,顿时安心下来。

做了噩梦,有时候会很害怕、很难过,有时候也会庆幸那些恐怖的事情只是在梦里发生。

08:11 桌角

左腿大腿外侧撞到了桌角,又要带着淤青好一阵子了。

08:45 锚

变化和混乱永恒存在,每个人都像是汪洋大海里的孤舟,除了组成船队互助,另外一个办法是备好船锚,在风浪到来的时候能够牢牢地固定住自己。伟大的理想、稳定的工作、钱……有很多东西可以成为锚,但除了这些大的、表面很有用的东西外,还有很多东西也可以,比如清晨的阳光、书页的芳香、夏天的风、冬天的雪、山巅壮阔的风景、熟悉的老店……越多越好。

2021-09-18 周六

20:00 学姐

下午开着会的时候姑妈打电话过来说要找我聊点事,因为正在开会和工作没有办法抽出大段时间,就简单聊了两句约下班后再聊,下班后刚到地铁站又接到了电话,和我猜的一样,说是觉得有个合适的姑娘看我们要不要聊一聊,还是高中时候的学姐。以前我对这种事情是比较抗拒的,现在觉得只是聊聊无所谓嘛。当然,说还要去看一下对方愿不愿意聊,兴许就没有后续了也说不定。

2021-09-20 周一

22:56 今日回顾

昨天约了 ZCH 见面吃饭,结果上午一直在下雨,有那么一会还犹豫了下要不要改时间,但想着还是今天把各种事情处理了比较好,就作罢了。出门被风一吹觉得冷,看了下气温才 16,于是把垃圾扔了后回屋换了厚点的外套,坐 8 号线往南到鼓楼大街站转 2 号线到了安定门,从 A 口出去后往左一直走就到了。

他比我先到,不知道是因为雨天还是什么,壹圣元人特别冷清,我一口气点了鲜鸭血、嫩牛肉、小酥肉、黄喉、毛肚、鲜豆腐、平菇、白萝卜、土豆,点多了最后没吃完,就把剩的平菇、土豆、小酥肉还有个什么打包了。两个人都是那种宅、内向的人,聊天没有很热烈,我主要聊了我做记录、做金钱预算的事情,感觉是有点用的东西,技术上的东西没啥可聊的。最后花了 350,果然是点多了。

吃完饭他坐公交我坐地铁,同走了一小段,他先到公交站,我继续走到了地铁站。2 号线转 8 号线的换乘路上,又遇到讨厌的辅警查身份证,我掉头去了另外一个换乘口,果然没人查,哼。回到家后又玩了会血源,然后开始准备给表弟要讲的东西,到七点的时候特别饿,可能是因为中午没吃什么主食,于是把包子热了两个吃了。八点半的时候表弟还没回我消息,后来说临时有事在处理,所以我继续等到八点四十多开始讲,到九点十几二十的时候就讲完了,并且录了视频。

今天就是这样啦。

2021-09-21 周二

22:44 今日回顾

问了下弟弟这三天的去向,去理了发,和爸妈打了电话。

明天又要开始上班啦,不开心,早点睡觉吧。

2021-09-23 周四

21:28 二建

我爸打电话过来,说在手机上看视频小说的时候看到了二级建造师的广告,加上周围有一些朋友也在说这个事情,有点心动,让我查一下相关的信息看靠不靠谱。我反正觉得挺不靠谱的,还好能来问我。

2021-09-24 周五

22:31 秩序

不管发生什么事情,保持生活的秩序,就能保证稳定住自己。但如果连生活的常态都无法维持了呢?

2021-09-25 周六

08:18 无眠

昨晚翻来覆去到很晚 —— 三点多才睡着吧,醒来后仍然觉得难受。虽然糟糕的事情现在未必能说发生了,但是有很多问题,我过去确实是在故意回避视而不见吧。有时候会想,为什么要让我来到这个世界承受这些呢?分外无助的时候,偶尔会觉得如果有个人互相支撑确实会比较好,双活容错负载均衡嘛。

10:48 生活

读到和菜头的《看完两边走中间》,心情稍微平静一些了,坦然接受自己的无知无力、生活的无常,这是这两年来我在努力做的事情,迄今为止我做得很好,保持下去就好了。

19:15 平静

写了篇博客,和朋友见了面吃了饭,终于感觉平静下来了。真要有事,也不是我在这急这一会有什么用的,没事的话我就更是干着急了。

2021-09-26 周日

08:33 梦

梦见我飞过山岗,地面有一堆奇形怪状生物的群落,他们飞上来要抢飞行器,被我不知道在哪里的友军击毁了。我飞进了一栋建筑里,熟练地穿过一间房子进入楼梯区域,然后在楼梯回环的空隙中直接垂直向下飞了几层到达一个有很多人的房间,穿过众人背后的小门到了一个狭窄的过道,然后进了电梯,电梯里有两个人,我和其中一个隐晦地聊了几句互相威胁对方,一起出电梯的时候,剩下那个没出电梯的人在电梯门合拢时的缝隙瞥了我们一眼,按下了录音笔的结束录制按钮,我和一起出电梯那个人打了起来。

22:34 降温

和爸妈打电话游说他们来北京,感觉是接近成功了,然后最近两天的焦虑也降下来了。

2021-09-27 周一

23:42 今日回顾

中午去探新店吃了裕兴记,平平无奇还吃出了 52 的人均,这价钱能在红京鱼吃到撑哇。

下班路上在 Inoreader 上读 RSS 来着,看到 hankcs 昨天发了一篇新博客,说自己不开心,点开想看全文却 404 了,当时还在路上没法去追溯,也没想太多。到家后打电话给我爸,询问来北京玩的事情,我爸说和妈聊过后都愿意来北京玩,但是前阵子我妈被狗咬到 4 号要打第二针狂犬疫苗,不知道该如何安排,说准备明天去询问下医生看能不能提前一两天打或者不打(觉得可以不打是因为伤口很浅几乎只有牙印)。打完电话想起 hankcs 的事情来,想着他的文章虽然删掉了,但作为一个还比较知名的网站应该 Google 有生成网页快照,去搜了下果然搜到了,看了内容顿觉不妙,觉得整篇文章都在发送求救信号,但是找了一圈都找不到对方的直接联系方式(邮件/电话/社交网络私信渠道),着急之下到 NLP 群来了个群发,直到有人发了一个疑似他团队的人的联系方式,我犹豫了下加了微信,但没有得到回应,干脆打了个电话过去说明情况,还好对方确实能联系上 hankcs,并告知我对方人没事。之后 hankcs 给我发了一篇简单的感谢邮件,说自己「已经完全恢复了」,但我觉得,一个昨天还通篇宣泄绝望情绪的人,怎么可能就「完全恢复」了呢?于是又啰啰嗦嗦写了一大堆话,也许我是反应过度了吧。

2021-09-29 周三

22:19 熟悉

包子铺的老板已经记得我不吃茴香了,希望她的店铺可以一直开下去。

2021-09-30 周四

13:33 景点

故宫只能买到 7 号的票了,颐和园、圆明园、恭王府倒是还都有票,不过向来人都会很多。这些都是从北京本地宝看到的,然后从各个地方进出京是否要做核酸检测这些,在北京本地宝上都能查到,还是很方便的呀。

2021-10-01 周五

22:16 记账

有一个多月没有整理日常开支的账单了,有点混乱,今天花了大半天时间来整理他们,算是基本上记录、校验完了,但是信用卡账单部分因为支出和还款的时间间隔比较大而有点乱,还需要进一步梳理细节。

2021-10-03 周日

20:01 公益

B站看到一个支教的姑娘的视频,就去给联合国儿童基金会开了个每月定期捐助,只用出钱可以,真是偷懒啊。

22:10 明天

明天准备早起,开始全力为父母来北京的事情准备,希望能把这个国庆过好!

2021-10-05 周二

23:48 接站

火车晚点了十几分钟,接到爸妈的时候已经快十点了,然后发现我爸提着一箱带给我的东西,我拎了下挺沉的,就挺无语的,电话里反复说不要带太多东西了……接下来没啥好说的,9 号线转 6 号线转 8 号线,我爸赞叹地铁通风和光线很舒服,我妈则感叹地铁生意好,然后跟我念叨说玩个两天就回去,听到我酒店订了五天两人纷纷表示可以住你那为啥要订酒店还一订五天啊 —— 他们不想待太久,一方面是不想花太多钱外,但他们大概不知道酒店的钱也就和一个人过来的车票钱差不多;另一方面是,因为怕家里东西没人照顾把我外婆叫到了我家,就担心年岁已大的外婆一个人在家能不能照顾好自己。出了地铁后发现下着不小的雨,还好酒店就在边上,办完入住我爸拎着东西和我一起到了我住的地方,因为里面有肉必需得放冰箱,一路走来把鞋也弄湿了,如果少带点我自己就能拎过来就不会这样了。火车上我爸没吃,我从冰箱拿了香蕉和苹果让我爸对付一下,拆了箱把肉类都放进速冻,就下楼把我爸送到了小区门口。

挺折腾的一天,后面还有四五天,加油吧。

2021-10-06 周三

19:54 第一天

今天爸妈到我住处,一起做饭吃饭聊天,早饭做了米粉,中午炒了野猪肉(啊吃野味不好但超好吃耶)、芥兰,做了芋子粥(超香),晚上炒了鸭杂。聊了一整天的家常,感觉好累,今天早点睡吧,明天去天安门和恭王府。

2021-10-07 周四

20:00 第二天

今天带父母去了天安门,走在对面路上的时候,我父母都有点失望地说「感觉天安门不像电视上那么雄伟壮观」,不过到了金水桥上还是开心地各种拍照。本来是打算去了天安门后再去南边的毛主席纪念馆,结果天安门的路线是单向的,不允许原路返回,绕回去的话时间就不够了,就把预约取消了,走去了北海公园散步,教了他们怎么拍全景,拍了鸳鸯、坐了轮渡。从北海公园出来后去德胜门内大街的峨嵋酒家吃了午饭,然后由于我爸兴致勃勃地说想看看胡同,就走兴华胡同去了恭王府,其实胡同也就那么回事啦……恭王府是挺豪华的,我们在里面迷路了几次,到后花园又迷路了几次,某个展厅里说大观园原型可能是恭王府或者至少参考了恭王府,这个我以前不知道,算是有收获啦。

2021-10-08 周五

20:14 第三天

父母昨天表示还是想看看毛主席,于是再次预约了今天,比昨天方便的是今天天安门东站和天安门西站都开放了,就在天安门西站下车,得以少走一点路,因为时间还没到就在天安门广场上闲逛,看大花篮、人民英雄纪念碑和站岗时偷偷玩手机的武警小哥哥,顺便找一个好心、时髦且对拍照质量要求比较高的阿姨给我们拍了个三人合照。时间快到的时候去问了下工作人员,才知道要去毛主席纪念馆瞻仰,必须先到东边马路对面国博那里把包都存了,让父母在广场上等着,我一个人过去把包存了,存包处要求游客展示预约单才能进去存包但很多游客要么没预约要么预约了找不到,各种原因交织下工作人员火气很大,我当然是做了很多准备工作顺利完成各项手续,然后回去排队飞速完成瞻仰仪式。完了去前门小吃街廉价便捷地让我父母了解北京的一些基本元素,非常凑合地在东来顺让我父母了解了下铜锅涮肉,并被 LY 强烈谴责,但也没办法啊,带着两个在北京没啥自理能力的孩子,实在是没有精力去精心挑选吃食,更何况昨天人均 70 的峨嵋酒家还被我妈念叨了一路直到晚上。下午去了故宫,很明显刚进门后父母被宽阔的大广场、宫殿群震撼到了,但是看完三大殿到后面乾清宫、交泰殿、坤宁宫的时候就有点审美疲劳了,不过钟表馆和珍宝馆还是让他们惊叹连连,虽然到后面也麻木了,只是在出来后多次表示「皇帝的生活真是无法想像」。回程路上我妈突然蹦出来一句说想找个地方买北京特产带给亲戚,我血管都要爆了,中午逛前门的时候我都问了几次要不要买点特产带给亲戚那个时候明明说不要,想一出是一出真的和小孩没两样,于是我在 8 号线到鼓楼大街的时候说要不干脆下车我去找个店买吧,大概是觉得太麻烦我了又忙表示说不要了就是看看我住处附近超市有没有有就买没有就算了,我爸开始数落我妈,我赶紧阻止他习惯性讲各种大道理长篇大论以免形势进一步恶化,要我说我爸那些官场小说真的是白看了,当我责备我妈的时候,他应该声援我妈来达成平衡啊,两个人处不来真的是两个人自己都有一大堆毛病偏偏还都觉得是对方的问题。

回到住处后,为了解决问题,就去附近永辉超市带我妈逛了一圈,买了明天火车上吃的东西,顺便看了一下确实没有什么烤鸭之类的卖。然后在附近湘菜馆点了菜,并被父母大加赞赏表示好吃和家里味道差不多,最后珍珠丸子剩了三个我打包带回来了。累啊,不过明天就能送走他们了,我可以休息了。

  •  

我的生活记录经验及个人工具与方法

中学的时候,我开始写日记,记录琐事和当时再正常不过的一些小心情,就这么一写一直写纸质日记到 2020 年。工作之后,我把上学时候写的日记也带在了身边,不过中学时候的只剩了高三复读时候那一本,早先的记得应该是被我以一些现在看来蠢蠢的理由烧掉了。偶尔兴起会翻一翻自己的日记,重温当时的一些感动,记得有一年翻日记翻到和大学同学的事情,觉得特别感动,没头没脑地给同学发了条信息说「想起当时的XXX觉得好温暖啊」,对方大概会觉得莫名其妙吧。

diary.png

图1  我的纸质日记

我经常想起曾经朋友见到后会说的两句话,一句是“你变了”另外一句则是“你一点都没变”,每次听到这两句话,都特别想问问,对方看到我没变的东西是什么、变了的东西又是什么呢?当然,有些人我可能永远也没有机会去问这个问题了,但幸好我还能从我的日记里,大致地知道自己发生了怎么样的变化,而不是只靠回忆里那些印象深刻但寥寥无几的事件来知道自己是个怎么样的人。当然,在开始写日记的那些年里,我并未意识到这些价值,只是惯性和表达欲使然,再加上潜意识里觉得记忆不靠谱产生了把一些有价值的事情记录下来的想法吧。真正发现记录的深刻价值是在我工作后。开始工作后,我发现自己有很多东西要学、有很多事情要做,每件事情又充满了不确定性和意外,且有时候极其复杂,于是开始在本子上写工作日志 —— 说是工作日志,其实也没有什么章法,写得也很潦草。据说招我进去的领导特别喜欢我学习和记录时候的认真劲,不过工资太少了最后我还是跳槽了。

pachira_journal.jpg

图2  一篇调试错误的工作日志

从 2015 年第二份工作起,我便开始在电脑上记工作日志,简单做了下统计,去掉空行和空格后,从 2015 年 3 月 10 日到今天(2021 年 9 月 25 日),累计写了 15.3 万行共 734 万字,平均每天写 64 行共 3070 字,也不算很多,但是能一做就是这么多年,我还是挺自得的。我的工作日志按日期来顺序记录,都是尽量追求把处理问题的完整过程(包括思考和执行)都记录下来,可复现性还是比较高的,现在同事如果问一个几年前我经手过的事情,我基本上都能在日志中找到过程,如果有必要的环境把当时做的事情重做一遍基本也可以做到 —— 事实上我自己在工作中隔了半个月甚至几个月要重新做一件事情也并不少见,这种情况下工作日志也帮到我很多。

2017_work_journal_sample.png

图3  2017年工作日志片段

到 2018 年下半年的时候,我开始关注自己的时间使用情况,用 Life Cycle 这款 iOS 软件对自己的日常时间开销做一些粗粒度的自动记录,并且在年终总结(见2018年总结2019年总结)的时候用来做一些简单统计和分析。说实在的,这个记录的粒度非常粗,大概就是根据我的位置之类的,判断我在什么场所做什么事情,如果我在一个场所做了两类不同的事情,就需要我自己去手工修正类别,但因为它自动记录和分类的特性,作为一个初步的尝试还是不错的,用了几年后,至少对自己的时间使用情况有了一个数字上的认识。

life_cycle.jpg

图4  "Life Cycle 记录"

如果说写工作日志是为了更好的工作,那么写个人日记和做时间记录则是为了更好地认识自己,而 Life Cycle 这样粗粒度的记录并不能满足我的要求,于是在 2019 年下半年开始,我开始摸索更适合自己的时间记录方式,并在 2020 年逐步进行完善后开始正式使用,目前基本上能把我每天的时间使用情况按事情精确到分钟级进行记录,虽然不是自动化的,但也不会耗费太多精力,写今年的半年总结的时候就用到了这个方法产生的数据。

对于我的记录方法,有若干网友在我的数篇文章的评论里表示感兴趣,所以在这里简单说一下,其实并没有什么很复杂的东西,就是用 org-mode 的 org-agenda 功能,下面是我的 agenda 视图:

my_agenda_view.png

图5  我的 agenda 视图

在这个视图里,我可以按一下 I(大写) 开始某项任务的计时,按一下 O(大写) 则结束任务的计时,操作是很简单的,我要做的是调整一些短期任务让他们显示到「今日事项」这个区域里,这种短期任务一天不会超过十件,只需要在每天做梳理和计划的时候处理即可,而这个梳理和计划我又是通过图上「写今日计划」来进行的,所以这个梳理和计划的耗时也可以得到记录。用 org-mode 来管理任务,这个对 org-mode 用户是很自然的事情,我做的一点点微小创新(其实是不是创新都不好说),就是把一些日常的事情作为“纯计时任务”纳入到这个体系里面了,就这么简单。公司有同事看到我这个方法后有和我讨论,他不用 Emacs 更别说 org-mode 了,但其实是可以借鉴思路的,要能把这个记录过程进行下去,最根本的一点就是操作要尽量的简单和快捷:(1)任务的查找和定位要快,org-agenda 的好处就是提供了一个统一的视图来展示不同来源的任务,其他工具如果也能做到这点的话也会很棒;(2)任务的计时操作要简单便捷,最好是按一个键就能完成。基于这个共识,我们讨论了几种可能的方案:(1)使用 Alfred,自己写点 Apple Script 来定位任务、进行计时;(2)使用 zsh,通过自动补全功能来迅速定位任务并进行计时。

如果对我用 org-agenda 进行时间记录的方法有兴趣,可以看看我准备的示例配置:https://github.com/Linusp/org-agenda-example

需要强调的是,对我来说,自我记录和自我管理,是两个完全不同的事情,我绝对不会想要把这两个事情混到一起去 —— 记录强调时序、强调过去、强调忠于事实,而管理则尝试控制未来的走向,这对我来说太难了,而且我也不认为人能要求事情的未来按照自己的要求或期望进行。我们没有办法减少未来的不确定性,只能去应对它们,但通过记录来减少对过去的记忆的模糊,是每一个人都能去做的。

  •  

闲言碎语(2021/08/02-2021/09/05)

目录

2021-08-02 周一

22:00 打断

我不喜欢别人打断我,但我其实也经常打断同事来着,这个其实也不太好……

22:00 幽邃

《黑暗之魂》:发现幽邃教堂可以直接从顶上走去罗莎莉雅的篝火,这样可以跳过被帕奇坑的阶段,让他直接回传火祭祀场,然后买装备在净身小教会救洋葱。

2021-08-03 周二

12:06 复利

其实,从表面来看,基金是没什么复利的,净值型产品,所有盈利都是纸面上的,分红一般也不多。

2021-08-04 周三

08:28 鼻炎

半夜两点醒过来了,鼻炎导致呼吸不畅 —— 还不是堵住那种不畅,就是不舒服……

2021-08-06 周五

07:59 充实

因为忙碌而感到充实,但这忙碌并没有让我变得更好,充实我的是什么呢?

2021-08-08 周日

09:14 梦

醒了,朦胧间摸到枕边的手机,看到两条朋友在 8 点多发过来的消息,说梦到和我在家里的小酒馆吃饭聊天。

我好久没有梦到过什么人了。

16:06 断电

半夜断了一次电,有一些设备因为断电发出了短促的蜂鸣声把我吵醒了一会,没想到下午又断电,半小时内断了三次吧,不知道在干嘛。

[2021-08-08 日 19:00] 有病啊,七八次了。

2021-08-09 周一

08:16 断电原因

昨天下午到晚上断电十几次吧……今早物业上门了,问家里有没有什么电器一开就跳闸,说他们昨天排查了一天并没有发现具体的故障,只能猜测是谁家里的电器有问题,正在挨个上门问。能是啥问题啊,电器短路了,还是功率过大?

21:30 disqus

通过朋友在我博客的评论,我才知道原来现在 disqus 强制展示广告了,我可能因为是老用户才可以自己选择是否开启广告。虽然不太喜欢,但是人家也是需要生存的,只能说可以理解吧。

2021-08-10 周二

22:58 中签

第一次新股中签!

2021-08-11 周三

12:22 蛋卷基金

发现蛋卷基金是有网页版的,简单试了下导出交易记录成功了,其他的应该也可以。

14:00 倒三轮

在公司门口看到一辆倒三轮的车,挺好玩的,大概是下面这个样子。

tricycle.jpg

22:32 咸甜

饭罪吃重庆火锅,发现椰奶冰沙和红锅中捞出来热乎的鲜鸭血特别的搭,鸭血的滑嫩和冰沙的绵密特别般配,前者轻微的咸辣味和后者的甜腻以及奶香交织在一起产生有层次的、丰富的味道,冰沙的冰爽又极好地压下了刚从锅中捞出的鸭血的热辣,于是连着这样吃了好几块鸭血。这种吃法让我想起小时候在潮汕吃过的西瓜,老板用漂亮的手法将西瓜切成小块,和刨冰一起装进塑料袋,然后浇上辣椒油,好吃极了。

2021-08-12 周四

10:28 感动

又用上 lain 啦!用了半年 kubectl 和 helm 了,还是 lain 好用。

lain.jpg

23:35 链接

Telegram 里每条消息都有对应的链接,Slack 也是,这非常好。之前在思考自己的知识管理系统的时候,发现会有部分信息是从朋友那里来的,通常是在Telegram/Slack/微信这些地方聊天的时候产生的,虽然我能把元信息尽量记录下来,但能追溯到发生时的场景当然会更好一些,这个发现算是解决了我这个问题吧。我的微信消息大部分都转发到 Telegram 了,所以微信消息的问题也相当于解决了;飞书作为协同工具和 Slack 算是一类工具,就去看了一下飞书是否有类似的功能,结果当然是我想多了。

telegram_message_link.png

slack_message_link.png

2021-08-13 周五

08:47 图片

想要一个本地存储的、开源的图片管理工具,希望它在基本的图片管理功能基础上,还能像 Zotero 一样能生成文献引用数据库,提供 URI 供外部程序进行链接,找了一圈并没有找到 Linux 上能用的,看到一些直接用 Zotero 来做图片管理的,但 Zotero 连预览图像都做不到,也没法提取图片的各种元信息,如果有插件能解决这些问题的话或许可以试试。

2021-08-18 周三

13:30 一次对话

记不太清,略去很多细节

  • X: 可能和我的家庭和性格有关系,我就想找个小城市,不想干互联网了。
  • 我: 不想工作这个念头大家都有,我和其他朋友或多或少都聊过这个话题。
  • X: 看大家工作很有热情,我还以为是我的问题,现在就后悔从前司离职后没有好好玩一段时间。
  • 我: 我就有一个疑问没法得到解答,如果不工作了该干嘛呢?岁数小点的时候,会有一个大的目标或者说理想,认为那个是自己的方向,但现在没有了,可能不工作的头两年各种玩,会觉得很开心,但可能过了头两年,就会不知道该干嘛了。
  • X: 嗯,我懂你的意思,就是没有了那种很强的生活的驱动力。对于你这个问题,我能想到这几种情况,一个是人生进入一个新的阶段,另外一个可以结合自己的能力做一些小的能赚钱的事情,而不是像互联网玩流量(举了一个例子)。
  • 我: 人生进入一个新的阶段,比如说结婚、买房、生孩子?
  • X: 对。
  • 我: 第二个,我最近也有类似的想法,我觉得再做一个对所有人或者说大部分人都有价值的东西,在现在的互联网环境下,可能不太现实了,但是还是有很多小的群体,为他们专门提供一些服务,还是有价值的。

2021-08-20 周五

20:00 损失厌恶

今天中国电信上市,集合竞价阶段涨 20%,但我不知道那个阶段能卖,等 09:30 开盘后涨幅迅速收窄至 3%~5%,我怕还会继续跌,就以 4.68 的价格卖了,扣掉手续费后只赚了 140,结果中午价格又涨回去了,仔细一算我原来能赚近 1000,但最终赚了 140 就跑了,虽然实际上行还是赚了钱,但心理上还是认为自己遭受了损失。

2021-08-22 周日

22:00 小饭桌

  • 参与者:ZZ、YS、我、K
  • 食物
    • K 从家里带来的羊肉,做成的红焖羊排
    • K 带来的酱牛肉,LY 淋了点红油
    • 鲜椒跳水鲈鱼
    • 拌三丝
    • ZZ 和 YS 带来的柚子醋鸡皮、酱油麴烤鸡排、热炉月饼、绿茶酥
  • 饭后活动: 打《双人成行》最后两章,顺利通关
  • 去 LY 家附近吃晚饭,点了一个尖椒焖蛋、油渣炒油菜和一大碗的面炕肉,吃撑,第三个菜没吃完,打包我带走了
  • 饭后 LY 骑电动车送我到地铁站

20210822_food.jpg

22:42 中元

从地铁回去的路上,在一个小区的出入口附近看到十几堆灰烬,晚风吹过,火星四散,烟雾在地面弥漫。死者已逝,只是活人想要记住死者,并在这种祭祀中强化那些自己挑选过的回忆,以便使自己得到慰藉。我父亲有时候会说,如果我祖父还在世就好了,能看到我考上了大学会很欣慰,但我记得他在世时苦难繁多,只是因我欣慰那么一两回就要继续承受那些,我觉得那对他不公平,说到底也不过是我父亲的一厢情愿罢了,但毕竟那是他的父亲,他有更强烈的执念也理所当然 —— 我印象中的祖父就只是那个在墙边端着水杯晒太阳看报纸的沉默老人罢了,年少时的记忆缺乏记录,早已不记得除此以外的大部分细节。

23:53 模糊

只是一周之内的事情,当时忘了记录,就已然模糊。

2021-08-23 周一

早上没吃早饭,最近这种状况挺多,久了对身体不好。

在去公司的地铁上,把闻泰转债卖掉了,并卖出了周五买入的招行 —— 目的是把招行从华宝证券上转到银河证券上,所以并没有赚太多。

刚到公司,表弟又来没头没脑地问域名和网站的事情,说也说不清楚,还说什么「你操作一个论坛应该难度不高吧 实在不行我去北京找下学习」可真是吓到我了。多聊了会后得知他虽然在做运营,但对技术有兴趣所以自己在学,最终目标是能自己开发和维护论坛一类的网站,估计报了一些培训班或者网课学了点皮毛表面的东西,学这点当然解决不了他所有疑惑就来问我,但也问不到点上。我确定他有兴趣后,承诺给他打点基础,约了这周日先和他讲下基础的东西,所以这周也要准备一下资料了。

(此处略去工作相关的事情 430 字)

这阵子一个同事对我的反应让我有点不太适应,今天惊叹我「有这个项目的代码,好厉害」(大意是原来以为我作为算法工程师只会做一些研究性质的事情结果我居然真的会写工程代码所以感到震惊),然后聊需求的时候在边上看到我的编辑器问我是不是用的 Emacs 并在我给予肯定回复后惊叹「终于见到用 Emacs 的了」。我对他了解尚浅,不知道他是单纯的惊叹还是捎带了猎奇的心态,所以对于他这些惊叹,我都以自嘲或者无视的态度应付过去了。

晚上回来后,把昨天打包的肉热了吃了点就当晚饭了,非常不讲究。然后又花了一个多小时梳理我的证券账户,这一个多月没记账带来的混乱后遗症,估计还得花点时间处理掉。

写了连续的、较长的日记,体验和写碎片化的一些事情还挺不一样的,能让我把混沌的记忆确定下来,我挺喜欢的。

2021-08-24 周二

14:00 两元甜筒

吃完午饭路过蜜雪冰城,得知两元甜筒不再卖了,不开心。

17:14 压力

会议室突然传出来一个人大声说话的声音,带着点快要哭泣时的那种沙哑,大意是在说自己很累压力很大,应该是运营或者销售团队的人。

23:33 日记

今天天气特别的舒服,有秋天那个味道了,被电动车俘虏的 LY 今天午饭的时候也为了享受凉爽的天气而放弃了电动车改成骑车去吃午饭了。除了凉爽,照例是忙碌的一天。

晚上回来总算把证券账户的账理得比较清楚了,至少银河证券已经能完全对上了,华宝证券明天看看。然后开了黑魂3把绘画世界的图跑了跑,点了所有篝火,尝试打了下丹涅尔和舞娘但都失败了。

剩的那点面炕肉我晚上都吃了,好吃是好吃,但是肥肉太多了,后面好多我就把外面裹着的面吃了,里面的肥肉丢掉了。

2021-08-25 周三

21:03 臃肿

今天是被 pytorch 以及附带库折磨的一天,产生了把 pytorch 从我主导的每个项目的依赖里删掉的冲动。

2021-08-27 周五

10:06 呆

出门去上班,坐电梯下楼,电梯门一开看到楼栋里那两只大型但比较乖的狗,还以为到了六楼还是七楼,傻乎乎地跟狗主人说「你进来吧我不怕的」,狗主人无奈地说了句「一楼」,我才反应过来,尴尬,于是夺门而逃。

21:09 Fight or Flight

我的下意识行为应该是逃走,感觉在工作中遇到过很多次了,遇到工作压力比较大的时候,会下意识夸大难度或者摆出放弃姿态,「你们定就好我随便,让我做什么就做什么」,大概这样。事后当然也会反省自己,但是再怎么反省,压力也不会消失。

2021-08-28 周六

11:53 洛斯里克

早上爬起来又玩了下黑魂,居然两遍打过了舞娘,二阶段躲着大风车就好,其他的招式还是能翻滚躲一躲的,太怂反而不容易打过。打过舞娘后一路推到猎龙铠甲那,把伊果和希里斯都召唤了出来一起打,虽然猎龙铠甲血量多了很多,但在这个孤独的游戏里能有叫上朋友(虽然是 NPC)一起并肩作战的机会,当然是要用一下了。

2021-08-29 周日

23:52 实习

到开学了,弟弟为实习的事情大概有点着急,投了十几家了只有两家有回应,又觉得一直待在家里待不住。除了帮忙改改简历指导一下方向,我目前也做不了什么事情,还是得看他自己呢。

2021-08-31 周二

10:06 音游

地铁里看到一个姑娘在手机上横屏玩音游,手速飞快,我看着都眼花。音游我还是不擅长呀,好像也就玩过一个 QQ 音速,看了下,这游戏国服 19 年停止运营了哈哈。

10:34 算法推荐管理规定意见稿

http://www.cac.gov.cn/2021-08/27/c_1631652502874117.htm

  • 用户自主权,举双手赞成

    第十五条 算法推荐服务提供者应当向用户提供不针对其个人特征的选项,或者向用户提供便捷的关闭算法推荐服务的选项。用户选择关闭算法推荐服务的,算法推荐服务提供者应当立即停止提供相关服务。
    
    算法推荐服务提供者应当向用户提供选择、修改或者删除用于算法推荐服务的用户标签的功能。
    
  • 要求存档六个月的日志及相关信息,应该是指给用户推荐了什么之类的记录?

    第二十三条 具有舆论属性或者社会动员能力的算法推荐服务提供者应当按照国家有关规定开展安全评估。
    
    算法推荐服务提供者应当完善算法推荐服务管理机制,对算法推荐服务日志等信息进行留存,留存期限不少于六个月,并在相关执法部门依法查询时予以提供。
    
  • 订单分配应保障劳动者权益,具体不知道该怎么执行

    第十七条 算法推荐服务提供者向劳动者提供工作调度服务的,应当建立完善平台订单分配、报酬构成及支付、工作时间、奖惩等相关算法,履行劳动者权益保障义务。
    
  • 禁止大数据杀熟

    第十八条 算法推荐服务提供者向消费者销售商品或者提供服务的,应当保护消费者合法权益,不得根据消费者的偏好、交易习惯等特征,利用算法在交易价格等交易条件上实行不合理的差别待遇等违法行为。
    
  • 互联网信息服务算法备案系统

    第二十条 具有舆论属性或者社会动员能力的算法推荐服务提供者应当在提供服务之日起十个工作日内通过互联网信息服务算法备案系统填报服务提供者的名称、服务形式、应用领域、算法类型、算法自评估报告、拟公示内容等信息,履行备案手续。
    

2021-09-01 周三

07:58 噩梦

梦到现实中可能发生的糟糕事情,没有比这更恐怖的了。

2021-09-02 周四

08:00 秋意

晚上不盖东西睡觉已经会觉得冷了。

21:56 新高

经过了一个多月的低谷期,我的投资的累计收益终于回来并且新高了,不容易啊。

20210902_keysersoze.png

注:上图显示的是收益金额不是收益率,由于我不想把我真的赚了多少钱展示出来,就把所有数据除以最大值相当于做了一个隐私保护,所以图上的 1.0 并不是说我有了 100% 的收益。

2021-09-05 周日

21:04 三十周岁

(生日在工作日,本来 ZZ 提议周末去吃湘彬萱和她做的蛋糕,但我忽然很想吃珍滋味,就提议去珍滋味请大家吃顿饭,最后变成了在 ZZ 家六人聚餐,ZZ 安排外卖了珍滋味的火锅、采买了各类海鲜肉类,我就只用安心出钱了)

昨晚三点多才睡着,醒来仍然头疼,吃了点东西玩了会后洗了个热水澡精神才好起来。天气阴凉,出门后还能看到夜里下雨的痕迹,等我坐地铁到 ZZ 家的时候 K 已经到了,随后 XKL 也到了,LY 惯例晚到。珍滋味的外卖到的稍迟了一些,先吃了 ZZ 做的提拉米苏 —— 我对甜点没什么研究和鉴赏能力,嘴里只能蹦出来甜和好吃两个词,不过其他人评价都很高啦,说不比外面店里卖的还好,因为用料很好嘛。等珍滋味的瑶柱粥锅底和佛跳墙锅底到了后就正式开吃了,两份锅底都分别用六个较大的外卖用塑料碗装着,大概两碗能盛满一锅的样子,所以锅底其实并不贵。瑶柱粥煮开后滚烫,夹肉的时候溅到两滴到手背和手指上疼得我直咧嘴。吃饭过程就没啥好说的啦,吃了小象拔蚌、基围虾、雪花牛肉、吊龙、牛五花、肥牛、五花趾、海螺、赤贝、鲍鱼、扇贝、松茸、竹荪、猴头菇、炸响铃,都很好吃啦,粥里下牛肉特别有潮汕牛肉粥的感觉,快收尾的时候还敲了几个鸡蛋到粥里。吃完肉后大家还一起分吃了 ZZ 做的水果芝士蛋糕,然后在逗渔总、闲聊中度过了一个下午。

20210905_food.jpg

水果芝士蛋糕 20210905_cake.jpg

寿星吃面图和饭后葛优瘫 20210905_person.jpg

  •  

闲言碎语(2021/07/01-2021/08/01)

2021-07-01 周四

08:04 触发

我自己的一个小项目,今天有个人给我提 PR 修了一个低级错误,虽然并不是多大的事情,但让很久都没去管这个项目的我又想把这个项目捡起来了,看今年能不能发个 1.0 吧。

10:43 无心工作

百年党庆,无心工作。

18:34 个人特点

我同时是 Emacs 用户、RSS 爱好者、NLP 从业人员、游戏爱好者,如果能结合我自身的这几个特点来做一些事情,想必会非常有意思。

2021-07-11 周日

18:31 优化

为 org-agenda 写的过滤函数特别慢,今天想着优化了一下重写了一版,结果更慢了,尴尬……

22:01 电话

和爸妈分别聊了电话,得知

  • 今年高考的那位表弟执意选计算机,和他爸妈希望他当医生、老师意愿强烈冲突,有一些矛盾,可能我得和姨妈打个电话,避免对方认为是我让他选的;等他入学了我还是帮一帮吧,我们其实都一样,如果不能证明自己比父母强,那么他们就会以爱的名义要求我们按照他们的意愿来生活
  • 今年毕业的一位表弟没有回家,好像在上海那边找了什么事情做
  • 在家做公务员的一位高中同学升职调走了 —— 我其实不太在意他是什么级别也不想通过他获得什么便利,我想这是我能和他保持还算友好关系的原因吧

2021-07-12 周一

23:44 蛍

我不认识他,也不知道该说些什么,只是觉得难过。想起我一个伯父。

uekawakuyuurei_1.png

23:48 数字墓地

有没有什么办法可以把一个过世的人的信息收集归档起来呢?我怕有一天,李文亮微博下一百万的评论会消失,像蛍这样的人的痛苦呼喊和其他人拼命但或许徒劳的安慰会消失。

失落的信息和知识都可以被重新发现,每一个鲜活的人却不能。

23:53 死亡

我们终将迎来死亡,如果都能以一种体面而舒适的形式就好了。

2021-07-13 周二

23:13 酒

劝阻了一位想买招商中证白酒的朋友,希望酒厂不要打我的脸。

2021-07-14 周三

23:02 再见

和当初公司的一位实习生一起吃了个饭,他现在在阿里,说觉得以前在我们那实习的时候氛围特别的好,氛围好也没用哇。

2021-07-18 周日

21:43 扫码登录

网易云音乐的网页版去掉了帐号密码登录,只允许通过手机 APP 扫码登录了。

2021-07-19 周一

00:03 发愁

突然觉得自己很不专业,突然觉得事情很匆忙。

08:01 吵

一大早上的,小区里有一个电摩的警报声一直在响,令人无法睡着。突然就产生了换房子的想法。

15:39 电话推销

接到中信银行的贷款之类的推销,这种电话接太多了,我开玩笑说了一句「不用了我很有钱」,说完自己都觉得好笑,又笑着说「不好意思开玩笑的不需要」,对面可能也是觉得是个能开玩笑的人,语气马上生动起来了,缠着让我加微信啥的又聊了几句。

2021-07-21 周三

20:46 犬吠

邻居又在楼道里溜那只极其胆小怕人的狗,不知道又嗅着了哪位陌生人的气息在那狂吠不止。

2021-07-22 周四

10:17 可爱

我可爱在哪里哇?我当然明白自己身上的优点和缺点,不过不太清楚触动别人的点是什么,或许只是「呆到深处自然萌」也说不定。

10:18 引路人

在集智的群里讨论救灾互助的手段,我反复在说信息的自由流通,提到 RSS,有朋友说我是他的 RSS 引路人,开心!

13:53 华宝证券

到网站上登录可以按月导出交易对账单: https://wsyyt.touker.com:7070

huabao_web_bill.png

2021-07-24 周六

17:08 疫苗接种

加上今天我妈给我的电话,已经是这两周第三次地方政府通过家里催促我打疫苗了,我妈说隔一两天就登记一次,挺烦人的。

23:09 重来

看了《重制人生》的前几集,有点感慨。

如果时光倒流的话,该犯的错大概率还是会犯,要经历的痛苦还是要经历,会有不同但也不会有太大的不同。

什么时候开始这种近似宿命论想法的呢?

2021-07-25 周日

20:31 杀死自己

今天在小说里看到一个有趣的说法:过去的和现在的自己差距如此之大,如果在某种神秘力量作用下,现在的自己直接占据了过去自己的身体(或者未来的自己占据了现在的身体),无异于直接杀死了过去的自己,把这个过程拉长并不改变这件事情的性质。觉得这个说法很有意思,但它其实只是特修斯之船的一个变形罢了。

2021-07-27 周二

23:04 离开

晚上吃烤串,K 说 YS 要离职回豆瓣了,已经开始休假。我觉得挺好的,这样他有更多的时间陪 ZZ 和渔总啦。

2021-08-01 周日

10:00 疲惫

昨天又去 LY 家蹭饭了,钵钵糍粑(啊并没有这道菜是我把糍粑扔钵钵鸡的汤汁里)意外的不错。

0731_food.jpg

见到了以前的一位实习生,他要从腾讯研究院跑路去留学了,硕博连读要 5 年。吃完饭他还有事就离开了,我们剩下四个人玩 PICO PARK 到晚上,特别欢乐,但是最后有一关容错率太低始终过不了。

pico_park.png

打完游戏去吃了1998小树林烧烤,没拍照,不过我还是比较喜欢,本来特别困了的,最后还是吃了不少。吃完回到家已经很晚了,睡了一觉起来还是觉得挺累的,这就是快乐的代价吧。

21:00 七月总结

月度总结就随便一点不画图了。

  • 休息时间 252 小时,包含了在公司午睡的时间和周末赖床的时间,总之 8.14 小时这个平均值是有水分啦……
  • 日常行为耗时 121 个小时,大头在通勤和吃饭上,并没有什么大变化
  • 休闲时间 112 小时……基本上就是下班回来后打开 B 站看《黑暗之魂》的视频,偶尔看点番;以及,开始玩《只狼》了,目前卡在火牛那里
  • 进行了 10 个小时的个人项目开发,主要是在优化我的 python-inoreader 项目,目前已经有比较完整的规划了,计划在国庆前发个 1.0 吧
  • 写作花了 11 个小时,其中 7 个小时是用在写半年总结上,还有 4 个小时花在一篇未完成的 org-mode 相关的文章上
  • 工作时间 167.5 个小时,7 月一共 22 个工作日,所以日均工作时间是 7.6 个小时,还行哦
  • 7 月份大项目推进很快,我这边事情也开始多起来了,工作量吧也不能说大,但事情多有时候就会觉得烦躁。
  • 投资方面这个月亏损严重,主要原因是没有仓位控制的意识,下跌的时候没有节奏地进行频繁加仓 —— 很多道理以前都知道,但还是要挨了打才会长记性
  •  

半年总结

2021_semi_annual_stats.png

从 2019 年开始,我对自己每天在各项事情上的时间消耗进行跟踪和记录,上图是根据这些记录画出来的 2021 年上半年时间开销统计图,181 天中未被记录的时间开销放到了「其他」部分,约为 2% 左右。从统计结果来看,我个人最大的时间开销分别为:

  • 休息:包含晚间的睡眠、午睡等,主要组成部分还是晚间的睡眠
  • 工作:包含了在公司工作以及在家处理工作的时间
  • 日常:包含做饭、吃饭、通勤、洗漱、打扫卫生、购物、非工作目的的交通、上厕所、购物等日常行为的用时
  • 休闲:逛社交网站、看视频、看小说、玩游戏所花费的时间

这四部分内容占据了我所有时间的 84%,剩下 16% 的时间里我虽然进行了学习、运动、(个人的)开发、写作、自我管理等有益于个人成长的事情,但花费的时间都远远小于 TOP4 的内容。我曾经对自己的时间开销作过分析,首先工作和休息的时间是固定开销无法削减;日常时间开销中的 TOP5 分别是吃饭(239 小时)、通勤(204 小时)、洗漱(102 小时)、做饭(69 小时)和上厕所(55 小时),除了通勤可以(以搬家到公司附近作为代价)削减外,其他的时间开销也很难削减;倒是第四大块内容即休闲时间,其实是可以削减的。学习、运动、开发、写作这些有益事情我做得却很少,我不认为这是自制力的问题,而是目前我在这几类事情上都还没有建立起正反馈机制,无法从中获得足够的满足感,再加上工作带来的精力耗尽,自然就往娱乐方面投入了更多的注意力 —— 相比之下,记账和记录生活这两个事情我却做得非常好,这是因为我能从这两个行为中获得满足感,而不是因为所谓的自制力。

基于上述分析,下半年我的行动方向就是削减休闲娱乐时间获得更多的个人成长。

抛开统计数据来说一下上半年的概况:

  • 工作上:

    一月换了工作,收入有较大提升,工作内容是分析金融领域的资讯并用于推荐,不过苦于人手不足大部分时间在做一些工程向、业务向的事情,这半年来在 NLP 方面可谓毫无建树,不过学到挺多金融知识,也还不错。

  • 生活上:

    生活上还是以宅为主,除了玩游戏和看番之外,因为公司在望京所以体验到了许多新的美食。

    游戏一直在玩《黑暗之魂3》,还差修女芙莉德、无名之王、奴隶骑士盖尔三个 BOSS 没有打过,剧情已经走完了。下半年应该会玩《只狼》和《血源诅咒》。

    2021_animes.jpg

    动画方面,看了上面这些:《ODD TAXI》的故事超级棒,甚至连角色的动物形象也是叙事的一部分,这点是没有想到的,我给第一名;《Vivy》也非常棒,我觉得并不逊色于《ODD TAXI》,但由于是两种不同的类型而目前我偏爱《ODD TAXI》一点,就给个第二好了;《致不灭的你》故事催泪感人,《影宅》设定有趣富有深意,《悠哉日常大王》童趣日常,共同排列第三好了;《里世界郊游》新怪谈的故事挺喜欢,《记录的地平线》故事发挥稳定但没什么惊喜,《转生成蜘蛛又怎样》看个乐呵不用费脑子,这三个排在第四档好了;剩下的《奇蛋物语》、《动物狂想曲》我还没看完,不做评论。

    为了达成分工合作,社会要求我们一定程度上了解和理解他人,但更进一步地深入理解却并非必需,大家的悲喜并不相通,故事在传达情感方面却没有这个限制,正因如此,游戏、动画、小说都是我重要的情感源泉,虽然那些故事是虚假的甚至荒诞的,但他们能表达和传递的情感都可以很真实,甚至能比现实中更浓烈,我爱它们。

  • 投资上:

    今年我大幅调高了个人风险偏好,将绝大部分钱都投入各种投资品种中了,在个人投资水平并无明显提高的情况下获得的收益已经接近 2020 年一整年的收益,对此我还是比较满意的。我给自己的投资定的第一个阶段目标是年收益能满足在北京的一年日常开支,以上半年的情况来看,今年是有可能完成这个目标的,当然我也知道这些收益并非源自我的个人能力,绝大部分都是市场本身带来的,我还有很多东西要学习。

    2021_semi_annual_invest.png

    学习投资之外,苦于没有一个工具来对不同平台上的多个投资账户进行分析,我自己写了 Keysersoze 这个工具,虽然目前还远远谈不上完善,但自用已然足够,希望下半年能完善这个项目让别人也能使用。

  • 写作上:

    两个多月里每周写一篇当周的想法和生活记录,这种写作产出的内容价值不高,但也有收获一些交流,所以我还会继续坚持下去,希望以后能提供更有价值的内容吧。

下半年的计划里,除了前面提到的投资目标、完善 Keysersoze 项目、写作,我还有一些其他的想法:

  • 在 NLP 方面,准备正式启动「棱镜计划(暂命名)」,事实上这个计划的最初想法是 2019 年年末产生的,它会是一个庞大的项目,今年肯定是没有办法完成的,但我希望下半年能切实地开始一些准备工作 —— 包括想一个更贴切、好听又有内涵的名字,毕竟现在这个名字和美国的网络监听计划同名了……
  • 希望能为 Emacs 社区和 RSS 社区做点事情 —— 以前我主要是通过写一些相关的文章来参与到社区讨论里,今后我希望能为相关的开源项目做一点事情,有可能的话自己写一些项目就更好了。
  •  

闲言碎语(2021/06/21-2021/06/27)

2021-06-21 周一

23:33 故地

下班后去圆明园附近进行饭罪活动,吃完后我走去圆明园地铁站,一路看着住过两年的地方附近熟悉的夜景,城市太大我又太宅,以至于我搬离北河沿小区后再也没回去过,其实我还是挺喜欢这一片的。

23:37 无知

看盗月社新的视频,发现我对南昌了解很少,不过我了解少的何止是南昌呢,我的家乡、我的亲朋我所知也不多 —— 除了人际、社会和周遭的环境,即使是赖以为生的专业知识我也仅仅是掌握到勉强够用的程度。

2021-06-24 周四

21:31 志愿

表弟勉强过了一本线,在看计算机专业;表妹差一点,决定复读。表弟既然对计算机感兴趣,我就和他多聊了一点。

2021-06-27 周日

09:21 分析

这两天把持仓分析和相关性分析加上了。

持仓分析是根据上季度披露的基金持仓数据来估算我的投资组合里都包含了什么股票、债券,效果如下:

keysersoze_holdings_analysis.png

相关性分析用来把组合里高相关性的基金、股票找出来,方便后续优化组合,效果如下:

keysersoze_corr.png

当然,这些功能所需的数据都是从公开渠道获取的,小问题还挺多,以及展示样式也还需要优化,但总之有个东西了,慢慢调整好了。

10:25 歧视

讨厌被叫中年人被叫叔叔阿姨,是不是一种年龄歧视?

17:33 蹭吃蹭喝

又是蹭吃蹭喝的一天,感谢渔总,感谢 ZZ!

20210627_foods.jpg

17:44 分数

今年江西理科一本线 518,我当年是 519,非常接近,然而我校计算机当年在江西的录取线是 570 多(具体记不清了),今年是 654,真是恐怖……

20:50 带宽

月底电信宽带到期,之前接到过几次电话来着,我想着手机上也能办,晚上一看,原来 200M 的套餐续费最低只能选 300M 的,得多花 400 块钱,问题是我也用不上那么高的带宽啊!

  •  

闲言碎语(2021/06/14-2021/06/20)

2021-06-14 周一

17:15 灰羽

心血来潮看了看《灰羽联盟》的评论,看到有人说故事可能借鉴了村上春树的《世界尽头与冷酷仙境》,于是找来开始看了,挺有意思的。说起来,他的书我都没看过。

haibane_renmei.jpg

18:27 新机

之前想换手机纠结了挺长时间不知道该选啥,最后决定买了个二手 iPhone SE2,毕竟我不想花太多时间在适应新系统上,也不想花太多钱在手机上。我这台 iPhone 6s 用了五年多快六年了,别人会觉得我节省其实我只是懒。手机刚刚送到了,成色很好。不得不说苹果在用户体验方面做得还是不错的,开机后自动检测到旧手机,直接就提示让我把手机拿到旁边同步数据,按照提示一步步来非常友好。

19:14 不胖秘诀

写上周总结的时候瞄了一眼,发现上厕所的时间接近两个小时,平均下来每天有 15 分钟以上在上厕所,我可能找到我能吃不(那么快)胖的秘诀了。

2021-06-15 周二

21:46 醉

回家路上,路旁一个男子趴在车上,嚎着歌,边上两个男子在旁边看护着,应该是喝醉了酒。有些人需要靠着酒醉或者别的什么东西才能说出所谓的真心话,其实人和人都有可能真切地传达自己的情感,只不过语言经常会把这一切都扭曲掉,或者说,不是语言而是所谓的语境、语用、上下文这堆东西会把语言的所指卷入一个无穷的嵌套里,所谓的酒后吐真言,无非是用来把自己身上的语境锁链破坏掉的一种手段而已,通过对自己进行降智来告诉别人「我所有的话都是本能没有别的任何用意所以请单纯地相信我语言的字面含义吧」,但一个不理智的人说出来的话里,真的有多少信息吗?语言是这个世界上最复杂的游戏之一了。

22:00 环

《Elden Ring》后面又爆出老贼的采访内容,信息量超大,恨不得一下快进到 2022 年呀!

23:09 工具

不断有新的笔记工具出来,但问题根本不在工具上,而在人本身的复杂性、语言的不精确性以及世界的多样性上。总之,我对新工具已经没什么热情。

2021-06-16 周三

10:14 RSS

RSS 已死、古典互联网已死的感慨不差我们这一两句,不用过于悲观。小宇宙、Spotify 要跑马圈地又怎么样,Google Reader 倒了 RSS 也照样好好的。

22:00 事件抽取

看了一天事件抽取方面的东西,大体上搞明白了,感觉可以和知识图谱构建共用一套框架。

22:00 野炊2!

《塞尔达传说·旷野之息》续作发布新预告片了,信息量很大,不过公主又被抓走了,还以为可以和塞尔达一起冒险来着,哼!

2021-06-17 周四

17:51 鸟

敞开心扉!你不是犯人,你是空中逐梦飞翔的鸟! —— 《世界尽头与冷酷仙境》

2021-06-18 周五

14:23 躺平

六月以来的这一波回调,让我的整体收益直接回到了一个月前的水平,也没有钱加仓了 —— 备用的流动资金是不会去动的,索性躺平了。

june_drawdown.png

22:00 异常

想起来一个奇怪的地方,端午节前我每天早上出门上班,小区门口都还有很多共享单车,端午过后同样的时间一辆都没有了,发生了什么呢?

2021-06-19 周六

12:50 新旧手机

旧手机换个电池然后卸载掉一堆国产应用(比如说微信)的话应该还是挺好用的,所以还是想利用起来,不过暂时没有比较明确的想法。

18:20 世界尽头

把《世界尽头与冷酷仙境》读完了,第一人称视角、双线叙事、满溢的表达欲望,是个复杂的故事,不好简单评价。看完后发现《灰羽联盟》确实有非常多受这本书影响的痕迹,但有很大不同的一点是,《灰羽》里只有“世界尽头”这一部分而缺失了“冷酷仙境”。

haibane_renmei2.png

19:49 涨价

生气,FeedPress 涨价到 60 欧一年,之前是 50 刀一年,这就太过份了吧!考虑换个别的 RSS 烧录平台了 —— 我其实都不在乎他那些分析功能,只是想要一个稳定的 RSS 地址而已,大不了像以前一样直接输出 Huginn 的地址好了。

2021-06-20 周日

08:53 喜加一

Steam 上黑魂2和黑魂3史低,果断入手,就等显卡降价了。

  •  

闲言碎语(2021/06/07-2021/06/13)

2021-06-07 周一

14:05 信用卡

信用卡 7/16 到期,之前我看到过直接寄送到指定地点的功能,想着去操作一下直接寄到公司来,结果发现找不到这个功能了,然后信用卡还变成了「未开卡」的状态,大惊,以为新卡已经寄出,犹豫了下联系人工客服询问,告知新卡还没寄出,只是提前更新一下卡的状态而已。松了口气但也有点疑惑,按照流程还有一周才会寄新卡,干嘛这么早就改卡的状态呢?

21:53 公积金

把住房公积金也纳入到我的资产统计里了,这样我的总资产数字又涨了一截!逐渐完善记账体系也是一个逐渐完善自我认知的过程,虽然这笔钱暂时不怎么用得到,但是感觉很好。

2021-06-08 周二

08:10 头疼

连续两天没睡好了,头疼欲裂。

08:32 京豆和京东E卡

把京豆和京东E卡也用 beancount 记起来了。京东E卡就是上周公司发的端午节福利啦;京豆是开通了京东 PLUS 会员后按 10 倍付款金额奖励的,100 个京豆可以在购物的时候抵扣 1 块钱,积少成多也挺不错的。

2021-06-08 * "记录京豆"
  Assets:积分卡券                                               4851.00 JDB
  Equity:Opening-Balances

2021-06-08 * "添加京东E卡"
  Assets:积分卡券                                                200.00 JDE
  Equity:Opening-Balances

2021-06-10 周四

16:12 神清气爽

经过两晚的恢复,今天的状态非常好。周一周二那两天吧,一来是没睡好,二来颈椎也很不舒服,睡好睡不好这个主要靠自己,颈椎的话公司准备换好点的椅子了,应该也会有改善。

08:38 如何选择

我个人的习惯,是先把可能(而不只是当下可以)的选项列举出来,然后用排除法去掉一些特别离谱或不喜欢的,最后根据不同的维度进行相对客观的比较选出少量的候选,可以的话全都要,不可以全要的话看心情吧。和机器学习的优化过程有共通之处,尽力找全局最优或次优,如果只凭感觉或有限的信息,是很容易落到局部最优里的。

2021-06-11 周五

09:21 老头环!

出新预告片和发售日期了!明年 1 月份发售,虽然不是原来想的今年发售,但也没差多久,开心!在此之前可以去看看凯尔特神话故事,嘿嘿。

elden_ring.jpg

09:47 盐!

《盐与避难所》也公布续作了 ——《盐与牺牲》,今天是什么好日子啊,就缺《丝之歌》了!

salt_and_sacrifice.jpg

12:15 西瓜

上周日买了个西瓜,吃了一半,剩下一半拿保鲜膜盖起来放冰箱了,之后一直没空吃,还以为坏了结果没有,开心。

2021-06-12 周六

10:47 黑魂

把守墓大狼打过了,然后去试了试修女小姐姐,好歹是打到第三阶段了……

friede.jpg

17:37 发呆

靠在沙发上两个小时啥也没干,戴上耳机听着老歌,随意遐想,看着自己的念头从这边涌到那边,然后逐渐平静下来。

2021-06-13 周日

15:29 新玩具

昨天买的新玩具到啦,海信 Touch 墨水屏阅读器,128G 存储、1440x720 276ppi 的分辨率,1599 的价格相比手机来说可能不太划算,但和 Kindle 比起来就太棒了:Android 11,能自由安装微信读书等 APP;5.8 寸的屏幕,单手操作自如;128G 的存储空间可以放下更多的书,之前我的 Kindle 才塞了几部高清动漫进去空间就用完了。

简单开箱

hisense_touch_1.jpg

hisense_touch_2.jpg

hisense_touch_3.jpg

hisense_touch_4.jpg

19:04 跨模态搜索

看到一个网站,能通过台词来搜索电影甚至给出对应的电影截图,感觉这种跨模态的搜索还有进一步的想象空间,比如说视频的搜索,如果能根据视频里人说的话、展示的文字来搜索,应该会很有意思 —— 技术上来说是可行的,搜了下大厂也有在做,但都是作为内容平台的一个普通工具,我说的有意思是指在产品形态上应该会有一些有意思的点,比如说自动生成鬼畜视频哈哈哈哈。

  •  

关闭部分公众号RSS的全文输出

出于服务器压力、对微信反爬的担忧等多方面考虑,我决定关闭一些我制作的微信公众号 RSS 的全文输出,选择的标准如下:

  1. Inoreader 上订阅数少于 3 的,考虑关闭全文输出;
  2. 每日发表文章在 3 篇以上的,考虑关闭全文输出;
  3. 作者(或写作团队)有在其他平台发布内容且提供 RSS 输出的,考虑关闭全文输出;
  4. 内容很简短的,考虑关闭全文输出;
  5. 我个人对内容已经不感兴趣的,考虑关闭全文输出。

按照上述标准,筛讯出来了 8 个公众号 RSS,在昨晚做调整把它们的全文输出关闭了,这 8 个公众号及关闭全文理由如下:

  • AINLP: 更新频率过高
  • 艾格吃饱了: 美食类公众号,我个人不是很有兴趣,订阅数 4 人也比较少
  • 碗丸食事:同上
  • 也谈钱:作为投资理财类公众号,内容比较水(个人观点),我不太想看了,且订阅数少于 3
  • 微软研究院AI头条:其内容同样被发布在 MSRA 的官方博客上,并提供全文RSS输出,所以这个公众号 RSS 其实就没必要了
  • 观人看世界:虽然订阅者有 17 人,但是其主要内容是引用其他文章并发表简短评论
  • 民俗学论坛:订阅数少于 3 人
  • 华山感染:订阅数 4 人,且内容我不是很有兴趣

如果对上述公众号有全文需求,有如下解决办法:

  1. 使用 Inoreader,打开文章后,按下 w 键来载入全文,经测试对微信公众号的抓取效果还不错
  2. 我提供的 RSS 输出的都是文章原始链接,所以可以使用我提供的 RSS 抓取全文
  •  

闲言碎语(2021/05/31-2021/06/06)

2021-05-31 周一

11:54 端午福利

今年这回发的是京东卡,比以前发粽子好啦。还没想好用来买什么。

23:33 伞

痛失 kumamon 图案的折叠伞,想必会有需要它的人成为它的新主人的。这伞还是去招行驻场开发时买的,就让这回忆和它一起随风而去吧!

kumamon.jpg

2021-06-01 周二

20:07 无意义

三家供应商,其实算是内定了一家,那我这几周在做的各种指标评测有啥意义呀?领导回曰「没有意义」。嗯,我倒没觉得这几周白干了,毕竟公司付我钱了,只是想起了以前做乙方的日子,各种中不了标,除了自己产品的问题,可能也遇到过类似的状况吧?

2021-06-02 周三

10:43 心态

在金融相关的行业能看到各种(看似能)暴富的机会,要保持平稳的心态真的挺难的。不过我还好,大部分资金还是在场外的指数基金里,场内的部分,是用来释放交易欲望和磨练投资操作的,在有足够的自信前,我应该不会再追加投入。

2021-06-03 周四

15:16 专利

听说我有两个专利通过了耶!老实说专利感觉没啥用,又不是多先进的东西,而且相比申请专利,我更想把它们给开源了给有需要的人。

17:39 少不是目标

工作头两年会觉得代码写少一点很酷,现在不刻意追求这个了,整体结构上的合理性、模块化以及代码的可读性,远远比绞尽脑汁在某个局部把代码从 20 行优化到 10 行有价值。同样的,变量名写个完整的单词也不长,但非要按不知道什么样的标准拿其中两三个字母出来拼凑成一个缩写的行为,我也是很讨厌的。

22:00 定投

让我弟每月定投 100 块钱到中证 500 里,前天触发的,今天在我的投资管理小工具里给他建了个账户来进行追踪。

keysersoze_new_account.png

2021-06-04 周五

08:10 念头

脑子里翻滚着好多又好乱的念头,好累,需要花点时间做一场大扫除。

2021-06-05 周六

22:35 忙碌

哎呀呀,本来还想放空一下的,又忙碌了一天,真是闲不住。嗯,主要是把 keysersoze 的代码整理了下提交到了 github 上,顺便把几年前买的阿里云 VPS 废物利用了下。

2021-06-06 周日

12:40 记账

两周没记账了,花了一上午才梳理完,看到一丝不差的数字以及总资产的增长曲线,还是很满足的。记账和打扫收纳很像,它不能帮助我产生更多的钱,就像打扫收纳不能让房子从 50 平变成 100 平,但都能获得更整洁的环境,感受到自己对生活的掌控感。

从某个神秘的角度来说,记账和追求永生都是一样的呀,相比起永生来说,记账简单多啦。

20210606_balance_sheet.png

14:41 做饭

久违的做了个饭,荷兰豆焯水简单炒炒调味也很好吃。

15:47 道路

推上看到一位应该刚进大学不久的人在抱怨学校生活,说了很多事情,但不免天真和简单,就像曾经的自己。本想说点什么,但想想还是作罢了,认识自我和世界并建立起在两者之间适当的相处模式,是每个人必经的过程。少数幸运或卓越的人能在很早的时候就发现自己的价值所在,但大部分人普通人可能得花一辈子去追逐答案,我不过也是这样一个普通人而已,没啥可讲的。

16:06 道理和故事

道理可能简单,没有相关经历却很难切身体会,但故事人人能懂。想给别人讲道理时,想想自己有没有相关的故事可讲,如果没有,可能自己懂得这个道理也只是一个幻觉。

是不是这个道理呢?

  •