文章摘要: 使用上述方法進行文章相似度檢測可以快速判斷文章 A 與文章 B 的相似度最高
這幾天「差評洗稿」的事情,鬧得沸沸揚揚,樓主本身也是內容創作的手藝人,簡單說兩句。
「運營為王」的今天,組一隊編輯,起一個噱頭標題,調整別人原創的內容(洗稿),在朋友圈 / 微信群 / 各渠道推廣,個人原創作者根本防不勝防。
樓主最早寫文章的配圖都不帶水印的,無奈抄襲成風的浮躁網際網路,在 N 個平臺發現了貼有「原創」標籤的樓主的文章,才被迫打上「架構師之路」的水印。
畫外音:樓主的配圖很醜,很容易辨認。
當然,有些很用心的博主:
反正就是不會說明來源。
洗稿又不犯法,怎麼這麼矯情?
大夥將心比心的感受下,辛辛苦苦花了 5 個小時縷思路,寫文字,畫圖形,調格式釋出的原創文字, 5K 閱讀。
洗稿組織花了 10 分鐘調整內容,打原創標籤,多渠道運營, 5W+ 閱讀,原創作者會是什麼感受?
大夥將心比心的感受下,辛辛苦苦花了 4 年時間,寫了幾百篇文章,只為分享知識。
被洗稿之後的文章,目的卻是賺打賞賺廣告費,原創作者會是什麼感受?
真希望,這是「內容為王」的時代。
好了,技術公眾號,還是多聊聊技術的東西。很多原創內容在網上被抄來抄去,改來改去,技術上有什麼樣的方法能夠判斷抄襲與洗稿,判斷文章相似性,收集證據呢?希望本文能給大家一些思路。
兩篇文章,如何判斷一模一樣?
答 :很容易想到的, 一個位元組一個位元組的比對 。
一個位元組一個位元組比對效率較低, 有沒有更高效的方法?
答 :可以用一個 簽名值 (例如 md5 值)代表一篇文章,簽名值相同則認為文章相同。
md5 是一種常見的簽名演算法,常用來判斷資料的完整性與一致性。例如:
-
判斷下載的區塊鏈是否被篡改,只要比對本地資料 md5 ,與預期的 md5 即可
-
判斷上線的二進制是否被篡改,只要比對線上二進制的 md5 ,與編譯機上二進制的 md5 即可
-
判斷訊息是否被篡改,只要比對收到訊息的 md5 ,與傳過來的 md5 值即可
md5 設計原則 :兩篇文章哪怕只有 1 個 字元 不同,其 md5 簽名值也會非常大,它只適用於「完整性」檢測 ,並不適用於「相似性」檢測 。
對於一篇原創文章,洗稿者可能 刪除了 5% 的內容,修改了 5% 的內容,調整順序了 5% 的內容(一般沒有時間增加5%的內容)。此時的簽名值並不相同。
洗稿這種場景,並不適合簽名值比對。
有沒有一種雜湊演算法,文章越相似,雜湊值也越相似呢?
答 :區域性敏感雜湊 LSH ( Locality Sensitive Hash ) 是典型解決方案(感興趣的同學自行百度),這裏分享一下 minHash 的思路。
什麼是 minHash ?
答 : minHash 是區域性敏感雜湊的一種,它常用來 快速判定集合的相似性 ,也常用於檢測文章的相似性。
其思路為:用相同的規則抽取集合中的少部分元素代表整個集合,如果少部分元素的重合度很高,非常可能整個集合的重複度也很高。
舉例:待判定的集合為 A{1, 7, 5, 9, 3, 11, 15, 13}
已有的集合為:
B{10, 8, 2, 4, 6, 0, 1, 16},
C{100, 700, 500, 900, 300, 1100, 1500,1300},
D{1, 3, 2, 4, 6, 5, 8, 7}
假設使用部分元素代替全體集合的規則為:集合內元素進行 排序,取值最小的 4 個 (這個過程有資訊損失,我們可以認為是一個 hash 過程)代表整個集合。
處理結果為:
A{1, 3, 5, 7}
B{0, 1, 2, 4} =>A 與 B 有 1 個元素相同
C{100, 300, 500, 700} => A 與 C 有 0 個元素相同
D{1, 2, 3, 4} => A 與 D 有 2 個元素相同
判斷結論:認為集合 A 與集合 D 是最相似的。
例子說明了整體思路,實際執行的過程中:
-
可以使用 更多的元素 來代表集合,以提高準確性
-
可以使用 更多的 hash 函式 來代表集合,以提高準確性
-
minHash 可以量化評判相似度
-
文章庫中的雜湊值都可以提前計算
minHash 可以檢測集合相似度,它與文章相似度有啥關係?
答 :如果能將每一篇文章,用一個集合來表示,那麼文章的相似度就能用 minHash 來解決了。
如何將文章轉化為集合?
答 :分詞。
舉例:文章為 A{ 我是 58 沈劍,我來自 58 到家 }
已有文章庫為:
B{ 我是一隻來自 58 的狼 }
C{58 到家,服務到家 }
D{ 這事和我沒關係,我是湊數的 }
使用分詞將上述文字集合化:
A{ 我, 58 ,沈劍,來自,到家 }
B{ 我, 58 ,來自,狼 }
C{58 ,服務,到家 }
D{ 事,我,湊數,關係 }
判斷結論:轉化為集合後,可以快速判斷文章 A 與文章 B 的相似度最高。
實際執行過程中,除了分詞還可以考慮 詞頻 ,以及詞的 權重 。用這種方法進行文章相似度檢測,準確率非常高(文字越長越準)。
能否進一步優化,提升效率,保留證據,證明洗稿者抄襲?
答:使用上述方法進行文章相似度檢測,需要進行中文分詞,詞頻統計,雜湊值計算,相似度計算,計算量微大。可以這麼優化:
-
不再進行分詞,而是進行 「分句」 ,用標點符號把長文按照句子分開,使用 N 個句子 作為文章的簽名,能大大降低工程複雜度,並且準確度也異常的高
-
故意留一些錯別字 ,洗稿者很難發現這些錯別字,能夠很快證明抄襲成立
總結
-
簽名 ,例如 md5 經常用於判斷文章相同,其效率比全文比對效率高
-
區域性敏感雜湊 ,例如 minhash 經常用於判斷文章相似
-
minhash 的原理是,使用子集代表全集合,以子集的相似性模擬全集合的相似性
-
把文章轉化為集合的常見方法是 分詞
-
分句,故意留錯別字 能夠提高檢測效率
畫外音:看了下後臺,創作 4 年,總打賞 10797.72 元,感謝大家。文章中部廣告,文章底部廣告,文章底部二維打賞碼都非常影響使用者體驗,樓主就不這麼切入廣告了。平時發的推廣軟文,大家多幫忙掃掃碼,多幫忙點選點選,多幫忙轉發轉發哈,撰文不易。
做技術,思路更重要,求轉。