本题要求对告警信息进行语义聚类,核心是基于余弦相似度的连通分量问题。题目的关键在于理解弱传递聚类规则:如果告警A与B相似,B与C相似,即使A与C不相似,它们也应属于同一聚类。这实际上是一个典型的并查集问题。
首先需要处理输入数据的合法性验证。输入为空或向量维度不一致时直接返回0。对于合法输入,我们需要计算所有告警对之间的余弦相似度。余弦相似度的计算公式为:
cos(A,B) = (A·B) / (|A| × |B|)
其中A·B表示向量点积,|A|和|B|表示向量的欧几里得范数。当余弦相似度大于等于0.95时,认为两条告警语义相似,需要将它们归入同一聚类。
【背景信息】在现代运维体系中,大量告警可能指向同一故障根源(如 “服务器 CPU 利用率过高” 和 “应用响应超时” 可能由同一硬件资源不足导致)。若能将语义相似的告警归为一类,不仅可以减少重复信息的干扰,还能帮助运维人员快速定位故障核心,缩短故障修复时间。
行业内普遍采用自然语言处理(NLP)技术对告警文本进行语义理解,采用基于预训练语言模型(如 BERT、sBERT 等)的语义向量(embedding)转化技术:通过模型处理,每条告警文本被转化为一个高维数值向量,向量的数学特征能够准确反映告警的语义信息,使得两条描述相同故障的告警(即使措辞略有差异),其对应的向量在空间中的距离会非常近;而语义无关的告警,向量距离则较远。
【任务目标】通过语义向量(embedding)对给定的告警信息进行聚类:每条告警包含唯一的 ID 和对应的向量 embedding,要求将余弦相似度≥0.95 的告警归为同一个聚类,并返回数量最大的聚类的告警数量
【规则要求】
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写