热点事件聚类思路以及实现-HanLP实现关键词提取

方案总结:

现在的工单热点关键词是调用大模型生成的

还借助大模型二次调用来把所生成的热点进行归类

创建一个,热点事件库即提取过后的工单热点

将这些热点扔给大模型给直接判断是不是一类。

或者就用算法生成向量,每次来新热点时,判断与老热点的相似度,若相似度在某某比例,则如高于80%,则归为一类,让数量加1,其余就新建一个热点即添加进数据库,如此重复,我觉得缺点是这个80%这个阈值不好确定。

数据聚类的大体实现过程:

查阅资料聚类大体过程应该就是,

1.数据预处理:利用各种方式将元数据可以是工单或者是,已经提取过的热点数据,经过一系列的处理方法(jieba分词,去除停用词等),生成可以初步使用的数据。

2.调用某种算法,查询相似或者频次最高的数据,中间还有各个词的权重等。如

词频(TF)= 某词在文章中出现的次数/文章的总次数

逆文章频率(IDF)=log(文章总数/(包含该词包含的文章数目加一))

特征权重(TF-IDF )= 词频(TF)X 逆文章频率(IDF)

3.搜索机器学习中满足要求的算法. 经过此算法可以得到想要的结果,中间可以结合一些别的技术或者算法,如:搜索引擎技术、大数据分析能力以及机器学习平台,来进一步提升热点聚类的准确性和实时性

优化归类流程

为了优化工单热点关键词的归类流程,我们可以考虑以下几个步骤:

  1. 建立热点事件库:首先,创建一个热点事件库,用于存储已经提取和归类的热点事件。这个数据库应该能够记录热点事件的详细信息,包括关键词、相关联的工单、热点的起始和结束时间等。
  2. 热点向量化:利用大模型对每个热点事件生成向量表示。这可以通过将热点事件的描述输入到预训练的语言模型中,获取其向量输出来实现。向量化的目的是将文本数据转换为可以进行数学运算的格式,以便后续处理。
  3. 新热点相似度判断:对于每个新出现的热点事件,同样使用大模型生成向量,并与热点事件库中的向量进行相似度比较。这可以通过计算向量之间的余弦相似度来实现。
  4. 热点归类决策:设置一个相似度阈值,比如80%,如果新热点与库中某个热点的相似度超过这个阈值,则将新热点归类到该热点事件中,并将相关联的工单数量加1。如果相似度低于阈值,则认为这是一个新的热点事件,并将其添加到热点事件库中。
  5. 热点事件更新:定期更新热点事件库,移除过时的热点,并加入新的热点事件。这可以通过监控热点事件的活跃度来实现,例如,如果某个热点事件在一段时间内没有新的工单关联,则可以认为该热点已经过时。
  6. 实时监控与反馈:建立一个实时监控系统,持续追踪热点事件的变化,并根据用户反馈和热点事件的发展趋势调整归类策略。

算法优缺点

大模型可以视为各种算法的集成

