当前位置: 代码迷 >> 综合 >> Overview of Fingerprinting Methods for Local Text Reuse Detection
  详细解决方案

Overview of Fingerprinting Methods for Local Text Reuse Detection

热度:23   发布时间:2023-12-06 20:28:07.0

Overview of Fingerprinting Methods for Local Text Reuse Detection

摘要

在简要介绍了主要的文本重用检测方法之后,我们从信息检索的角度介绍了指纹算法的一般原理。 调查了三类指纹方法(overlap, non-overlap, and randomized)。 描述了特定的算法,例如k-gram, winnowing, hailstorm, DCT and hash-breaking。 这些算法的性能和特点基于文献数据进行了总结。

关键字:信息检索,文本重用,抄袭检测,指纹识别

1 引言

几乎重复的文档检测算法假定了文档之间的传递关系。也就是说,假设文档A是文档B的近副本,而文档B是文档C的近副本,则文档A是文档C的近副本。图1显示了在以下情况下如何违反此假设,图中的Δ是一个指示符函数,如果两个文档具有文本重用关系,则计算结果为1。
在这里插入图片描述
已提出了多种技术来进行文本重用检测,特别是抄袭检测。这些技术大多数都属于以下三种方法之一:

  1. 子字符串匹配:在这种方法中,诸如Greedy String Tiling(GST)[5]和局部对齐[6]之类的技术用于识别成对的字符串中的最大匹配,然后将其用作指示器。 这些字符串表示为后缀树,基于图的指标用于评估文本重用的数量。 但是,这些方法在时间和存储方面的计算复杂度很高。 例如,标准贪婪字符串平铺方法的最坏情况复杂度是 O ( n 3 ) O(n^3) On3[5]。 另一方面,给定两个字符串A和B的局部对齐算法的复杂度为 O ( ( ∣ A ∣ + ∣ B ∣ ) 3 ) O((| A | + | B |)^3) O(A+B)3[6]。

Greedy String Tiling(GST)算法

GST(Greedy String Tiling)算法是一种贪婪串匹配算法,这一算法对两个字符串进行贪婪式搜索以找出最大公有子串,它需要对要计算的两个字符串进行多次搜索,每次找出当前字符串中未“标注”部分的最长公共子串,并把找出的最长公共子串“标注”为已使用,避免最大匹配重复使用。“abcdefghijklmuvwxyz”与“ijkabclmdefghpq”为例解释GST的搜索过程:(1)假如我们设最小匹配长度为2。第一次搜寻过程,先找到abc,此时最大匹配长度是3,之后找到defgh,因此它的长度大于3,所以此时最大匹配长度5,之后找到ijk,由于其长度小于5,放弃,最后是lm,其长度同样小于当前最大匹配长度5,放弃。(2)将(1)中找到的最大匹配子串”标注为已使用“,重复(1)的过程,不过不再对”已标注子串“搜索,直到(1)中找到的最大匹配子串的长度为设置的最小匹配长度。
  1. 关键字相似度:
    收集和权衡文档中与主题相关的单词,并使用它们来评估文档之间的相似性。
  • 假定文档是局部相关的。如果相似度超过某个阈值,则将候选文档分成较小的部分,然后递归比较它们。
  • 另一种类似的方法是使用基于文档之间单词相对频率的相似性度量[1]。 两个相同的段落相对于彼此具有相同的词频; 插入,删除和编辑会降低这种相对频率得分的值。
    这两种方法,目的是检测文档之间的复制[7]。
  1. 指纹分析:指纹分析是局部文本重用检测中最流行的方法[8]。将文档分为k-gram,然后将其转换为代表文档指纹的数字形式。两个文档共享一个或多个指纹表示匹配,并因此表明这些文档之间有重复使用的文本[1]。不是在文档的所有单词相对频率得分方面进行比较,而是仅使用代表文档的一组选定的指纹来搜索具有匹配指纹的文档之间的本地文本重用实例。

2 指纹分析法概览

用k-gram 将文档划分为一组长度为k的连续字符/字符串,然后,对每个k-gram进行哈希处理,然后选择这些哈希的子集作为文档的指纹。文档的此类指纹用于本地文本重用检测,并且必须提供尽可能多的文档内容信息。

A 指纹生成

