全文共2693字,预计学习时长7分钟
![aa6db6d7cf0f58a49607835b39444491.png](https://img-blog.csdnimg.cn/img_convert/aa6db6d7cf0f58a49607835b39444491.png)
图源:unsplash
这个场景想想就很灾难了:为了找到发生在第100万行上的bug或回归,不得不在一个失败的软件构建中浏览2.5GB的日志条目(也就是300万行),这简直难以靠人工手动完成!
还好,有一个巧妙的方法能解救你——执行diff命令,将这些行与最近成功的软件构建进行对比,期望bug在日志中生成异常行。
标准的md5 diff命令执行速度很快,但它显示了行之间的字符级差异,因此仍然会生成至少数十万候选行以供浏览。使用机器学习中K-最邻近聚类的模糊diffing算法(logreduce所做的事情)能产生大约40000条候选行,但需要一个小时才能完成。
而我们的解决方案是在20分钟的计算时间内生成20000行候选行——而且得益于开放源码,只需要大约100行Python代码就能实现。
该应用程序结合了神经嵌入(将单词和句子中的语义信息进行编码)和局部敏感哈希算法(高效地将大致邻近的项分配到相同的储存器,而将远处的项分配到不同的储存器)。将嵌入式系统与LSH(Locality Sensitive Hashing,局部敏感哈希)结合是个不错的想法,而这一想法的诞生还不到十年!