从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 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、Microsoft Word で文書を再ページしたり印刷したりするときにメモリまたはディスク容量が不足する問題を解決する方法を紹介します。このエラーは通常、ユーザーが Word 文書を印刷しようとしたときに発生します。同様のエラーが発生した場合は、この記事に記載されている解決策を参照してください。この文書を再ページまたは印刷するにはメモリまたはディスク容量が不足しています。 Word エラー Microsoft Word の印刷エラー「文書を再ページまたは印刷するには、メモリまたはディスク容量が不足しています。」を解決する方法。 Microsoft Office を更新する メモリを大量に消費するアプリケーションを閉じる 通常使うプリンタを変更する Word をセーフ モードで起動する NorMal.dotm ファイルの名前を変更する Word ファイルを別のファイルとして保存する

395ワードなので495 この記事では、Word文書に赤線を追加する方法を紹介します。ドキュメントのレッドラインとは、ユーザーが変更を明確に確認できるようにドキュメントを変更することを指します。この機能は、複数の人が一緒にドキュメントを編集している場合に非常に重要です。レッドラインの意味 ドキュメントのマーク レッドラインとは、ドキュメントの変更、編集、または改訂を示すために赤い線または吹き出しを使用することを意味します。この用語は、印刷された文書に赤ペンを使用してマークを付ける習慣からインスピレーションを受けました。レッドライン コメントは、ドキュメントの編集時に作成者、編集者、レビュー担当者に推奨される変更を明確に示すなど、さまざまなシナリオで広く使用されています。法的合意や契約の変更や修正を提案する。 論文やプレゼンテーションなどに対して建設的な批評や提案を提供する。 Wの与え方

近年、ネットワーク技術の発展により、私たちの生活はさまざまなデジタルツールやインターネットと切り離せないものになっています。文書を処理するとき、特に書面での処理では、Word 文書を使用することがよくあります。ただし、場合によっては、Word 文書内のハイパーリンクが開けないという難しい問題に遭遇することがあります。この問題については以下で説明します。まず、ハイパーリンクとは、Word 文書に追加された他の文書、Web ページ、ディレクトリ、ブックマークなどへのリンクを指すことを明確にする必要があります。これらのリンクをクリックすると、

標準出力を実装するには、Go 言語ドキュメントの os.Stdout.Write 関数について学習してください。Go 言語では、標準出力は os.Stdout を通じて実装されます。 os.Stdout は *os.File 型の変数で、標準出力デバイスを表します。コンテンツを標準出力に出力するには、os.Stdout.Write 関数を使用できます。この記事では、os.Stdout.Write 関数を使用して標準出力を実装する方法と、具体的なコード例を紹介します。オス。

Windows 11/10 コンピューターで Word 文書を開くときに空白ページの問題が発生した場合、状況を解決するために修復の実行が必要になる場合があります。この問題の原因はさまざまですが、最も一般的なものの 1 つはドキュメント自体の破損です。さらに、Office ファイルの破損によっても同様の状況が発生する可能性があります。したがって、この記事で提供されている修正が役に立つ可能性があります。いくつかのツールを使用して破損した Word 文書を修復したり、文書を別の形式に変換して再度開いたりすることができます。さらに、システム内の Office ソフトウェアを更新する必要があるかどうかを確認することも、この問題を解決する方法です。これらの簡単な手順に従うことで、Win で Word 文書を開くときに Word 文書が空白になる問題を修正できる可能性があります。

Workerman ドキュメントの基本的な使用方法の実装方法の紹介: Workerman は、開発者が同時実行性の高いネットワーク アプリケーションを簡単に構築できるようにする高性能 PHP 開発フレームワークです。この記事では、インストールと構成、サービスとリスニング ポートの作成、クライアント リクエストの処理など、Workerman の基本的な使用方法を紹介します。そして、対応するコード例を示します。 1. Workerman のインストールと構成 コマンド ラインに次のコマンドを入力して、Workerman をインストールします。

Word ドキュメントは、日常の仕事や勉強で最も頻繁に使用されるアプリケーションの 1 つです。ドキュメントを扱うとき、2 ページを 1 つに結合する必要がある状況に遭遇することがあります。この記事では、読者が文書レイアウトをより効率的に扱えるように、Word 文書内の 2 ページを 1 ページに結合する方法を詳しく紹介します。 Word 文書では、用紙や印刷コストを節約したり、文書をよりコンパクトに整頓したりするために、2 ページを 1 つに結合する操作が通常使用されます。 2 つのページを 1 つに結合する具体的な手順は次のとおりです。 ステップ 1: 操作する必要がある Word を開きます。

Java ドキュメントの解釈: StringBuilder クラスの substring() メソッドの詳細な紹介 はじめに: Java プログラミングでは、文字列処理は最も一般的な操作の 1 つです。 Java には、文字列処理用の一連のクラスとメソッドが用意されており、その中で StringBuilder クラスは、頻繁に文字列を操作する場合によく使用される選択肢です。 StringBuilder クラスの substring() メソッドは、文字列の部分文字列をインターセプトするための非常に便利なメソッドです。この記事では、