在创建准确而有效的指纹技术过程中需要考虑四个方面[9]:
(1)子串选择。从原始文档中,根据某些选择策略提取子字符串(块)。这样的策略可以考虑位置,基于频率或结构的信息。
(2)子串号。子字符串号控制指纹解决方案。指纹质量,计算成本和空间要求之间存在明显的权衡,必须谨慎权衡。指纹中编码的文档信息越多,可以更可靠地检测到两个指纹的可能重叠。
(3)子串大小。定义指纹的粒度。细粒度更容易受到错误匹配的影响,而粗粒度则指纹对变化变得非常敏感。
(4)子串编码。子字符串转换建立了一个哈希运算,除唯一性和均匀性外,效率是一个重要问题。在大多数指纹技术中,通常使用流行的MD5或Karp-Rabin哈希算法。

B 指纹方法

与文档B共享的文档A中的文本量表示为共享指纹数与文档A指纹数之比。B中包含的A(表示为C(A,B))为 定义如下[8]:

在这里插入图片描述

其中 F A F_A FA? F B F_B FB?分别是文档A和B的指纹集。 然后可以基于文本重用应用程序的属性和目标将估计的包含值划分为多个范围(例如,大多数,相当大,部分)。 为了估计一对文档之间的重用文本量,使用了一种非对称度量标准[4]。 即, C ( A , B ) ≠ C ( B , A ) C(A,B) \neq C(B,A) C(AB)??=C(BA),因为这种量度反映了文档长度上的差异。 用于文本重用检测的指纹技术大致有两种:重叠技术和非重叠技术(overlap techniques and non-overlap techniques.)。 以下小节概述了这些技术的可用方法。

C 重叠指纹法 Overlap Fingerprinting Methods

重叠方法使用每次移动一个字的滑动窗口。 窗口中的单词序列(或其数字值)被作为 chunk 。 给定一个大小为k的窗口,第i个窗口将从第i个字扩展到文档中的 i + k ? 1 个字。 基于滑动窗口的方法被称为重叠方法,因为相邻的窗口彼此重叠。

尽管它们生成大量chunks,但是重叠方法产生了良好的结果。下面我们将描述四个代表方法:

K-gram

K-gram是重叠方法中最简单的。 k-gram是来自给定文本的k个连续单元的集合。 根据应用[10],这些单位可以是音素,字符或单词。 k语法方法使用文档的所有chunks(也称为shingles))来生成大小为k的滑动窗口作为指纹。 因此,具有n个token的文档的指纹总数计算为:

N k ? g r a m = n ? k + 1 N_{k?gram} = n ? k + 1 Nk?gram?=n?k+1

优点:效果良好
缺点:chunks太多

0 mod p

0 mod p方法仅在所有k-gram块中选择哈希值可被p整除的块[11]。 因此,如果两个文档相同,则文档中通过0 mod p方法选择的块是相同的。 选择的指纹的平均数量减少p倍,如下所示:

N 0 m o d p = N k ? g r a m / p N_{0modp} = N_{k?gram}/p N0modp?=Nk?gram?/p

缺点:不能准确表示整个文档。例如,高度常见的chunk可被p整除,可能错误地确定重用关系;仅当其哈希为0 mod p时,才会检测到文档之间共有的k-gram, 不能保证检测到文档之间的匹配,间隔内没有检测任何匹配项。

Winnowing

它使用大小为w的第二个窗口,以k-gram为单位从原始窗口的块上滑动,从每个Winnowing 窗口中仅选择一个具有最小哈希值的chunk 作为指纹; 如果是平局,则选择最右边的值。

优点:文献[12]表明,实践中,Winnowing比0 mod p方法产生更好的结果,并且提供了所选指纹的下限,如下所示:

N w i n n o w i n g ≥ 2 w + 1 N k ? g r a m N_{winnowing} ≥ \frac{2}{w + 1}N_{k?gram} Nwinnowing?w+12?Nk?gram?

指纹的分选方式取决于同一 Winnowing 内chunk 的哈希值,因此,即使两个文档共享一个共同的k-gram,分选也不一定会选择k-两个文档中的克指纹。这称为局部性属性:是否选择了带状疱疹仅取决于同一窗口中的带状疱疹,而不取决于其他带状疱疹。但是,如果两个文档共享一个单词序列,该单词序列至少与风选窗口w一样大,则在两个文档中都选择该序列中的至少一个公共单词。

这样的过程结束后,会选择出很多的hash值,但是可以预见的是,在这些hash值中,肯定会存在很多相邻的hash值是相同的,这是因为窗口滑动的缘故。然后再将这些相同的hash值进行处理,最后得到比原来数量少很多的hash值集合,这就是使用winnowing后的文档指纹。

当然这样的算法也有一些文档那个是不适用的,比如说整个文档中都是同一个字符的文档。因为这样的话,几乎产生的hash值只有一个,而这将大大降低文档指纹的代表性。

下面参考链接:https://hcyue.me/2017/05/11/plagiarism-detection/

例子:如文本序列

