许可证: mit
语言:
- 英语
基础模型:
- microsoft/deberta-v3-large
管道标签: 文本分类
库名称: transformers
desklib/ai-text-detector-academic-v1.01
概述
这款由Desklib开发的AI生成文本检测模型专门针对学术相关数据进行了微调,旨在将英文文本分类为人类撰写或AI生成。该模型是基于microsoft/deberta-v3-large的微调版本,利用基于Transformer的架构实现高精度检测。其鲁棒性强,在学术场景下能有效应对各类对抗攻击。该模型特别适用于学术诚信、内容审核以及确保学术写作真实性的场景。Desklib提供基于AI的个性化学习和学习辅助工具,此模型是其为学生、教育工作者及高校提供的众多工具之一。
在线试用模型: Desklib AI检测器
模型架构
该模型基于微调的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-academic-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检测方法持续演进,集成深度学习模型和集成技术以提高准确性。"
probability, predicted_label = predict_single_text(text, model, tokenizer, device)
print(f"AI生成概率: {probability:.4f}")
print(f"预测标签: {'AI生成' if predicted_label == 1 else '非AI生成'}")
if __name__ == "__main__":
main()
局限性