如果不采用大模型而使用算法的话:

  1. K-means算法

    • 优点:
      • 算法简单,易于理解和实现。
      • 适合处理大型数据集,且收敛速度快。
      • 对于球形簇的聚类效果较好。
    • 缺点:
      • 需要预先指定聚类的数量(K值)。
      • 对初始聚类中心的选择敏感,可能导致不同的聚类结果。
      • 对离群点和噪声数据敏感。
      • 只能发现凸形状的簇。
  2. 层次聚类算法

    • 优点:
      • 不需要预先指定聚类数量。
      • 能够发现数据的层次结构。
      • 通过树状图(Dendrogram)可以直观地展示聚类结果。
    • 缺点:
      • 计算复杂度较高,不适合大规模数据集。
      • 一旦合并或分割了簇,就不能更改。
      • 对于距离的测量和聚类树的剪枝方法选择敏感。
  3. DBSCAN算法

    • 优点:
      • 不需要预先指定聚类数量。
      • 能够识别并处理噪声点。
      • 可以发现任意形状的簇。
      • 对于数据的输入顺序不敏感。
    • 缺点:
      • 对参数(如邻域半径和最小点数)敏感。
      • 在高维数据上效果不佳,因为“维度灾难”。
      • 对于密度不均匀的数据集,可能无法得到好的聚类结果。
  4. 谱聚类算法

    • 优点:
      • 适用于发现非球形或复杂形状的簇。
      • 能够在较低维度上表示高维数据。
      • 对于噪声和离群点不敏感。
    • 缺点:
      • 需要预先指定聚类的维度。
      • 计算复杂度较高,尤其是在计算相似度矩阵和特征值分解时。
      • 对于大规模数据集可能不够高效。
  5. 高斯混合模型(GMM)

    • 优点:
      • 能够表示各种形状的簇,包括非凸形状。
      • 提供了数据点属于各个簇的概率信息。
      • 可以使用EM算法来估计模型参数。
    • 缺点:
      • 需要预先指定簇的数量。
      • 对初始参数敏感,可能导致局部最优解。
      • 计算复杂度较高,尤其是在处理大规模数据集时。
  6. 模糊C均值(FCM)算法

    • 优点:
      • 允许一个数据点属于多个簇,具有模糊成员关系。
      • 对于数据点的隶属度进行了量化,提供了更多信息。
    • 缺点:
      • 需要预先指定簇的数量。
      • 对初始参数选择敏感。
      • 计算复杂度较高,尤其是在迭代过程中。

 实践思路:热点事件的关键词提取与智能分类

 HanLP关键词提取

Java使用HanLp提取关键词短语,首先HanLp是开源免费的,可以直接引入依赖

HanLP | 在线演示 (hankcs.com)icon-default.png?t=O83Ahttps://hanlp.hankcs.com/

上面的网站为官方网站,里面有详细的教程。

2.x RESTful版

仅数KB,适合敏捷开发、移动APP等场景。简单易用,无需GPU配环境,秒速安装,强烈推荐。HanLP官方支持Java,Python,Golang语言。

 以下为Java引入Maven包

<dependency>
  <groupId>com.hankcs.hanlp.restful</groupId>
  <artifactId>hanlp-restful</artifactId>
  <version>0.0.10</version>
</dependency>

 1.x版

1.x版内部算法经过工业界和学术界考验,配套书籍《自然语言处理入门》open in new window已经出版。

<dependency>
    <groupId>com.hankcs</groupId>
    <artifactId>hanlp</artifactId>
    <version>portable-1.8.3</version>
</dependency>

我个人使用下来2.x版会更准确一点,但是速度会慢一些。

使用示例代码

 /**
     * 提取事件关键词
     *
     * @param eventName 事件内容
     * @return keyword 关键词
     */
    public String getKeyword(String eventName) {
        //提取三个关键词
        List<String> keywordList = HanLP.extractKeyword(eventName, 3);
        return keywordList.toString();
    }

核心就是HanLP类下的extractKeyword方法传参为事件内容,数字为提取的关键词个数。

1.x版本测试输入:

{
    "id": 1,
    "eventName": "占道摆摊影响交通",
    "eventKeyword": "",
    "status": 0
}

测试输出:

{
    "code": 200,
    "desc": "成功",
    "data": "[摆摊, 占道, 影响]"
}

 可见1.x版本的提取结果不是很理想

业务逻辑:新热点事件的智能分类

当一个新的热点事件出现时,我们首先对其进行关键词提取。然后,将这些关键词与数据库中已存储的热点事件关键词进行比对。如果发现一个以上的相同关键词,我们可以利用大模型进一步比对两个热点事件,判断它们是否属于同一事件。

优化逻辑:事件类型与关键词的动态管理

在数据库中,我们维护一个event_keywords表,用于存储热点事件的关键词。当表中没有数据时,我们通过大模型对比两个事件,生成原始的事件类型。

随着新事件的不断加入,我们通过提取的关键词与现有事件类型进行模糊匹配,利用大模型辅助判断事件是否属于同一类型。如果是,我们增加该事件类型的计数;如果不是,我们则将大模型返回的新事件类型加入数据库,并标记事件数量为1


数据库设计表:

event_detail表

event_type表

 实现代码待补充

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值