科大讯飞2023-ChatGPT生成文本检测器

摘要:

合集:AI案例-NLP-传媒业
赛题:ChatGPT生成文本检测器
主办方:科大讯飞 x Datawhale
主页:https://challenge.xfyun.cn/topic/info?type=text-detector&ch=j4XWs7V
AI问题:文本分类
数据集:数据集为中文作文样本,其中从互联网上采集得到了真实作文,并且使用ChatGLM-6B生成了部分作文。
数据集价值:构建一个文本分类模型,以区分真实对话和由ChatGPT生成的对话文本。
解决方案:TF-IDF、逻辑回归模型

一、赛题描述

背景

近年来人工智能在自然语言处理领域取得了巨大的进展。其中一项引人注目的技术是生成模型,如OpenAI的GPT-3.5。这类模型通过学习大量的文本数据,具备了生成高质量文本的能力,从而引发了一系列关于文本生成真实性的讨论。

正因为生成模型的迅猛发展,也引发了一个新的挑战,即如何区分人类编写的文本与机器生成的文本。传统上,我们借助语法错误、逻辑不连贯等特征来辨别机器生成的文本,但随着生成模型的不断改进,这些特征变得越来越难以区分。因此,为了解决这一问题,研究人员开始探索使用NLP文本分类技术来区分人类编写的文本和机器生成的文本。

任务

本赛题旨在构建一个文本分类模型,以区分真实对话和由ChatGPT生成的对话文本。在给定的数据集中,包含了一系列真实对话和ChatGPT生成的对话样本,参赛选手需要设计并训练一个模型,使其能够准确地将这两种类型的对话进行分类。

二、数据集描述

数据说明

数据集为中文作文样本,其中从互联网上采集得到了真实作文,并且使用ChatGLM-6B生成了部分作文。参赛选手的任务是根据文本内容,区分作文的来源。

数据集版权许可协议

BY-NC-SA 4.0
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans

三、解决方案样例

工作原理介绍

1. TF-IDF(Term Frequency-Inverse Document Frequency)

一种广泛应用于自然语言处理(NLP)和信息检索的技术,用于评估一个词语在文档集合或语料库中的重要性。

TF(Term Frequency,词频)​
  • 定义:某个词在文档中出现的次数。
  • 公式:TF(t,d)=文档 d 中的总词数词 t 在文档 d 中出现的次数​
  • 作用:衡量词语在单篇文档中的常见程度。例如,在文档“苹果香蕉苹果”中,“苹果”的TF值为 32​。
IDF(Inverse Document Frequency,逆文档频率)​
  • 定义:衡量词语在文档集合中的稀有程度。罕见词具有更高的IDF值。
  • 公式:IDF(t)=log(包含词 t 的文档数总文档数​)
  • 作用:降低常见词的权重,突出重要词汇。例如,若“的”出现在所有文档中,则其IDF值趋近于0。。

2. 逻辑回归 (Logistic Regression)

  • 定义:逻辑回归是一种用于解决 ​分类问题 的统计学习方法,尤其适用于 ​二分类​(如判断邮件是否为垃圾邮件)。
  • 核心思想:通过线性回归结合概率映射(Sigmoid函数),将输入特征映射到 ​0~1之间的概率值,表示样本属于某一类的可能性。
优点缺点
输出概率解释性强仅能学习线性决策边界
计算高效,适合大规模数据对特征共线性和异常值敏感
支持正则化(L1/L2)防止过拟合无法直接处理非线性问题

运行环境

外部库名称版本号
python3.12.3
sklearn-compat0.1.3

源码结构

1. 读入数据集

train_data = pd.read_csv('./data/train.csv')
test_data = pd.read_csv('./data/test.csv')

2. 训练 TF-IDF 和逻辑回归模型

tfidf = TfidfVectorizer(token_pattern=r'\w{1}', max_features=2000)
train_tfidf = tfidf.fit_transform(train_data['content'])
test_tfidf = tfidf.fit_transform(test_data['content'])

m = LogisticRegression()
m.fit(
    train_tfidf,
    train_data['label']
)

3. 预测“文本生成源“并输出结果

submit = pd.read_csv('./data/sample_submit.csv')
submit = submit.sort_values(by='name')
submit['label'] = m.predict(test_tfidf).astype(int)
submit.to_csv('submit.csv', index=None)

源码开源协议

GPL-v3

四、获取案例套件

文件包大小:24 MB

需要登录后才允许下载文件包。登录

发表评论