博客文章+机器学习(一键“自动目录”)

知识星系

  1. 一键“自动目录”:主题聚类 + 命名
    把每篇文章生成 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/

相似推荐

  1. 相似文章推荐:做成你博客的“猜你喜欢”
    读者看完 A,自动推荐最像的 5 篇(向量相似度)。

还能做“两种推荐”:

同题延伸(更像)
反直觉跳转(相近但观点冲突/角度不同,靠“对比度”挑)

python recommendations.py
hexo g

自动打 Tag

  1. 自动打 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
2
3
4
5
6
7
8
# 伪代码思路
prompt = f"""
你是一个情报分析专家。我有一套标签体系:{tags_list}
请阅读以下文章,并从中选择 3-8 个最符合的标签,并给出 0-1 之间的置信度。
文章内容:{post_content}
返回格式:JSON {"tags": [{"tag": "数字游民", "score": 0.95}, ...]}
"""

方案 B:本地化(FastText / BERT)

如果你不想每篇文章都消耗 API,可以用 scikit-learn 配合 MultiLabelBinarizer 做一个多标签分类器。

  • 优点:免费、本地运行、速度极快。
  • 数据清洗技巧:利用你已经手动打过标签的那部分文章作为训练集。

🛠️ Python 自动化打标脚本(核心逻辑)

我们可以利用 Sentence-Transformers 将文章转为向量,然后计算它与各个“标准标签”的余弦相似度。这不需要训练模型,只要标签名取得准,效果就很好。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import yaml
import os
from sentence_transformers import SentenceTransformer, util

# 1. 定义你的标准标签库 (Taxonomy)
standard_tags = ["机器学习", "数字游民", "安全攻防", "比特币", "阶级认知", "读研性价比", "艺术思考", "预判逻辑"]

# 2. 加载向量模型 (推荐使用中文预训练模型)
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
tag_embeddings = model.encode(standard_tags, convert_to_tensor=True)

def auto_tagging(content, top_k=5, threshold=0.35):
# 将文章正文转为向量
post_embedding = model.encode(content, convert_to_tensor=True)
# 计算文章与所有标准标签的相似度
cosine_scores = util.cos_sim(post_embedding, tag_embeddings)[0]

results = []
for i, score in enumerate(cosine_scores):
if score > threshold:
results.append({"tag": standard_tags[i], "score": float(score)})

# 按置信度排序
results = sorted(results, key=lambda x: x['score'], reverse=True)
return results[:top_k]

# 3. 遍历文章并更新 Front-matter (演示逻辑)
# 这里可以读取 .md,解析 YAML,把新标签追加进去


🔍 额外玩法:挖掘“隐藏好文” (Label Mismatch)

