license: mit
datasets:
- liamdugan/raid
language:
- en
base_model:
- microsoft/deberta-v3-large
pipeline_tag: text-classification
library_name: transformers
desklib/ai-text-detector-v1.01
概述
这款由Desklib开发的AI生成文本检测模型,旨在将英文文本分类为人类撰写或AI生成。目前它在RAID AI检测基准测试中处于领先地位。该模型是基于microsoft/deberta-v3-large微调的版本,利用基于Transformer的架构实现高精度。它具有强大的鲁棒性,能出色应对不同领域的各类对抗攻击。该模型特别适用于内容审核、学术诚信、新闻业以及任何需要确保文本真实性的场景。
Desklib提供基于AI的个性化学习与学习辅助工具。该模型是Desklib为学生、教育工作者及大学提供的众多工具之一。
在线试用模型:Desklib AI检测器
Github仓库:https://github.com/desklib/ai-text-detector
性能表现
该模型在提交时于RAID基准测试中取得顶尖性能:查看RAID排行榜
模型架构
该模型基于微调的microsoft/deberta-v3-large Transformer架构构建,核心组件包括:
- Transformer基础:以预训练的
microsoft/deberta-v3-large
模型为基础。该模型采用DeBERTa(具有解耦注意力机制的增强解码BERT),这是BERT和RoBERTa的改进版本,通过解耦注意力和增强的掩码解码器实现更优性能。
- 均值池化:通过均值池化层聚合Transformer的隐藏状态,生成输入文本的固定尺寸表示。该方法通过注意力掩码加权平均词元嵌入,以捕捉整体语义。
- 分类器头:线性层作为分类器,接收池化后的表示并输出单个逻辑值。该逻辑值表示模型对输入文本为AI生成的置信度。通过Sigmoid激活函数将逻辑值转换为概率。
使用方法
以下是使用Hugging Face transformers
库调用该模型的示例:
import torch
import torch.nn as nn
from transformers import AutoTokenizer, AutoConfig, AutoModel, PreTrainedModel
class DesklibAIDetectionModel(PreTrainedModel):
config_class = AutoConfig
def __init__(self, config):
super().__init__(config)
self.model = AutoModel.from_config(config)
self.classifier = nn.Linear(config.hidden_size, 1)
self.init_weights()
def forward(self, input_ids, attention_mask=None, labels=None):
outputs = self.model(input_ids, attention_mask=attention_mask)
last_hidden_state = outputs[0]
input_mask_expanded = attention_mask.unsqueeze(-1).expand(last_hidden_state.size()).float()
sum_embeddings = torch.sum(last_hidden_state * input_mask_expanded, dim=1)
sum_mask = torch.clamp(input_mask_expanded.sum(dim=1), min=1e-9)
pooled_output = sum_embeddings / sum_mask
logits = self.classifier(pooled_output)
loss = None
if labels is not None:
loss_fct = nn.BCEWithLogitsLoss()
loss = loss_fct(logits.view(-1), labels.float())
output = {"logits": logits}
if loss is not None:
output["loss"] = loss
return output
def predict_single_text(text, model, tokenizer, device, max_len=768, threshold=0.5):
encoded = tokenizer(
text,
padding='max_length',
truncation=True,
max_length=max_len,
return_tensors='pt'
)
input_ids = encoded['input_ids'].to(device)
attention_mask = encoded['attention_mask'].to(device)
model.eval()
with torch.no_grad():
outputs = model(input_ids=input_ids, attention_mask=attention_mask)
logits = outputs["logits"]
probability = torch.sigmoid(logits).item()
label = 1 if probability >= threshold else 0
return probability, label
def main():
model_directory = "desklib/ai-text-detector-v1.01"
tokenizer = AutoTokenizer.from_pretrained(model_directory)
model = DesklibAIDetectionModel.from_pretrained(model_directory)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
text_ai = "AI检测是指识别给定内容(如文本、图像或音频)是否由人工智能生成的过程。这通过多种机器学习技术实现,包括困惑度分析、熵值测量、语言模式识别以及基于人类与AI生成数据训练的神经网络分类器。先进的AI检测工具通过评估写作风格、连贯性和统计特性来判断AI参与的可能性。这些工具广泛应用于学术界、新闻业和内容审核领域,以确保原创性、防止错误信息并维护道德标准。随着AI生成内容日益复杂,AI检测方法持续进化,整合深度学习模型和集成技术以提高准确性。"
text_human = "据估计,到2025年互联网上大部分内容将由AI/大语言模型生成。这将导致大量错误信息和可信度问题。因此,拥有准确工具来识别内容是AI生成还是人类撰写至关重要。"
probability, predicted_label = predict_single_text(text_ai, model, tokenizer, device)
print(f"AI生成概率: {probability:.4f}")
print(f"预测标签: {'AI生成' if predicted_label == 1 else '非AI生成'}")
probability, predicted_label = predict_single_text(text_human, model, tokenizer, device)
print(f"AI生成概率: {probability:.4f}")
print(f"预测标签: {'AI生成' if predicted_label == 1 else '非AI生成'}")
if __name__ == "__main__":
main()