从100万篇文档中找出相似度较高的文档对
当我们想从100万篇文档中找出相项较高的文档对,就需要两两相互比较,一共是5千亿次,如果每次比较花费1微秒,那一共需要6天才能计算完,这肯定是不行的。 问题应用: 1、论文查重,读过大学的就都听过这个词,让无数人崩溃的查重,就是本题的一种应用,只是
当我们想从100万篇文档中找出相似项较高的文档对,就需要两两相互比较,一共是5千亿次,如果每次比较花费1微秒,那一共需要6天才能计算完,这肯定是不行的。
问题应用:
1、论文查重,读过大学的就都听过这个词,让无数人崩溃的查重,就是本题的一种应用,只是将一篇和上千万篇比较,但原理是一样的。
2、同源文档。我们再网站百度一些东西时,点开几个页面,可能发现很多页面及其相似,内容甚至重复,比如CSDN上的博客就有很多是从别的地方复制过来的,各个网站上的新闻等也有时候会相同或相似。如果一个网站汇总每天的新闻,那肯定是要能识别内容相似的两篇文章,选一个即可。
相似度定义:
Jaccard相似度:集合S和T的交集与集合并集大小的比率。加入S文档有三个字母A,B,C,T文档有5个字母B,C,D,E,F,那么S和T的相似度就是2除以6,三分之一。
问题处理
1、单个文档处理
步骤1——Shingling
文档一般都很长,总不能一个字符一个字符的比较,最有效的解决方法就是把整个文档拆分成短字符集合(长度为k),这样处理后如果集合中相同元素越多,那么相似度也就越高,同时还能忽略句子顺序(很多人抄论文时就经常改句子顺序)。
例:文档为abcdabd,选择k=2,那字符集合就是{ab,bc,cd,da,bd}。
当然k=2肯定是不行的,这样集合最大才是26^2,估计任何两个长文档都会认为相似。
具体k应该为多少呢?如果文档是邮件,那么k=5就够了,如果像论文这样大文档,一般k=9.
此外,文档中有很多次被称作停用词,像the,and,to等,一般是忽略这些词,因为对文章主题无作用。
步骤2——哈希
如果k=9,那么集合最大为26^9,每个元素需要9个字节来表示,而实际的集合大小是文档长度*9,现在我想把这多么元素哈希到2^32个桶中,这样每个元素就可以用4个字节来表示,这种做法的效果要比直接另k=4要好。原因是k=4时,实际集合中的元素最多为26^4,而且通常是20^4,因为像字母z,j的频率出现的次数是很低的。而9个字节的集合大小最大能达到26^9
感谢哈希算法一次。
步骤3——最小哈希
即使用4个字节的shingle,那么每篇文档难道要保存4倍的文档大小的信息?本步骤的目标就是将大集合替换成小很多的“签名”,通过计算签名集合的相似度来估计原始集合的相似的,当用50Kb的文档shingle到200Kb,而最后的签名集合只有1Kb时,最终差异值可能在几个百分点之内。
假设有M个文档集合,一共有N元素(所有集合中元素的并集,N很大),那么集合可以用一个N行M列来表示,当这个集合含这个元素时,对应位置为1,否则为0.
我们随机选择n(通常为几百)为签名大小,可以构建集合S的最小哈希签名向量[h1(r),h2(r)...hn(r)]。
步骤如下:
初始矩阵SIG(大小n*M)都为正无穷,对每行r如下处理:
(1)随机选择n个哈希函数,计算出h1(r)...hn(r).
(2)如果原N*M矩阵对应位置为0,什么都不做,如果为1,那么将SIG中新的值变为hi(r)和SIG中原值的最小值。
也就是通过N步迭代,把原来的N*M大小矩阵,变成n*M大小的矩阵(对于一个文档来说,就是N变成了n)。
这种方法能估计准确有一定的理论依据,概括为:两个集合的两个最小哈希值相等的概率等于这连个几个的相似度。
再次感谢哈希算法。
2、整体文档处理
现在文档本身不是很大,但是需要比较的文档对的数目太大。 实际中我们关注的是相似度大于某个值的文档对,这样很多相似度较低的文档对是不需要比较的。 处理方法:局部敏感哈希(LSH) 我们对目标项进行多次哈希处理,使得相似项会比不相似项更可能到同一个桶中,然后只要比较同一个桶中的文档对。哈希到同一个桶的非相似文档对成为伪正例,而真正相似的分到两个桶的为伪反例,我们希望这两个越少越好。 一种有效的方法是将上面的n*M矩阵再分为b块,每块是r行*M列,(n=br)。将每个r长的序列哈希到一个大数目范围的桶。这样矩阵缩小为b*M,对于两列来说,只要有一行在一个桶中,就是相似候选对,这种方法的准确也是很高的,关于LSH技术详细理论分析可以查看其他文献。 这种LSH技术由于在过滤阶段非相似的数据对象大部分被过滤掉,因而极大地缩短了查询计算时间,提高了效率。 再次感谢哈希。 总结 最后总结这种问题常用思路: 1、先选择k,构建shingle集合,可以再通过哈希映射成更短的桶编号。 2、计算出最小哈希签名。 3、应用LSH技术构建候选对。 每一步都用了哈希算法,复杂度一再缩小。
熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

