酷播亮新聞
最棒的知識補給站

洗稿,技術上怎麼判斷文章相似性?

文章摘要: 使用上述方法進行文章相似度檢測可以快速判斷文章 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 元,感謝大家。文章中部廣告,文章底部廣告,文章底部二維打賞碼都非常影響使用者體驗,樓主就不這麼切入廣告了。平時發的推廣軟文,大家多幫忙掃掃碼,多幫忙點選點選,多幫忙轉發轉發哈,撰文不易。

做技術,思路更重要,求轉。

如有侵權請來信告知:酷播亮新聞 » 洗稿,技術上怎麼判斷文章相似性?