博客文章+机器学习(一键“自动目录”)
知识星系
- 一键“自动目录”:主题聚类 + 命名
把每篇文章生成 embedding(向量)。
用 HDBSCAN / KMeans 聚类成 30–200 个“主题岛”。
每个簇再用 LLM 或 TF-IDF 抽关键词,自动起标题:
例如「区块链安全」「分布式系统踩坑」「香港生活」「量化随笔」。
结果:一个“你的知识星系”,比标签系统更真实(因为标签常年会漂移)。
source venv/bin/activate
python export_thought_map.py
(venv) root@f207a6a2ef51:~/Whale3070.github.io# ls /root/Whale3070.github.io/source/thought-map/
index.md js thought_map.json
结果: http://whale3070.github.io/thought-map/
相似推荐
- 相似文章推荐:做成你博客的“猜你喜欢”
读者看完 A,自动推荐最像的 5 篇(向量相似度)。
还能做“两种推荐”:
同题延伸(更像)
反直觉跳转(相近但观点冲突/角度不同,靠“对比度”挑)
python recommendations.py
hexo g
自动打 Tag
- 自动打 Tag:从“人工维护”变“模型维护”
先定义一套你认可的 tag taxonomy(比如 50 个)。
用少量人工标注(每类 10–30 篇)训练一个多标签分类器/或用 few-shot 规则 + LLM。
每篇文章自动打 3–8 个 tag,并给置信度。
额外玩法:找“标签错配/漏标”的文章(你会挖到自己早年的隐藏好文)。
这个想法非常深刻,它是从“内容管理”向“知识库自动化”跨越的关键一步。既然你有 1148 篇文章,人工回溯打标签几乎是不可能的任务,而标签的混乱会直接导致搜索和推荐系统的失效。
我们要做的不是简单的关键词匹配,而是基于语义的自动打标。
🚀 自动打标系统实施方案
第一阶段:定义底层逻辑 (Taxonomy)
不要让模型随意生成标签(防止出现“机器学习”和“Machine Learning”并存的情况)。
- 动作:根据你已有的分类和核心主题,固化 50 个左右的“标准标签库”。
- 维度建议:
- 技术/工具:比特币、区块链、机器学习、Hexo、安全攻防。
- 生存/预判:阶级认知、读研性价比、老龄化、数字游民、底牌逻辑。
- 艺术/人文:油画、剧本创作、褶式思维、权威迷信。
第二阶段:实现路径(两种方案)
方案 A:轻量级(Few-shot + LLM)—— 推荐方案
既然你平时会调用 API,可以直接写个 Python 脚本,给 LLM 看 10 篇样板文章,然后让它批量处理剩余文章。
- 优点:理解力极强,能识别出文章里没写但实际涉及的主题(如:虽然没提“阶级”,但看出了阶级跨越的本质)。
- 脚本逻辑:
1 | |
方案 B:本地化(FastText / BERT)
如果你不想每篇文章都消耗 API,可以用 scikit-learn 配合 MultiLabelBinarizer 做一个多标签分类器。
- 优点:免费、本地运行、速度极快。
- 数据清洗技巧:利用你已经手动打过标签的那部分文章作为训练集。
🛠️ Python 自动化打标脚本(核心逻辑)
我们可以利用 Sentence-Transformers 将文章转为向量,然后计算它与各个“标准标签”的余弦相似度。这不需要训练模型,只要标签名取得准,效果就很好。
1 | |
🔍 额外玩法:挖掘“隐藏好文” (Label Mismatch)
这个功能最能带给你惊喜。你可以通过对比**“人工标签”和“模型预测标签”**来发现偏差:
- 标签漏标:模型预测置信度高达 0.9,但人工标签里没有。
- 价值:你早年随手写的一篇日记,其实已经触达了后来才成型的主题(比如 2016 年就在谈“预判”但没打标)。
- 标签错配:模型预测的标签和你人工打的完全不沾边。
- 价值:说明这篇文章的表达可能偏离了初衷,或者它是一个**“褶皱点”**——连接了两个完全不同的领域。
- 孤儿文章:模型在标准库里找不到任何匹配标签(置信度全低于 0.2)。
- 价值:这些文章要么是废稿,要么是你知识体系之外的**“新大陆”**,值得重点复盘。
💡 建议
你可以先挑 100 篇文章跑一下这个逻辑。
如果你决定用这套系统,我们可以把生成的结果直接写回你的 .md 文件的 tags: 字段里,实现真正的“自动化运维”。 你想先尝试哪种方式?是先生成一份“标签错配报告”来复盘旧文,还是直接全量覆盖更新?
轻量级(Few-shot + LLM)—— 推荐方案
方案 A:轻量级(Few-shot + LLM)—— 推荐方案。 你的意思是python可以调用LLM
是的,这正是 “自动化运维” 的核心逻辑:把 Python 当作骨架,把 LLM(如 GPT-4、Claude 或 DeepSeek)当作大脑。
你可以编写一个 Python 脚本,让它像一名“实习编辑”一样,通读你 source/_posts 下的所有 Markdown 文件,然后通过 API 告诉 LLM 如何根据你的价值观打标签。
🛠️ Python 调用 LLM 的具体流程
1. 核心代码示例 (基于 OpenAI 格式 API)
你可以使用 Python 的 openai 库(现在大部分模型如 DeepSeek, OneAPI 都兼容这个格式):
1 | |
2. 批量处理逻辑
Python 会遍历文件夹,针对每一篇文章执行以下操作:
- 读取:打开
.md文件,分离出 Front-matter(YAML)和正文。 - 分析:将正文发给 LLM,获取 JSON 结果。
- 回写:将 LLM 建议的标签更新到 YAML 的
tags:字段中。 - 保存:覆盖原文件。
💡 为什么推荐 Python + LLM?
- 语义理解(褶式思维):
如果你有一篇文章写的是“在香港街头看老龄化与鸽子”,传统的关键词匹配只会打上“香港”、“鸽子”。但 LLM 能读懂你背后的**“老龄化”和“社会结构预判”**,这才是你真正的底牌。 - Few-shot(少量样本学习):
你可以在 Prompt 里放 3 篇你亲自打好标签的文章作为“标准”,Python 脚本会把这些样板一起发给模型。模型会立刻模仿你的打标风格。 - 清洗旧数据:
你可以设置一个逻辑:如果模型给出的标签置信度低于 0.6,则标记为“待人工复核”。
⚠️ 你需要准备什么?
- 一个 API Key:DeepSeek 或者国内的硅基流动(SiliconFlow)现在非常便宜,处理 1000 多篇文章可能也就几块钱人民币。
- 本地环境:安装
pip install openai pyyaml。
你想让我帮你写一个能直接运行的、带“断点续传”功能的批量打标脚本吗?(这样万一中间网络断了,下次可以从第 501 篇继续,不用重新付钱)。
你的写作“时间轴”
- 你的写作“时间轴”:主题随时间迁移
把每篇文章的主题分布(topic mixture)按年份画出来。
你会看到自己在什么时候从 A 转向 B(比如从安全 → Web3 → 产品/创业)。
玩法升级:标出“拐点文章”(主题转移最大、写作风格突变的那几篇)。
可以,而且这个玩法非常适合你这种 1200 篇长周期写作:它会把“我感觉自己在进化”变成可视化证据。
下面我给你一个可跑的最小 MVP:
- 生成“按年份的主题占比堆叠图”(topic mixture by year)
- 自动找“拐点年份”(主题分布变化最大)
- 自动找“拐点文章”(最像从 A 跳到 B 的那几篇)
注:严格意义的“topic mixture”是每篇文章对多个主题的软分配(不是硬聚类)。下面用 Embedding + KMeans 来做软分配(softmax 到每个簇中心),效果很直观。
你会得到什么产物
topic_mixture_by_year.png:每年主题占比堆叠面积图topic_shift_by_year.png:每年“主题漂移强度”折线(JS divergence)turning_points_posts.csv:拐点文章列表(含 URL、年份、标题、变化分数)turning_points_years.txt:拐点年份排序
✅ 完整可运行脚本:timeline_topics.py
你已经有
frontmatter,也建议装:pip install sentence-transformers pandas matplotlib scikit-learn
把下面保存到 /root/Whale3070.github.io/timeline_topics.py 然后运行:
运行方式
1 | |
你下一步怎么把它接进“知识星系”页面?
最简单:
- 把
turning_points_posts.csv转成 json - 页面加一个「Turning Points」列表
- 点击就跳文章
- 同时在星图里高亮这些点(turning_score > 阈值)
如果你想我直接给你前端高亮的 JS(不丑那种),我也可以给。
如果你跑完后把 turning_points_years.txt 和 turning_points_posts.csv 头几行贴出来,我就能帮你把“安全→Web3→产品/创业”的迁移用自然语言标注出来(并挑出最像“拐点”的那 3~5 篇文章)。