189 8069 5689

怎么用ClickHouse快速判断两个集合的相似度

本篇内容主要讲解“怎么用ClickHouse快速判断两个集合的相似度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用ClickHouse快速判断两个集合的相似度”吧!

公司主营业务:成都网站建设、做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出歙县免费做网站回馈大家。

在业务中我们经常会遇到查重的需求,例如给定一个文本字符串,判断在已有的文档中,是否存在与其相似的。

想要实现这类功能的方式有很多种,一种高效的方式是先利用 SinHash 将数据降维压缩成一串哈希值,再利用海明距离(Hamming Distance) 来比较两者之间的相似度。

SinHash 是一种局部敏感性哈希算法,特别适合在海量数据下的场景使用。

恰好在 ClickHouse 中现在已经内置了 MinHash 和 海明距离的相关函数,相关PR在此: 

https://github.com/ClickHouse/ClickHouse/pull/7649。

接下来就找个例子来体验一下吧。

准备4个文本字符串,用 SimHash 函数计算它们的哈希值: 

SELECT    ngramSimHash('传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。') AS sh2,    ngramSimHash('传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。') AS sh3,    ngramSimHash('传统的hash算法只负责将原始内容尽量均匀随机地映射为一个,原理上相当于伪随机数产生算法。') AS sh4,    ngramSimHash('SimHash本身属于一种局部敏感哈希算法,它产生的Hash签名在一定程度上可以表征原内容的相似度。') AS sh5
Query id: 7cf4a1d1-266f-4638-a75c-88ab1d93dbdf
┌──────sh2─┬──────sh3─┬──────sh4─┬───────sh5─┐│ 20645847 │ 20645847 │ 54200087 │ 957490773 │└──────────┴──────────┴──────────┴───────────┘
1 rows in set. Elapsed: 0.004 sec.

从哈希值直观的来看,sh2 和 sh3 是两段完全相同的文本,而 sh4 和 sh5 与 sh2 是有差异的,但是直接通过哈希值我们并不能判断它们的相似程度,这个时候就需要利用海明距离了。

使用 bitHammingDistance 函数计算哈希值之间的差异距离:

SELECT    bitHammingDistance(sh2, sh3) AS `1and2`,    bitHammingDistance(sh2, sh4) AS `1and3`,    bitHammingDistance(sh2, sh5) AS `1and4`FROM (    SELECT        ngramSimHash('传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。') AS sh2,        ngramSimHash('传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。') AS sh3,        ngramSimHash('传统的hash算法只负责将原始内容尽量均匀随机地映射为一个,原理上相当于伪随机数产生算法。') AS sh4,        ngramSimHash('SimHash本身属于一种局部敏感哈希算法,它产生的Hash签名在一定程度上可以表征原内容的相似度。') AS sh5)
Query id: c5b24238-cf85-4eb0-a77c-0b82a888a439
┌─1and2─┬─1and3─┬─1and4─┐│     0 │     3 │    10 │└───────┴───────┴───────┘
1 rows in set. Elapsed: 0.004 sec.

从结果可得知:

  • sh2 和 sh3 的海明距离是0,所以它们没有差异;

  • sh2 和 sh4 的距离是3,根据经验,距离在3以内的两段文本相似度就算很高了;

  • sh2 和 sh5 的距离是10,远大于3,所以它们是不同的。

到此,相信大家对“怎么用ClickHouse快速判断两个集合的相似度”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


分享名称:怎么用ClickHouse快速判断两个集合的相似度
URL分享:http://cdxtjz.cn/article/pigcdp.html

其他资讯