背景
提公升產品體驗,節省使用者感知度。——想想,如果看到一堆相似性很高的新聞,對於使用者的留存會有很大的影響。
技術方案1、資訊指紋演算法
思路:為每個網頁計算出一組資訊指紋(fingerprint)。比較兩個網頁相同資訊指紋數量,從而判斷內容的重疊性。
步驟:1)提取網頁正文資訊特徵(通常是一組詞),並進行向量化處理(權重演算法:如nf/df)。
2)取前n個資訊特徵,進行md5雜湊,得到資訊指紋。 優點:演算法簡單、工程好落地,不會受大數量問題影響。
技術方案2、分段簽名演算法
演算法思路:按規則把網頁切成n段,為每一段生成資訊指紋。如果這n個資訊指紋裡面,有m個(閾值)相同, 則認為兩者是複製網頁。
缺點:小規模比較是很好的演算法,對於大規模資料來說,演算法複雜度相當高。
技術方案3、4
方案4、基於句子的方式 演算法思路:獲取標點符號左右兩邊各2個漢子或英文作為特徵,來進行文字表示。
技術方案5
simhash——最終方案
simhash:區域性敏感雜湊(locality sensitive hash)
背景介紹:simhash是由 charikar 在2023年提出來的!
演算法思路:主要思想是降維,為每個文件通過hash的方式,生成乙個指紋(fingerprint)。
核心思想是將文字相似性問題轉換為集合的相似性問題!
設計的目的:是讓整個分布盡可能地均勻,形似的內容生成相近的hashcode。——即,hashcode的相似程度要 能直接反應輸入內容的相似程度(所以md5等傳統hash無法滿足需求)。
使用方:google基於此演算法實現網頁檔案查重。
優點:相對傳統文字相似性方法(歐氏距離、海明距離、余弦角度),解決計算量龐大等問題。
缺點:500字以上效果比較明顯500字以內,效果不是很理想,可以調整海明距離的n值來調整(3公升級為10)
simhash演算法原理
1)分詞:提取網頁正文資訊特徵詞,形成去掉噪音詞(助詞、語氣詞、人稱代詞)的單詞序列,並為每個詞加上權重(詞出現次數)。
抽取方式:
1.1. 剔除所有英文、數字、標點字元
1.2.分詞,並標註詞性,僅保留實體詞性,如名詞、動詞;(技巧一!)
1.3.過濾掉常用實體詞(常用實體詞是通過對歷史銳推訓練而得,即建立自己的停止詞表);(技巧二!)
1.4.計算保留實體詞的詞頻,並以此為權重,選擇權重大的詞語作為標籤;
1.5.標籤陣列長度大於乙個閾值(如3),才認為是有資訊量的銳推,否則忽略。(技巧三!)
—其他簡單方案:
工程實現巨簡單,據說準確率和召回率都能到達80%以上。
2)hash及加權:
對於提取的資訊特徵詞進行hash值運算,轉變成bit值,根據每個位是否為1,進行權重加減處理。
權重設定:詞頻+詞位置
3)合併及降維:每個單詞的序列值累加,變成只有乙個序列串。大於0 記為1,小於0記為0.
simhash演算法原理——圖例
simhash 海明 (hamming)距離
1、海明距離閾值選擇
模型效果:標題閾值、內容閾值
距離選擇,考慮因素:除考慮資料效果之外,還得考慮工程查詢效率。
2、提高效能的方式:
把64為simhash碼均分為漢明距離n+1塊,方便後續查詢所有臨近simhash碼。
simhash 海明 (hamming)距離(一)
simhash 海明 (hamming)距離(二)
第二種方案是預生成庫中所有樣本simhash code的3位變化以內的組合,大約需要佔據4萬多倍的原始空間,參考下圖
simhash 海明 (hamming)距離
一、二方案分析
上述兩種方法,或者時間複雜度,或者空間複雜度,其一無法滿足實際的需求。我們需要一種方法,其時間複雜度優於前者,空間複雜度優於後者。 假設我們要尋找海明距離3以內的數值,根據抽屜原理,只要我們將整個64位的二進位制串劃分為4塊,無論如何,匹配的兩個simhash code之間至少有一塊區域是完全相同的,如圖所示simhash 海明 (hamming)距離(三)
由於我們無法事先得知完全相同的是哪一塊區域,因此我們必須採用儲存多份table的方式。在本例的情況下,我們需要儲存4份table,並將64位的simhash code等分成4份;對於每乙個輸入的code,我們通過精確匹配的方式,查詢前16位相同的記錄作為候選記錄,如圖所示:
讓我們來總結一下上述演算法的實質:
1、將64位的二進位制串等分成四塊
2、調整上述64位二進位制,將任意一塊作為前16位,總共有四種組合,生成四份table
3、採用精確匹配的方式查詢前16位
4、如果樣本庫中存有2^34(差不多10億)的雜湊指紋,則每個table返回2^(34-16)=262144個候選結果,大大減少了海明距離的計算成本
我們可以將這種方法拓展成多種配置,不過,請記住,table的數量與每個table返回的結果呈此消彼長的關係,也就是說,時間效率與空間效率不可兼得! 這就是google每天所做的,用來識別獲取的網頁是否與它龐大的、數以十億計的網頁庫是否重複。另外,simhash還可以用於資訊聚類、檔案壓縮等。
simhash 演算法原理
simhash用於比較大文字,比如500字以上效果都還蠻好,距離小於3的基本都是相似,誤判率也比較低。但是如果我們處理的是微博資訊,最多也就140個字,使用simhash的效果並不那麼理想。看如下圖,在距離為3時是乙個比較折中的點,在距離為10時效果已經很差了,不過我們測試短文本很多看起來相似的距離確實為10。如果使用距離為3,短文本大量重複資訊不會被過濾,如果使用距離為10,長文字的錯誤率也非常高,如何解決?——採用分段函式!
simhash 演算法原理——評估結果
1、dump 一天的新聞資料:
2、評估指標
排重準確率(97%): 資料集:排重新聞集
方式:人工(研發先評估、產品評估)
召回率(75%):
資料集:訓練資料集-排重新聞集
方式:擴大海明距離,再進行人工評估
simhash 演算法原理——**片段
高效計算二進位制序列中1的個數:這個函式來計算的話,時間複雜度是 o(n); 這裡的n預設取值為3。由此可見還是蠻高效的。
參考資料
中文文件simhash值計算
網頁文字的排重演算法介紹
海量資料相似度計算之simhash和海明距離
短文本合併重複(去重)的簡單有效做法
海明距離查詢方案
推薦
技術方案設計
概要設計文件 技術方案 1.由原始需求逐步拆分,深入 後期迭代增加 2.資料流圖,整體流程 每一條資料流鏈路,便於查問題節點 3.不僅給技術開發看,面向產品和測試,對測試的輸出和產品的輸出 4.寫出支撐功能點,前端對接的資料結構 流程 需求評審 設計方案評審 資料鏈路,需求拆分 技術方案評審 實現方...
監控系統Metis方案設計
監控系統metis方案設計 一 概述 對於乙個業務系統而言,不同的角色關注的點會有一定差異。領導或負責人系統獲取系統的sla,系統間的相互作用,展示資源消耗情況 運維人員需要獲取基礎設施和服務的實時狀態資訊,各種軟硬體錯誤,效能變化及效能瓶頸 開發人員需要知道系統主要效能瓶頸,經常出現的錯誤,便於著...
優美的配色方案設計
怎麼做好 設計配色 一直是個難題 雖然 上有各種各樣的色庫,但配色仍然至關重要,不得已的話可以親自動手,況且樂趣滿滿。這個沒有一套標準 所以看自己怎麼喜歡怎麼來 你可以使用 illustrator keynot 和你想到的其他用著順手的工具。vi設計包含的遠不止選擇顏色和字型,如果要給公司尋找一套配...