本题要求对告警信息进行语义聚类,核心是基于余弦相似度的连通分量问题。题目的关键在于理解弱传递聚类规则:如果告警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)相似度阈值:当两条告警的余弦相似度 ≥ 0.95 时,判定为语义相似。
2)弱传递聚类(连通图聚类)规则:初始状态:每条告警单独构成一个类别。归入规则:若告警 X 与某类别 C 中的任意一条告警 的余弦相似度 ≥ 0.95,则将 X 归入类别 C。
合并规则:若告警 X 同时满足归入多个类别的条件(即与多个类别中的告警均相似),则这些类别需合并为一个新类别,X 归入该新类别。
传递性保证:聚类过程需确保所有满足相似条件的告警最终被合并到同一类别中。例如:若 A 与 B 相似(余弦相似度 ≥ 0.95),且 B 与 C 相似(余弦相似度 ≥ 0.95),则 A、B、C 必须属于同一类别(即使 A 与 C 的相似度可能 < 0.95)。
每一行为一个告警信息,其中第一个字段是告警 ID,后面的字段是告警的嵌入向量。告警信息的总行数不会超过 1000 条。(请注意,测试集中可能包含如样例 2 所示的那种异常情况)
找到包含告警数量最多的聚类,输出该聚类的告警数量。若所有告警均无法聚类(即每个类别仅包含 1 条告警),则返回 1;若输入为空列表(无任何告警),或者输入告警信息的向量维度不一致(即不同告警的 embedding 长度不同),则返回 0。
输入
1 1.0 0.0 0.0
2 0.99 0.01 0.0
3 0.0 1.0 0.0
4 0.0 1.0 0.01
5 0.1 0.0 0.0
输出
3
说明
每一行输入的第一个字段是告警 id,后面的字段是告警的嵌入向量,根据余弦相似度≥0.95 的规则,我们得到以下聚类关系:
告警 1、2、5 构成一个聚类;
告警 3、4 构成一个聚类;
所有聚类的大小分别为 3、2。其中数量最大的为 3,因此输出为 3。
输入
1 1.0 0.0 0.0
2 0.99 0.01 0.0 0.98
3 0.0 1.0 0.0
输出
0
说明
第 2 个告警的嵌入向量维度与其他告警不一致,属于异常情况,返回 0
输入
1 0.878434 -0.068245 -0.46237 0.099552
2 0.33961 -0.083281 -0.348141 0.869786
3 0.326485 -0.071012 -0.353166 0.873865
4 0.330106 -0.085155 -0.338106 0.87719
5 0.340185 -0.066865 -0.339054 0.874554
6 0.482266 -0.483077 0.539977 -0.492423
7 0.491966 -0.485237 0.526674 -0.495104
8 0.48426 -0.477249 0.531019 -0.505711
9 -0.669925 -0.330461 0.409454 -0.523778
10 -0.668543 -0.331692 0.403806 -0.529123
输出
4
说明
每一行输入的第一个字段是告警 id,后面的字段是告警的嵌入向量,根据余弦相似度≥0.95 的规则,我们得到以下聚类关系:
告警 2、3、4、5 构成一个聚类;
告警 6、7、8 构成一个聚类;
告警 9、10 构成一个聚类;
告警 1 独立成一个聚类;
综上所述,所有聚类的大小分别为 4、3、2、1。其中数量最大的为 4,因此输出为 4。