首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日志消息分类/分组以及为每个组查找人类可读的模式

日志消息分类/分组以及为每个组查找人类可读的模式
EN

Stack Overflow用户
提问于 2020-01-30 19:59:32
回答 1查看 237关注 0票数 3

作为数据科学和机器学习的新手,我想就以下问题提出以下问题:

overkill?

  • Could
  • 是机器学习对这样的问题有好处,还是说这个问题与另一个已经发表论文的经典问题有关,所以我可以选择正确的解决方案?

问题:

我一直在研究一个非常有趣的问题,我相信很多分析系统都是通过自动化过程解决的。

我们正在收集发生在各种浏览器和自定义构建web应用程序中的许多JavaScript错误消息。我们的目标是对类似的消息进行分组,并根据分组消息所具有的公共模式对每个组进行标记。

示例:

代码语言:javascript
复制
+---------------------------------------------------------------+
|Label: "Forbidden: User session {{placeholder1}} has expired." |
+---------------------------------------------------------------+
|Message: "Forbidden: User session aad3-1v299-4400 has expired."|
|Message: "Forbidden: User session jj41-1d333-bbaa has expired."|
|Message: "Forbidden: User session aab3-bn12n-1111 has expired."|
+---------------------------------------------------------------+

到目前为止,我们已经有了半自动的过程来解决这个问题,但是我们不时地得到新的用户生成的JavaScript错误消息,这些错误消息会从我们的过滤器中溜走。

我一直在考虑使用现有库/工具/算法的朴素2步方法。

对于一批错误行,

  1. 运行一个查找类似字符串的算法(例如Levenshtein)。将相似的errors.
  2. Within分组,一组相似的字符串运行一个差异并找到动态部分。检查diff:

作为参考,我们在一分钟内收集了错误消息:

代码语言:javascript
复制
Message: 3312445,Error: Unknown page "retina_list"
Message: 9931234,Error: Unknown page "widget_summary"
Message: ReferenceError: 'alg,TypeError: g' is undefined
Message: 522574,Error: Unknown page "page_options"
Message: ReferenceError: '297756| Zly / Error in handler for event:,[object Object],ApiListenerError: TypeError: a' is undefined
Message: [Euv warn]: style="width: {{item.evaluation}}em": interpolation in 'style' attribute will cause the attribute to be discarded in Internet Explorer. Use krt-bind:style instead. (found in component: <default-componentfalse2320383>)
Message: [Euv warn]: src="//www.example.com/image/{{item._id}}-1.jpg?w=220&h=165&mode=crop": interpolation in 'src' attribute will cause a 404 request. Use krt-bind:src instead. (found in component: <default-componentfalse8372912>)
Message: [Euv warn]: src="//www.example.com/image/{{item._id}}?car=recommend_sp312": interpolation in 'src' attribute will cause a 404 request. Use krt-bind:src instead. (found in component: <default-componentfalse3330736>)
Message: [Euv warn]: src="//www.example.com/image/{{item._id}}-1.jpg?w=220&h=165&mode=crop": interpolation in 'src' attribute will cause a 404 request. Use krt-bind:src instead. (found in component: <default-componentfalse4893336>)
Message: ReferenceError: 'alg,TypeError: g' is undefined
Message: 73276| Zly / Error in handler for event:,[object Object],ApiListenerError: TypeError: Cannot read property 'campaignName' of undefined
Message: ReferenceError: 'alg,TypeError: g' is undefined
Message: ReferenceError: 'bend,TypeError: f' is undefined

我最近一直在玩Tensorflow JS,在那里我完全是初学者,但是我可能尝试训练一些可以帮助我对字符串进行分类和标记的东西。

我还认为,更严重的问题是生成组标签,而不是分组字符串,因为有时一对相似的字符串的长度非常不同,占位符是带有特殊字符的长句,例如".^%#&*!?<>|][{} ]。

EN

回答 1

Stack Overflow用户

发布于 2020-02-01 23:05:06

正如您已经指出的,听起来我们可以将这个问题分为两个不同的步骤。

  1. Group将类似的消息合并在一起,
  2. 标记每个组。

步骤1:

虽然我不太熟悉Tensorflow JS,但我不认为使用机器学习( Machine,ML)来解决这个问题是过分的,特别是在步骤1中。

事实上,这种类型的问题对于一种称为无监督学习的特定形式的ML是一个很好的候选,更具体地说,就是聚类。在无监督学习中,我们寻找“以前未知的模式在我们的数据中没有预先存在的标签”。

请参阅:https://en.wikipedia.org/wiki/Unsupervised_learning

在这种情况下,这意味着在应用聚类算法之前,我们不知道“Error Message 1”和“Error Message 2”是否属于同一组。使用您的示例,我们可以合理地怀疑以下消息:

代码语言:javascript
复制
“Forbidden: User session aad3-1v299-4400 has expired"
“Forbidden: User session jj41-1d333-bbaa has expired"

将属于同一组,但是聚类算法在开始时不知道这一点。

我们可以将此与一种名为“分类”的监督学习形式进行对比,在这种情况下,我们预先知道,我们期望一个群体拥有这种形式

代码语言:javascript
复制
“Forbidden: User session {{placeholder1}} has expired". 

然后,数据中预先存在的标签是消息,例如

代码语言:javascript
复制
“Forbidden: User session aad3-1v299-4400 has expired"
“Forbidden: User session jj41-1d333-bbaa has expired"

属于上面期望的组。从本质上讲,我们给ML模型提供了一堆关于这个组的示例,然后似乎相似的传入消息将被分类到这个组中。

从描述中可以看出,对于步骤1,您希望执行字符串匹配(例如Levenshtein)来比较所有示例消息,然后对这些结果应用集群算法。然后,在您有了消息组(集群)之后,第2步涉及到为每个组找到一个合适的标签。

步骤2:

同意为每一组找到合适的标签可能是更困难的问题。一种可能有用的方法是计算一个单词或短语在一个组或集群中出现的次数,如果它不满足某些预定义的阈值,就像在示例标签中一样使用占位符。例如,“禁止”、“用户”、“会话”和“过期”这些词对组来说是常见的,而alpha数字ID列出的则是单个消息所特有的。如果阈值是一个单词或短语必须显示在至少两条消息中,则只有ID将被占位符替换。

在这种方法中,您基本上是在寻找组中不常见的单词或短语,并且在形成适当的标签时没有提供有用的信息。在某种程度上,这与许多搜索引擎中使用的概念截然相反,该概念旨在发现一个词或短语对文档有多常见或有多重要(参见https://en.wikipedia.org/wiki/Tf%E2%80%93idf)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59993625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档