我可以吞下玻璃而不伤身体

的 3 元语法序列是

我可以
可以吞
以吞下
吞下玻
下玻璃
玻璃而
璃而不
而不伤
不伤身
伤身体

显然对于长度为 N 的序列其 K 元语法序列长为 N - K + 1。

K 元语法单元可以反映语义,可以对其进行 Hash 来方便存储和比较。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evd1A2nw-1590548027844)(./pic/Winnow.png)]
如对于上述 3 元语法序列,取 b=3b=3,对中文取 unicode 编码,有

我可以 = 310603
可以吞 = 275508
以吞下 = 266354
吞下玻 = 283370
下玻璃 = 298519
玻璃而 = 388904
璃而不 = 386764
而不伤 = 375223
不伤身 = 277132
伤身体 = 312216

得到 Hash 值序列

[310603, 275508, 266354, 283370, 298519, 388904, 386764, 375223, 277132, 312216]

取窗口长 4 ,得到以下的滑动窗口。其中第 0、2、3、4 个窗口中最小值发生变化,取这些窗口中的最小值作为特征值

([275508, 266354, 283370, 298519]) => 266354
([266354, 283370, 298519, 388904])
([283370, 298519, 388904, 386764]) => 283370
([298519, 388904, 386764, 375223]) => 298519
([388904, 386764, 375223, 277132]) => 277132
([386764, 375223, 277132, 312216])

得到以下特征值序列作为这段文本的指纹

266354, 283370, 298519, 277132
Hailstorm

Hailstorm 方法将winnowing 的结果与文档的更全面覆盖相结合。在将hailstorm 指纹应用于文档之前,先对文档中的单词进行哈希处理。然后,仅当最低哈希值是组块中最左侧(或最右侧)的token 时,才测试和选择文档中的k个连续单词/token 序列中的每个组块或区块[13]。尽管hailstorm 指纹保证了局部性,也就是说,它基于同一窗口内的哈希序列而不是其他任何窗口的哈希序列来选择指纹,但hailstorm 指纹保证了称为上下文无关性的更强特性。也就是说,选择shingles 作为指纹仅取决于shingles 本身,而不取决于文档中的任何其他shingles 。Hailstorm 指纹还提供了一个总覆盖范围,这意味着文档中的每个token 都存在于至少一个选定的指纹中[13]。
(没看懂 = =)

D.非重叠指纹方法 Non-Overlap Fingerprinting Methods

在非重叠方法中,文档分为非重叠文本段,划分文本段的过程称为中断,而发生中断的单词位置称为断点。

Hash-breaking

Hash-breaking 类似于 0 mod p方法,但没有重叠。对文档中的单词进行哈希处理,并在给定参数p可将单词的哈希值整除的位置创建断点。然后,将所得的文本块进行哈希处理,并用作文档的指纹[1]。
使用Hash-breaking 方法的文档D的预期指纹数为L(D)/ p,因此文本段的平均长度为p。

缺点:

  1. 在恶劣情况下,文本段的长度可能比预期的短很多或长得多,这取决于哈希值的分布。在最坏的情况下,该块可能会很短,并且仅包含很少的常用词。在这种情况下,重用检测会受到严重影响。为了减少嘈杂的指纹,在[4]中提出了一种改进的Hash-breaking 方案。修订后的Hash-breaking 将忽略长度小于p的文本段。
  2. Hash-breaking 方法的另一个弱点是它对小的修改非常敏感。chunk 中一个字符的更改将导致该块的哈希值不同,因此文档的最终指纹也将不同。离散余弦变换(DCT)的使用允许hash-breaking 来克服上述问题,并且对于较小的变化更健壮[4]。
离散余弦变换(DCT)

DCT指纹识别解决了hash-breaking 方法的敏感性问题。 DCT用在不同频率上振荡的余弦函数之和表示一组有限的数据点序列[14]。 它的主要特性使其广泛用于科学和工程中的许多应用中,例如音频和图像的有损压缩,因为较小的高频分量比低频分量不重要,因此可以将其丢弃。 DCT基于快速傅立叶变换(FFT)方法,该方法将时域信号转换为频率分量的系数。

DCT指纹识别方法将文档中单词的哈希值视为离散的时域信号序列。 即,它将哈希值序列转换为频率分量的系数。

DCT指纹识别方法的工作方式如下:修改后的 参数p 哈希散列用于生成文档x0,x1,…xN-1(注意N是文本段的长度)的文本段。 然后,通过words 的最大哈希值对文本段中的words 进行哈希处理和normalized。 执行DCT功能,并对所得系数进行量化以适应少量的bits。 这些量化系数形成文本段的指纹。 期望DCT在较小的更改方面比Hash-breaking 更强大。 但是,它最多只能容忍单个单词的替换[4]。

