为什么日更要防撞车
日更流水线最尴尬的,不是写不出,而是连发几篇才发现主题撞了。比如这周已经写过"用回执数据重排选题",下周又冒出"用数据给选题打分",读者一眼就能看出是换皮。人工审稿在高速产线里靠不住,得在选题落笔之前就先拦一道。
撞车的代价是隐性的:重复选题分摊了本来就有限的发布配额,还拉低账号的内容密度评分。把这道闸自动化,省下的是后续改稿返工的隐性成本。
思路 把选题变成向量再比距离
撞车的本质是语义相近。单纯关键词匹配会漏------"重排"和"打分"字面上完全不重叠,但向量空间里它们离得很近。做法是给每个候选选题生成一句摘要,编码成向量,再和已发布选题的向量算余弦相似度,谁最像谁就最可疑。
python
import json, math
from functools import lru_cache
# embed() 是可插拔的:本地 sentence-transformers 或远程向量服务都能接
# 这里给一个确定性的词袋回退,保证无模型也能跑、核心逻辑不变
def embed(text: str) -> dict:
return _bow_vector(text)
@lru_cache(maxsize=4096)
def _bow_vector(text: str) -> dict:
vec = {}
for tok in _tokenize(text):
vec[tok] = vec.get(tok, 0.0) + 1.0
return vec
def cosine(a: dict, b: dict) -> float:
common = set(a) & set(b)
num = sum(a[t] * b[t] for t in common)
na = math.sqrt(sum(v * v for v in a.values()))
nb = math.sqrt(sum(v * v for v in b.values()))
return num / (na * nb) if na and nb else 0.0
词袋回退只是为了可运行与可复现;生产环境把 embed 换成真实句向量模型即可,后面的相似度闸门逻辑一行都不用改。即便不接模型,词袋版也能拦住绝大多数字面换皮的撞车,作为第一道廉价闸门完全够用。
举个真实场景:上周已发"用回执数据重排选题",这周又有人提交"根据发布回执给选题排序"。两套说法核心动作都是"拿回执驱动选题顺序",词袋重叠度很高,闸门会在写稿前就把第二条标红,省下一次重复产出。
拦在写稿之前 相似度闸门
把已发布选题的向量缓存起来,新候选进来先算一遍最大相似度。超过阈值就当撞车,返回最相近的那条,提示去改稿或复用,而不是新开一篇。
python
THRESHOLD = 0.82
def check_collision(candidate: str, published: list[str]) -> tuple[float, str | None]:
c_vec = embed(candidate)
best, best_text = 0.0, None
for p in published:
s = cosine(c_vec, embed(p))
if s > best:
best, best_text = s, p
return best, best_text
# 流水线里调用
score, hit = check_collision("用数据给选题打分", published_titles)
if score >= THRESHOLD:
print(f"疑似撞车({score:.2f}),最接近已发: {hit};建议改稿或复用,不再新开")
阈值不是越高越好。0.82 是兼顾"别漏"和"别误伤"的折中:太低会把正常的新角度当撞车,太高又拦不住换皮。建议先用一周真实数据回测,再定最终值,别拍脑袋写死。
工程落点 三处要记牢
向量不必每次重算。已发布选题的向量落盘成 JSON,每天增量更新即可,候选进来只算自己那一条,复杂度从 O(n²) 降到 O(n)。
json
{
"published": [
{"title": "内容运营自动化 用回执数据重排选题", "vec": {"内容":1,"运营":1,"自动化":1}},
{"title": "内容运营自动化 把日更交给调度器", "vec": {"内容":1,"运营":1,"调度":1}}
]
}
第二个落点是回退策略。模型服务抖动时,词袋回退要保证闸门不降级成"全放行"------可以把回退模式的相似度整体乘以一个保守系数,宁可多拦一条也别漏放撞车。
最后一条经验:相似度闸门只拦"写之前",不替你判断内容质量。它解决的是"别重复造轮子",真正的好稿还得靠选题本身。把它接在选题队列的最前端,每天省下的就是改稿返工的隐性成本。