百度NOIP吧编程挑战赛防作弊系统:基于向量空间法检查作弊

为了更好的保证比赛的公平性,本次比赛采用基于向量空间法的文本相似比较系统比较程序,可以有效检查出各类作弊程序。

目前, 在信息处理方向上, 文本的表示主要采用向量空间模型(VSM)。向量空间模型的基本思想是以向量来表示文本:(W1 , W2 , W3 . . . . . . Wn ), 其中Wi 为第i 个特征项的权重(词频)。词频计算方法主要运用 TF-IDF 公式, 目前存在多种 TF-IDF 公式, 我们在系统中采用了一种比较普遍的 TF-IDF 公式:

$$ \text{TF-IDF}(t, d) = \text{TF}(t, d) \times \text{IDF}(t, D) $$

其中,TF(t, d) 是词频(Term Frequency),IDF(t, D) 是逆文档频率(Inverse Document Frequency)。具体的计算公式如下:

$$ \text{TF}(t, d) = \frac{f_{t, d}}{\sum_{t' \in d} f_{t', d}} $$ $$ \text{IDF}(t, D) = \log \frac{N}{|\{d \in D : t \in d\}|} $$

在这里:

  • $f_{t, d}$ 表示词 t 在文档 d 中的出现次数。
  • $\sum_{t' \in d} f_{t', d}$ 表示文档 d 中所有词的出现次数的总和。
  • $N$ 是语料库中文档的总数。
  • $|\{d \in D : t \in d\}|$ 表示包含词 t 的文档数量。

将这些放在一起,完整的 TF-IDF 公式表示如下:

$$ \text{TF-IDF}(t, d, D) = \frac{f_{t, d}}{\sum_{t' \in d} f_{t', d}} \times \log \frac{N}{|\{d \in D : t \in d\}|} $$

过去的 40 多年中,许多关于信息检索的研究工作都是围绕着 Salton 提出的向量空间法展开的,它也是被广泛使用的 Smart 系统基础。在向量空间法中,每个文档被看成一个词袋,然后被表示成词条权重的向量:di = (wi1, wi2, …, win),其中 d 表示一个文档,n 表示词条空间的维数。每一个词条的权重代表了该词条在文档中的重要性。通常我们使用 tf-idf方法或它的一些变形来表示词条的权重。两个文档的_相似度_用它们对应向量的夹角的余弦值来表示。

$$ \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|} $$

其中,$\cos(\theta)$ 表示向量 A 和向量 B 之间夹角的余弦值,$\mathbf{A} \cdot \mathbf{B}$ 表示两个向量的点积,$\|\mathbf{A}\|$ 和 $\|\mathbf{B}\|$ 分别表示向量 $A$ 和向量 $B$ 的模长。

我写了一个命令行程序,用来比较任意两个文件的相似程度。写了一个附属工具程序,用于比较指定目录下所有的文件是否存在作弊嫌疑。

希望这能够在一定程度上缓解作弊情况。

如果你的程序被判为作弊,但你认为没有作弊,请和我联系。此系统只对代码不对人。

题外话:我帮你整理了包括 AI 写作、绘画、视频(自媒体制作)零门槛 AI 课程 + 国内可直接顺畅使用的软件。想让自己快速用上 AI 工具来降本增效,辅助工作和生活?限时报名

当前页阅读量为: