科大讯飞-学术论文分类挑战赛:ERNIE 准确率0.79
随着人工智能技术不断发展,每周都有非常多的论文公开发布。现如今对论文进行分类逐渐成为非常现实的问题,这也是研究人员和研究机构每天都面临的问题。现在希望选手能构建一个论文分类模型。

赛事任务
本次赛题希望参赛选手利用论文信息:论文id、标题、摘要,划分论文具体类别。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
赛题样例(使用\t分隔):
paperid:9821title:Calculation of prompt diphoton production cross sections at Tevatron and LHC energiesabstract:A fully differential calculation in perturbative quantum chromodynamics is presented for the production of massive photon pairs at hadron colliders. All next-to-leading order perturbative contributions from quark-antiquark, gluon-(anti)quark, and gluon-gluon subprocesses are included, as well as all-orders resummation of initial-state gluon radiation valid at next-to-next-to-leading logarithmic accuracy.categories:hep-ph登录后复制
数据说明
训练数据和测试集以csv文件给出,其中:
训练集5W篇论文。其中每篇论文都包含论文id、标题、摘要和类别四个字段。
测试集1W篇论文。其中每篇论文都包含论文id、标题、摘要,不包含论文类别字段。
评估指标
本次竞赛的评价标准采用准确率指标,最高分为1。
计算方法参考https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html, 评估代码参考:
from sklearn.metrics import accuracy_scorey_pred = [0, 2, 1, 3]y_true = [0, 1, 2, 3]登录后复制In [1]
!pip install paddle-ernie > log.log登录后复制In [2]
import numpy as npimport paddle as P# 导入ernie模型from ernie.tokenizing_ernie import ErnieTokenizerfrom ernie.modeling_ernie import ErnieModelmodel = ErnieModel.from_pretrained('ernie-1.0') # Try to get pretrained model from server, make sure you have network connectionmodel.eval()tokenizer = ErnieTokenizer.from_pretrained('ernie-1.0')ids, _ = tokenizer.encode('hello world')ids = P.to_tensor(np.expand_dims(ids, 0)) # insert extra `batch` dimensionpooled, encoded = model(ids) # eager executionprint(pooled.numpy())登录后复制In [9]import sysimport numpy as npimport pandas as pdfrom sklearn.metrics import f1_scoreimport paddle as Pfrom ernie.tokenizing_ernie import ErnieTokenizerfrom ernie.modeling_ernie import ErnieModelForSequenceClassification登录后复制In [10]
train_df = pd.read_csv('train.csv', sep='\t')train_df['title'] = train_df['title'] + ' ' + train_df['abstract']train_df = train_df.sample(frac=1.0)train_df.head()登录后复制In [11]train_df.shape登录后复制In [12]
train_df['categories'].nunique()登录后复制In [13]
train_df['categories'], lbl_list = pd.factorize(train_df['categories'])登录后复制In [14]
# 模型超参数BATCH=32MAX_SEQLEN=300LR=5e-5EPOCH=10# 定义ernie分类模型ernie = ErnieModelForSequenceClassification.from_pretrained('ernie-2.0-en', num_labels=39)optimizer = P.optimizer.Adam(LR,parameters=ernie.parameters())tokenizer = ErnieTokenizer.from_pretrained('ernie-2.0-en')登录后复制In [15]train_df.iterrows()登录后复制In [16]
# 对数据集进行转换,主要操作为文本编码def make_data(df): data = [] for i, row in enumerate(df.iterrows()): text, label = row[1].title, row[1].categories text_id, _ = tokenizer.encode(text) # ErnieTokenizer 会自动添加ERNIE所需要的特殊token,如[CLS], [SEP] text_id = text_id[:MAX_SEQLEN] text_id = np.pad(text_id, [0, MAX_SEQLEN-len(text_id)], mode='constant') data.append((text_id, label)) return datatrain_data = make_data(train_df.iloc[:-5000])val_data = make_data(train_df.iloc[-5000:])登录后复制In [ ]
# 获取batch数据def get_batch_data(data, i): d = data[i*BATCH: (i + 1) * BATCH] feature, label = zip(*d) feature = np.stack(feature) # 将BATCH行样本整合在一个numpy.array中 label = np.stack(list(label)) feature = P.to_tensor(feature) # 使用to_variable将numpy.array转换为paddle tensor label = P.to_tensor(label) return feature, label登录后复制In [12]
EPOCH=1# 模型训练for i in range(EPOCH): np.random.shuffle(train_data) # 每个epoch都shuffle数据以获得最佳训练效果; ernie.train() for j in range(len(train_data) // BATCH): feature, label = get_batch_data(train_data, j) loss, _ = ernie(feature, labels=label) loss.backward() optimizer.minimize(loss) ernie.clear_gradients() if j % 50 == 0: print('Train %d: loss %.5f' % (j, loss.numpy())) # 模型验证 if j % 100 == 0: all_pred, all_label = [], [] with P.no_grad(): ernie.eval() for j in range(len(val_data) // BATCH): feature, label = get_batch_data(val_data, j) loss, logits = ernie(feature, labels=label) all_pred.extend(logits.argmax(-1).numpy()) all_label.extend(label.numpy()) ernie.train() acc = (np.array(all_label) == np.array(all_pred)).astype(np.float32).mean() print('Val acc %.5f' % acc)登录后复制In [13]test_df = pd.read_csv('test.csv', sep='\t')test_df['title'] = test_df['title'] + ' ' + test_df['abstract']test_df['categories'] = 0test_data = make_data(test_df.iloc[:])登录后复制In [20]all_pred, all_label = [], []# 模型预测with P.no_grad(): ernie.eval() for j in range(len(test_data) // BATCH+1): feature, label = get_batch_data(test_data, j) loss, logits = ernie(feature, labels=label) all_pred.extend(logits.argmax(-1).numpy()) all_label.extend(label.numpy())登录后复制In [21]
pd.DataFrame({ 'paperid': test_df['paperid'], 'categories': lbl_list[all_pred]}).to_csv('submit.csv', index=None)登录后复制
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
消息称 Meta 低调组建独立硬件团队,打造以多种形态陪伴人类的智能体
消息称 Meta 低调成立独立硬件部门,致力于研发多形态人类陪伴型智能体设备 4月4日凌晨,《商业内幕》发布独家报道引发行业关注。多位知情人士透露,Meta公司正悄然为其“超级智能”业务线组建一支独立的硬件研发团队,并任命资深硬件工程师负责整体管理。此举被视为Meta在人工智能设备战略布局上的关键一
AI 的记忆不是硬盘——从 40 个真实 Bug 说起
这是 AI 认知架构实战笔记 系列的第 2 篇 上一篇我们聊了「给 AI 写灵魂文件」这件事,这一篇,我们来看看,当这份灵魂文件真正运转起来之后,现实究竟会给我们带来多少“惊喜”——或者更准确地说,是漏洞。项目名为 WorkBuddy-Configure,已部署在 gitee 和 gitcode 上
OpenClaw给每个Agent单独指定workspace
OpenClaw中为每个Agent配置独立工作区的最佳实践 在大模型智能体协作平台上,实现多个Agent之间的文件隔离是确保项目管理井然有序的关键需求。如果您正在使用OpenClaw平台,为不同角色的智能体分配专属工作空间可以有效避免文件冲突、权限混乱等问题。本指南将详细介绍在OpenClaw中为每
OpenClaw更新操作
前言 对于 OpenClaw 的忠实用户而言,每一次版本迭代都意义非凡。新功能密集、改动幅度大是它的显著特点,这固然令人欣喜,但伴随而来的更新操作也时常会遇到一些预料外的状况。本文旨在系统梳理我们在升级过程中遇到的常见问题与解决方案,帮助您在下次更新时更加顺畅,有效规避不必要的麻烦。 一、OpenC
openclaw源码
项目资源与开源社区 对于希望深入研究OpenClaw技术生态的开发者与研究者,以下几个核心的开源仓库提供了关键的切入点和持续更新的资源集合。 首先,OpenClaw项目的主仓库位于: https: github com openclaw openclaw 这里是所有核心代码、文档和官方进展的枢纽,
- 日榜
- 周榜
- 月榜
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

