您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“怎么用ClickHouse快速判斷兩個(gè)集合的相似度”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么用ClickHouse快速判斷兩個(gè)集合的相似度”吧!
在業(yè)務(wù)中我們經(jīng)常會(huì)遇到查重的需求,例如給定一個(gè)文本字符串,判斷在已有的文檔中,是否存在與其相似的。
想要實(shí)現(xiàn)這類功能的方式有很多種,一種高效的方式是先利用 SinHash 將數(shù)據(jù)降維壓縮成一串哈希值,再利用海明距離(Hamming Distance) 來(lái)比較兩者之間的相似度。
SinHash 是一種局部敏感性哈希算法,特別適合在海量數(shù)據(jù)下的場(chǎng)景使用。
恰好在 ClickHouse 中現(xiàn)在已經(jīng)內(nèi)置了 MinHash 和 海明距離的相關(guān)函數(shù),相關(guān)PR在此:
https://github.com/ClickHouse/ClickHouse/pull/7649。
接下來(lái)就找個(gè)例子來(lái)體驗(yàn)一下吧。
準(zhǔn)備4個(gè)文本字符串,用 SimHash 函數(shù)計(jì)算它們的哈希值:
SELECT
ngramSimHash('傳統(tǒng)的hash算法只負(fù)責(zé)將原始內(nèi)容盡量均勻隨機(jī)地映射為一個(gè)簽名值,原理上相當(dāng)于偽隨機(jī)數(shù)產(chǎn)生算法。') AS sh2,
ngramSimHash('傳統(tǒng)的hash算法只負(fù)責(zé)將原始內(nèi)容盡量均勻隨機(jī)地映射為一個(gè)簽名值,原理上相當(dāng)于偽隨機(jī)數(shù)產(chǎn)生算法。') AS sh3,
ngramSimHash('傳統(tǒng)的hash算法只負(fù)責(zé)將原始內(nèi)容盡量均勻隨機(jī)地映射為一個(gè),原理上相當(dāng)于偽隨機(jī)數(shù)產(chǎn)生算法。') AS sh4,
ngramSimHash('SimHash本身屬于一種局部敏感哈希算法,它產(chǎn)生的Hash簽名在一定程度上可以表征原內(nèi)容的相似度。') 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.
從哈希值直觀的來(lái)看,sh2 和 sh3 是兩段完全相同的文本,而 sh4 和 sh5 與 sh2 是有差異的,但是直接通過(guò)哈希值我們并不能判斷它們的相似程度,這個(gè)時(shí)候就需要利用海明距離了。
使用 bitHammingDistance 函數(shù)計(jì)算哈希值之間的差異距離:
SELECT
bitHammingDistance(sh2, sh3) AS `1and2`,
bitHammingDistance(sh2, sh4) AS `1and3`,
bitHammingDistance(sh2, sh5) AS `1and4`
FROM
(
SELECT
ngramSimHash('傳統(tǒng)的hash算法只負(fù)責(zé)將原始內(nèi)容盡量均勻隨機(jī)地映射為一個(gè)簽名值,原理上相當(dāng)于偽隨機(jī)數(shù)產(chǎn)生算法。') AS sh2,
ngramSimHash('傳統(tǒng)的hash算法只負(fù)責(zé)將原始內(nèi)容盡量均勻隨機(jī)地映射為一個(gè)簽名值,原理上相當(dāng)于偽隨機(jī)數(shù)產(chǎn)生算法。') AS sh3,
ngramSimHash('傳統(tǒng)的hash算法只負(fù)責(zé)將原始內(nèi)容盡量均勻隨機(jī)地映射為一個(gè),原理上相當(dāng)于偽隨機(jī)數(shù)產(chǎn)生算法。') AS sh4,
ngramSimHash('SimHash本身屬于一種局部敏感哈希算法,它產(chǎn)生的Hash簽名在一定程度上可以表征原內(nèi)容的相似度。') AS sh5
)
Query id: c5b24238-cf85-4eb0-a77c-0b82a888a439
┌─1and2─┬─1and3─┬─1and4─┐
│ 0 │ 3 │ 10 │
└───────┴───────┴───────┘
1 rows in set. Elapsed: 0.004 sec.
從結(jié)果可得知:
sh2 和 sh3 的海明距離是0,所以它們沒(méi)有差異;
sh2 和 sh4 的距離是3,根據(jù)經(jīng)驗(yàn),距離在3以內(nèi)的兩段文本相似度就算很高了;
sh2 和 sh5 的距離是10,遠(yuǎn)大于3,所以它們是不同的。
到此,相信大家對(duì)“怎么用ClickHouse快速判斷兩個(gè)集合的相似度”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。