首页 游戏 软件 资讯 排行榜 专题
首页
AI资讯
科大讯飞-学术论文分类挑战赛:ERNIE 准确率0.79

科大讯飞-学术论文分类挑战赛:ERNIE 准确率0.79

热心网友
22
转载
2025-07-25
随着人工智能技术不断发展,每周都有非常多的论文公开发布。现如今对论文进行分类逐渐成为非常现实的问题,这也是研究人员和研究机构每天都面临的问题。现在希望选手能构建一个论文分类模型。

科大讯飞-学术论文分类挑战赛: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)
登录后复制
来源:https://www.php.cn/faq/1426722.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

Git钩子自动部署配置指南 Linux服务器实战教程
系统平台
Git钩子自动部署配置指南 Linux服务器实战教程

直接说结论:使用 post-receive 钩子配合 GIT_WORK_TREE 环境变量,是实现 Git 自动部署最稳定可靠的方案。至于 post-update 钩子或在裸仓库中直接执行 checkout 的方法,强烈建议避免使用——它们不仅容易失败,而且错误信息往往不明确,排查过程极其耗时。 为

热心网友
05.18
柴犬币未来两年价格能否上涨十倍突破关键阻力位
web3.0
柴犬币未来两年价格能否上涨十倍突破关键阻力位

柴犬币(SHIB)两年内有望达到0 0001美元?深度解析其路径与挑战 柴犬币(SHIB)两年内有望达到0 0001美元,多家机构预测其2026至2028年可能实现破零,核心动力来自通缩销毁机制、Shibarium网络推动及生态扩展,但面临高流通量、市场竞争和实用性验证等挑战,需结合市场环境与长期发

热心网友
05.18
Git分支管理与合并操作指南
AI资讯
Git分支管理与合并操作指南

如果你曾尝试使用Perplexity这类AI工具来学习Git分支管理,但总觉得得到的回答过于笼统、缺乏可操作的细节——例如,它可能只告诉你“使用merge合并分支”,但具体的操作步骤、遇到冲突时的处理方法却语焉不详——那么问题很可能出在你的提问方式上。AI并非真人导师,它需要更精确的指令才能输出有价

热心网友
05.17
Linux配置Git提交模板的详细步骤与实用技巧
系统平台
Linux配置Git提交模板的详细步骤与实用技巧

配置Git提交模板,本意是让每次提交信息都清晰、规范,但实际操作中,几个隐蔽的“坑”常常让这个功能形同虚设。今天,我们就来把这些坑一个个填平。 路径写错就静默失效,这是第一个大坑 配置项 commit template 对路径的敏感度超乎想象。写错一点,它不会报错,只会默默地“罢工”。结果就是你兴冲

热心网友
05.17
Linux配置Git提交规范与Commit模板设置指南
系统平台
Linux配置Git提交规范与Commit模板设置指南

配置 git commit template 来统一团队提交信息的格式,是建立 Git 工作流规范的第一步。然而,如果你认为仅靠一个模板文件就能一劳永逸,那可能陷入了一个常见的误区。实际上,这个配置的作用非常基础:它仅在你不使用 -m 参数、通过编辑器进行交互式提交时,将模板内容预填到提交信息编辑器

热心网友
05.17

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

比特币匿名交易指南:五种隐私保护方法详解
web3.0
比特币匿名交易指南:五种隐私保护方法详解

比特币匿名交易指南:原理、方法与关键注意事项 提到比特币,很多人第一反应是“匿名”。但真相是,比特币交易在区块链上公开记录,其本质是“化名”而非完全匿名。这意味着,只要采取恰当的方法,完全可以将交易隐私提升一个层级。本文将系统梳理实现比特币匿名交易的几种实用方法,并为你提供相关可信工具的官方获取途径

热心网友
05.23
PowerLawGLM法律大模型:垂直AI赋能法律行业智能应用
AI教程
PowerLawGLM法律大模型:垂直AI赋能法律行业智能应用

PowerLawGLM:法律领域的AI“专家” 在人工智能大模型深刻变革各行各业的今天,法律这一专业壁垒高、知识体系复杂的领域,也迎来了其专属的智能解决方案。由幂律智能与智谱AI联合推出的PowerLawGLM,是一款拥有千亿级参数、专为中文法律场景深度优化的垂直大模型。它本质上是一位经过海量法律文

热心网友
05.23
比斯塔技能搭配攻略 克制复活阵容实战解析
游戏资讯
比斯塔技能搭配攻略 克制复活阵容实战解析

新SSR比斯塔天赋可叠加“蔷薇花刺”,三层后目标无法复活,有效克制副本复活机制。其技能多为全体伤害,适合PVP竞技场。闪避可减敌怒气,暴击能回复生命,兼具续航与干扰能力。终结技提升闪避,配合额外魂玉实现连招。奥义击倒目标后可回血,增强生存能力。

热心网友
05.23
代号逍遥游游戏评测与新手玩法全攻略
游戏资讯
代号逍遥游游戏评测与新手玩法全攻略

手游《代号:逍遥游》即将上线,以“选择”为核心玩法。玩家将在宏大仙侠世界中,面对飞升或逆天等不同道路,通过自身决策破解宿命迷局,体验多线命运走向。

热心网友
05.23
方舟生存进化探险者笔记获取方法与位置详解
游戏资讯
方舟生存进化探险者笔记获取方法与位置详解

在《方舟:生存进化》中,探险者笔记是揭示世界秘密的关键物品。可通过探索地图角落、完成特定任务、与NPC互动、寻找隐藏地点以及参与游戏内特殊事件等多种途径获取。收集过程融合了探索、解谜与社交,集齐笔记不仅能获得经验加成,更能深入理解游戏世界的背景与故事。

热心网友
05.23