在大数据中如何寻找相似的文档(shingle, minhash, LSH)(二)
生活随笔
收集整理的這篇文章主要介紹了
在大数据中如何寻找相似的文档(shingle, minhash, LSH)(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
接上篇譯文; 1.盡管我們利用minhashing技術(shù)將大數(shù)據(jù)量的文檔壓縮到小數(shù)據(jù)量的signatures,并且能夠保證文檔對(duì)之間的相似度大致不變。但是由于文檔對(duì)的數(shù)目可能非常的大,我們?nèi)匀徊荒芎苡行У恼业阶钕嗨频奈臋n對(duì)。 如果我們的目標(biāo)是計(jì)算每一對(duì)文檔對(duì)之間的相似度,那么我們就沒有更好的辦法了,或者可以用并行的方法減少運(yùn)行的時(shí)間規(guī)模;但是如果我們的目的僅僅是找到的最相似的文檔對(duì)或者相似度在某種程度之上的文檔對(duì),這時(shí)候我們就可以采用LSH技術(shù)(locality-sensitive hashing or near-neighbor search)。 2. ? ?應(yīng)用于尋找相似文檔的LSH技術(shù) 一般來說,我們這樣應(yīng)用LSH技術(shù):將所有的items(要比較的東西)進(jìn)行多次的hash,從而能夠?qū)⒖赡芟嗨频奈臋nhash到同一個(gè)bucket中;然后我們會(huì)只考慮那些hash到同一個(gè)bucket中的items,認(rèn)為他們組成的item對(duì)才有可能是我們要找的item對(duì)。 ?這其中就會(huì)產(chǎn)生兩個(gè)概念,一個(gè)是 false positives: 就是指那些本來不相似的item對(duì)卻被hash到一個(gè)bucket中;另一個(gè)是false negatives: 指那些本來相似的items對(duì)卻沒有被hash到同一個(gè)bucket中。 如何具體使用lsh技術(shù)呢? ?一個(gè)比較有效的hashing方法是將signature matrix(由所有文檔的signature組成,每一列存儲(chǔ)一個(gè)文檔的signature)分為b個(gè)bands,每個(gè)band包含r行(相當(dāng)于將每個(gè)文檔的b*r 個(gè)signatures分成b組); 對(duì)于每一個(gè)band用一個(gè)hash函數(shù)(輸入是每個(gè)文檔的r個(gè)signature,相當(dāng)于將一列考慮為hash的輸入),將每一列的signature hash到一些大數(shù)量的bucket中。(我們可以對(duì)不同的band使用相同的hash函數(shù),但是不同的band的bucket要放在不同的位置,從而保證不同band中相同的列不會(huì)被hash到同樣的bucket中。) 3. 對(duì)lsh的banding技術(shù)的分析 將設(shè)我們有b bands而且每個(gè)band有r行。并且假設(shè)一個(gè)特定的文檔對(duì)的jaccard距離是s。 ?從前文的minhash技術(shù)的分析(沒有翻譯 o(╯□╰)o)中可以知道該文檔對(duì)的任何一行的signature相同的概率是s。 ?然后我們就可以計(jì)算著文檔對(duì)成為一個(gè)候選的文檔對(duì)(被hash到同一個(gè)bucket中)的概率,過程如下: 在一個(gè)特定的band中,該文檔對(duì)的所有的signature都相等的概率是 s^r; ?那么不相等的概率就是 1-s^r; 所有的band中,該文檔對(duì)的signature都不相等的概率是 (1-s^r)^b; ?該文檔對(duì)至少會(huì)在一個(gè)band中相等的概率就是 1-(1-s^r)^b. 分析: 將b r看作一個(gè)常量,可以看出該概率是s的函數(shù)而且是一個(gè)典型的S型曲線. 該曲線橫軸是 文檔對(duì)的相似度; 縱軸為該文檔對(duì)被放到一個(gè)bucket中成為候選文檔對(duì)的概率;兩者之間的關(guān)系是一條我們非常熟知s型曲線,對(duì)于s型曲線,中間有一段非常陡峭的上升部分,可以將這個(gè)部分的橫軸看作相似度的閾值,高于這個(gè)相似度的一般以接近于1的概率(具體的概率可以通過前邊的分析計(jì)算出來)被分到同一個(gè)bucket中,而低于這個(gè)相似度閾值的則以接近于0的概率被分到同一個(gè)bucket中;而且這個(gè)閾值是b,r的函數(shù):s=(1/b)^(1/r)。 ? 這種函數(shù)的s型特性就滿足了我們對(duì)于LSH技術(shù)的要求,即將相似的文檔hash到同一bucket中,而將不相似的文檔hash到不同的bucket中,至于具體的false positive 和false negatives 與具體的b和r取值有關(guān)。(這種方法會(huì)產(chǎn)生一定的false positives 和 false negatives)
4. ? ? 最后我們總結(jié)下如何在大數(shù)據(jù)量的文檔對(duì)中找到相似的文檔對(duì) 1) 針對(duì)文檔特性選取合適的k值,對(duì)每一個(gè)文檔進(jìn)行k-shingle,并對(duì)shingle結(jié)果映射為整數(shù)。 2) 對(duì)每個(gè)文檔的shingle標(biāo)簽進(jìn)行排序。? 3) ?利用前文所述算法,計(jì)算每個(gè)文檔的signature(signature的長(zhǎng)度n的選擇是一個(gè)需要tradeoff的量) 4) 選取合適的閾值t, 用來決定相似度多高的文檔對(duì)會(huì)被放到同一個(gè)bucket中作為候選對(duì);然后選取bands:b以及rows:r,使得b*r=n,而且 t ≈ (1/b)^(1/r)。 如果希望false negatives盡量的低,可以選取b r使得t盡量小;如果追求速度,那就是的t盡量大。 5) 利用LSH技術(shù)計(jì)算出候選文檔對(duì); 并對(duì)文檔對(duì)的最初的signatures進(jìn)行檢測(cè),確保其相似度確實(shí)在t之上。 6) 最后回到文檔對(duì)最原始的字符狀態(tài),進(jìn)行檢測(cè)文檔對(duì)是否確實(shí)相似。
4. ? ? 最后我們總結(jié)下如何在大數(shù)據(jù)量的文檔對(duì)中找到相似的文檔對(duì) 1) 針對(duì)文檔特性選取合適的k值,對(duì)每一個(gè)文檔進(jìn)行k-shingle,并對(duì)shingle結(jié)果映射為整數(shù)。 2) 對(duì)每個(gè)文檔的shingle標(biāo)簽進(jìn)行排序。? 3) ?利用前文所述算法,計(jì)算每個(gè)文檔的signature(signature的長(zhǎng)度n的選擇是一個(gè)需要tradeoff的量) 4) 選取合適的閾值t, 用來決定相似度多高的文檔對(duì)會(huì)被放到同一個(gè)bucket中作為候選對(duì);然后選取bands:b以及rows:r,使得b*r=n,而且 t ≈ (1/b)^(1/r)。 如果希望false negatives盡量的低,可以選取b r使得t盡量小;如果追求速度,那就是的t盡量大。 5) 利用LSH技術(shù)計(jì)算出候選文檔對(duì); 并對(duì)文檔對(duì)的最初的signatures進(jìn)行檢測(cè),確保其相似度確實(shí)在t之上。 6) 最后回到文檔對(duì)最原始的字符狀態(tài),進(jìn)行檢測(cè)文檔對(duì)是否確實(shí)相似。
總結(jié)
以上是生活随笔為你收集整理的在大数据中如何寻找相似的文档(shingle, minhash, LSH)(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AWD流量分析
- 下一篇: 我们该怎么样看待人工智能?