E. Other Approaches

(个人觉得下面都是降维技术)

随机指纹(LSH)

局部敏感哈希(LSH)使用散列函数上的随机分布表示文档之间的相似性。

参考:https://statusrank.xyz/articles/84288273.html
min-hash:
在这里插入图片描述LSH:
在这里插入图片描述
在这里插入图片描述

两个文档被映射到同一个hash bucket中的概率:
b个band至少有一个相同的概率是 1 ? ( 1 ? s r ) b 1?(1?s^r)^b 1?(1?sr)b
把这样的方法称为AND then OR,它是先要求每个band的所有对应元素必须都相同,再要求多个band中至少有一个相同。符合这两条,才能发生hash碰撞。

模糊指纹

(个人觉得就是类似于文档的稠密向量表示,比如用tfidf表示后,随便抽取几列作为特征向量)
在模糊指纹方法的情况下,为给定文档d构建基于向量空间的紧凑文档模型d,并执行d与集合中所有其他文档的指纹之间的特殊类型的相似度比较[9]。根据[17],构造模糊指纹的算法包括以下步骤:

1)通过计算文档向量空间模型d,提取文档d的一组词项(块)。
2)计算文档索引词的前缀类的相对频率pf的向量。
3)归一化向量pf并计算相对于期望的前缀类别分布的相对偏差Δpf的向量。 4)通过将精确偏差抽象为一个模糊偏差方案,然后计算每个单词的模糊哈希值,来对Δpf进行模糊化。使用模糊指纹识别可以显着提高检索速度,而牺牲的查全率却很少。

基于SVD的检测

奇异值分解(SVD)是线性代数中矩形矩阵的众所周知的分解。它是潜在语义分析(LSA)推断两个不同实体之间的潜在语义关联的工具。也就是说,LSA结合了SVD来分析一组文档及其术语之间的关系。

SVD矩阵(例如M)由几个向量[M1,M2,… 。 。 ,Mn],其中向量Mi包含在文档i中出现的项及其频率。这些术语主要是k-gram的短语,即k个单词的序列,因此有助于识别文档之间的重叠。但是,由于每个文档仅包含所有短语的一小部分,因此这使得矩阵M非常稀疏。因此,如果短语空间太大,则SVD中分解的计算成本将非常高。

3 文本重用检测文集

对于指纹技术,已构建了许多语料库,并用于评估不同的指纹方法,例如:

  1. METER corpus [19]
  2. TREC newswire collection or Reuters Corpus Volume 1[20]
  3. Co-derivatives corpus [21]
  4. PAN-PC [22]

4 指纹技术的性能评估

指标:precision, recall, and F-measure。
数据集:Wikipedia 600万篇文章及其修订版。

在这里插入图片描述

图2显示了准确性和查全率方面的相似性结果[15]。

研究表明,基于k-gram的指纹技术比随机技术表现更好,其中Hash-breaking 方法表现最好。然而,与模糊和随机指纹技术相比,k-gram和散列破译方法产生的指纹要多得多,可以代表一个文档[15]。开发了另一个基于自定义的实验,以评估用于本地文本重用检测的多种指纹技术。在TREC新闻专线上测试了指纹识别方法:k-gram,0 mod p,Winnowing,Hailstorm 和 DCT指纹识别,并比较了每种方法中检测到的文档对。使用了评估度量F-measure,它结合了评估中的精确度值和查全率,以评估方法的效率[4]。所选指纹识别方法的总体性能如图3所示。

在这里插入图片描述
从直觉上讲,k-gram方法在准确性方面胜过其他方法,但是,在生成的指纹数量方面最差。 DCT指纹识别在准确性方面排名第二,指纹数量较少。给定相对较小的窗口大小,Winnowing 算法显示出非常好的性能[4]。表I总结了有关本文所论述的指纹技术的主要特征的性能,产生的指纹数量及其缺点的已发布结果。注意,在表中,d表示文档,c和C分别是单个块和块集。

在这里插入图片描述

5 结论

局部文本重用检测是数据挖掘和信息检索的主要任务。 指纹技术是用于完成此任务的各种方法之一。
本文调查了三种主要的指纹分类,即重叠,非重叠和随机化技术。 与这些技术中的每一种相关联的是算法,例如k-gram,0 mod p,Winnowing 和Hailstorm 选择算法。 我们描述了这些算法并总结了它们的性能。 对它们的缺点的总结表明缩放和释义仍然是一个问题,这表明自动局部文本重用检测需要更有效和复杂的算法。

  相关解决方案