本文將介紹如何解決MicrosoftWord中出現的記憶體或磁碟空間不足以重新分頁或列印文件的問題。這種錯誤通常會在使用者嘗試列印Word文件時出現。如果您遇到類似的錯誤,請參考本文提供的建議來解決。記憶體或磁碟空間不足,無法重新分頁或列印此文件Word錯誤解決MicrosoftWord列印錯誤「沒有足夠記憶體或磁碟空間重新分頁或列印文件」的方法。更新MicrosoftOffice關閉佔用記憶體的應用程式更改您的預設印表機在安全模式下啟動Word重命名NorMal.dotm檔案將Word檔案儲存為另一

它是395個字,就是495個這篇文章將向您介紹如何在Word文件中加入紅線。在文件中新增紅線是指對文件進行修改,以便使用者可以清楚地查看所做的變更。這項功能在多人共同編輯一個文件時非常重要。 redline是什麼意思標示文件加紅線是指使用紅線或標註來指示文件的變更、編輯或修訂。這個術語的靈感來自於使用紅色筆在列印文件上做標記的做法。紅線批註被廣泛應用在不同場景下,如:在編輯文件時為作者、編輯和審閱人清楚地顯示建議的變更。在法律協議或合約中提出變更和修改對論文、演講等提出建設性的批評和建議。如何給W

近年來,隨著網路科技的不斷發展,我們的生活中離不開各種數位工具和網路。在處理文件時,特別是在寫作中,我們經常使用到word文件。然而,有時我們可能會遇到一個棘手的問題,那就是word文件中的超連結無法開啟。以下將就這個問題進行一番探討。首先,我們需要明確的是,超連結是指在word文件中新增的指向其他文件、網頁、目錄、書籤等的連結。當我們點擊這些連結時,我

學習Go語言文件中的os.Stdout.Write函數實現標準輸出在Go語言中,標準輸出是透過os.Stdout來實現的。 os.Stdout是一個*os.File類型的變量,它代表了標準輸出設備。為了將內容輸出到標準輸出,可以使用os.Stdout.Write函數。本文將介紹如何使用os.Stdout.Write函數實現標準輸出,並提供具體的程式碼範例。 os.

當您在Windows11/10電腦上開啟Word文件時遇到空白頁面的問題,可能需要進行修復以解決此狀況。造成這一問題的根源多種多樣,其中最普遍的原因之一是文件本身損壞。此外,Office檔案的損壞也可能導致類似的情況。因此,本文提供的修復方法可能對您有幫助。您可以嘗試使用一些工具來修復損壞的Word文檔,或嘗試將文檔轉換為其他格式再重新開啟。另外,檢查系統中的Office軟體是否需要更新也是解決此問題的方法。透過這些簡單的步驟,您可能能夠解決Word文件空白開啟的Word文件在Win

如何實現Workerman文件的基本使用方法簡介:Workerman是一個高效能的PHP開發框架,它可以幫助開發者輕鬆建立高並發的網路應用程式。本文將介紹Workerman的基本使用方法,包括安裝和設定、建立服務和監聽連接埠、處理客戶端請求等。並給出相應的程式碼範例。一、安裝並設定Workerman在命令列中輸入以下命令來安裝Workerman:c

Java文件解讀:StringBuilder類別的substring()方法詳細介紹引言:在Java程式設計中,字串的處理是非常常見的操作之一。而Java提供了一系列關於字串處理的類別和方法,其中StringBuilder類別是常用於頻繁字串操作的選擇。在StringBuilder類別中,substring()方法是一個非常有用的方法,用來截取字串的子字串。本文將

Word文件是我們日常工作和學習中使用頻率較高的應用程式之一。在處理文件時,有時會遇到需要將兩頁內容合併為一頁的情況。本文將詳細介紹在Word文件中如何將兩頁合併為一頁,幫助讀者更有效率地處理文件排版。在Word文件中,將兩頁合併為一頁的操作通常用於節省紙張和列印成本,或為了使文件更加緊湊和整潔。以下是合併兩頁為一頁的具體步驟:第一步:開啟需要操作的Word