这个功能最能带给你惊喜。你可以通过对比**“人工标签”“模型预测标签”**来发现偏差:

  1. 标签漏标:模型预测置信度高达 0.9,但人工标签里没有。
  • 价值:你早年随手写的一篇日记,其实已经触达了后来才成型的主题(比如 2016 年就在谈“预判”但没打标)。
  1. 标签错配:模型预测的标签和你人工打的完全不沾边。
  • 价值:说明这篇文章的表达可能偏离了初衷,或者它是一个**“褶皱点”**——连接了两个完全不同的领域。
  1. 孤儿文章:模型在标准库里找不到任何匹配标签(置信度全低于 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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os
import yaml
from openai import OpenAI

client = OpenAI(api_key="你的API_KEY", base_url="接口地址")

def get_tags_from_llm(title, content):
prompt = f"""
你是一个知识管理专家。请阅读以下博客文章,从我定义的标签库中选择3-5个最合适的标签。

【标准标签库】:数字游民, 机器学习, 阶级认知, 预判逻辑, 读研性价比, 艺术思考, 安全攻防

文章标题:{title}
文章正文:{content[:2000]} # 截取前2000字,节省 Token

请仅返回 JSON 格式,例如:{{"tags": ["数字游民", "预判逻辑"], "confidence": 0.95}}
"""

response = client.chat.completions.create(
model="gpt-4-turbo", # 或 deepseek-chat
messages=[{"role": "user", "content": prompt}],
response_format={ "type": "json_object" }
)
return response.choices[0].message.content

2. 批量处理逻辑

Python 会遍历文件夹,针对每一篇文章执行以下操作:

  1. 读取:打开 .md 文件,分离出 Front-matter(YAML)和正文。
  2. 分析:将正文发给 LLM,获取 JSON 结果。
  3. 回写:将 LLM 建议的标签更新到 YAML 的 tags: 字段中。
  4. 保存:覆盖原文件。

💡 为什么推荐 Python + LLM?

  • 语义理解(褶式思维)
    如果你有一篇文章写的是“在香港街头看老龄化与鸽子”,传统的关键词匹配只会打上“香港”、“鸽子”。但 LLM 能读懂你背后的**“老龄化”“社会结构预判”**,这才是你真正的底牌。
  • Few-shot(少量样本学习)
    你可以在 Prompt 里放 3 篇你亲自打好标签的文章作为“标准”,Python 脚本会把这些样板一起发给模型。模型会立刻模仿你的打标风格。
  • 清洗旧数据
    你可以设置一个逻辑:如果模型给出的标签置信度低于 0.6,则标记为“待人工复核”。

⚠️ 你需要准备什么?

  1. 一个 API Key:DeepSeek 或者国内的硅基流动(SiliconFlow)现在非常便宜,处理 1000 多篇文章可能也就几块钱人民币。
  2. 本地环境:安装 pip install openai pyyaml

你想让我帮你写一个能直接运行的、带“断点续传”功能的批量打标脚本吗?(这样万一中间网络断了,下次可以从第 501 篇继续,不用重新付钱)。

你的写作“时间轴”

  1. 你的写作“时间轴”:主题随时间迁移
    把每篇文章的主题分布(topic mixture)按年份画出来。
    你会看到自己在什么时候从 A 转向 B(比如从安全 → Web3 → 产品/创业)。
    玩法升级:标出“拐点文章”(主题转移最大、写作风格突变的那几篇)。

可以,而且这个玩法非常适合你这种 1200 篇长周期写作:它会把“我感觉自己在进化”变成可视化证据

下面我给你一个可跑的最小 MVP

  • 生成“按年份的主题占比堆叠图”(topic mixture by year)
  • 自动找“拐点年份”(主题分布变化最大)
  • 自动找“拐点文章”(最像从 A 跳到 B 的那几篇)

注:严格意义的“topic mixture”是每篇文章对多个主题的软分配(不是硬聚类)。下面用 Embedding + KMeans 来做软分配(softmax 到每个簇中心),效果很直观。


你会得到什么产物

  1. topic_mixture_by_year.png:每年主题占比堆叠面积图
  2. topic_shift_by_year.png:每年“主题漂移强度”折线(JS divergence)
  3. turning_points_posts.csv:拐点文章列表(含 URL、年份、标题、变化分数)
  4. turning_points_years.txt:拐点年份排序

✅ 完整可运行脚本:timeline_topics.py

你已经有 frontmatter,也建议装:
pip install sentence-transformers pandas matplotlib scikit-learn

把下面保存到 /root/Whale3070.github.io/timeline_topics.py 然后运行:


运行方式

1
2
3
cd /root/Whale3070.github.io
python3 timeline_topics.py
ls -lh topic_mixture_by_year.png topic_shift_by_year.png turning_points_posts.csv turning_points_years.txt

你下一步怎么把它接进“知识星系”页面?

最简单:

  • turning_points_posts.csv 转成 json
  • 页面加一个「Turning Points」列表
  • 点击就跳文章
  • 同时在星图里高亮这些点(turning_score > 阈值)

如果你想我直接给你前端高亮的 JS(不丑那种),我也可以给。


如果你跑完后把 turning_points_years.txtturning_points_posts.csv 头几行贴出来,我就能帮你把“安全→Web3→产品/创业”的迁移用自然语言标注出来(并挑出最像“拐点”的那 3~5 篇文章)。