社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

【顶刊复现】:5种BERT模型,谁能更准确地识别讽刺评论!(附Python代码)

AI academic space • 4 月前 • 199 次点击  

 

 

01 | 引言:从场景到任务

"这网速‘快’得都能看完一部电影了!”——如何让AI理解,这句讽刺的根源是“网速慢”?

识别讽刺背后的真实原因,是提升舆情分析、用户体验洞察的关键。今天,我们分享对信息管理顶刊 INFORMS 论文《A Fusion Pretrained Approach for Identifying the Cause of Sarcasm Remarks》的代码复现工作,聚焦其中的5种BERT基线模型,助您快速入门这一前沿领域。

02 | 核心思路:5种BERT模型对比

论文对比了不同BERT架构在“讽刺原因识别”任务上的表现。我们成功复现了以下五种经典范式,其核心区别在于如何编码和交互上下文与讽刺句:

      • BERT-Base-Pipeline:分别编码,拼接特征。
  • • BERT-Base-Joint:联合编码,使用[CLS]标签分类。
  • • BERT-Pooling:在联合编码基础上,引入池化与特征交互(如u-v, u*v)
  • • BERT-ESIM:模拟ESIM模型的交互注意力机制。
  • • BERT-Base-Pipeline (Domain):在方法1基础上加入领域信息。

03 | 代码精讲:以联合编码模型为例

以下以效果稳定且思路清晰的 BERT-Base-Joint(联合编码)模型为例,展示核心代码:

import torch.nn as nn
from
 transformers import BertModel

class
 BERTBaseJoint(nn.Module):
    """联合编码上下文与讽刺句,使用[CLS]向量进行分类"""

    def
 __init__(self, bert_model_name, num_labels=2):
        super
().__init__()
        # 核心1:加载预训练BERT主干

        self
.bert = BertModel.from_pretrained(bert_model_name)
        # 核心2:定义新的任务特定分类层

        self
.classifier = nn.Linear(768, num_labels)

    def
 forward(self, input_ids, attention_mask):
        # 将输入喂给BERT,得到编码结果

        outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)
        # 取出代表整体语义的[CLS]标记对应的特征向量

        cls_output = outputs.last_hidden_state[:, 0, :]
        # 将特征送入分类器,得到最终预测逻辑值

        logits = self.classifier(cls_output)
        return
 logits

代码解读:

  • • self.bert:固定套路,加载Hugging Face上的预训练模型(如 bert-base-uncased)。
  • • self.classifier:随机初始化的线性层,负责将BERT输出的768维特征映射到标签空间(本例为2分类)。
  • • cls_output:取[CLS]标签对应的向量作为整个输入序列的语义表示,是BERT用于分类任务的经典做法。

【04 国内HF-Mirror高速下载方案】

依赖Hugging Face模型?
下载慢、易中断?HF-Mirror 是国内开发者推荐的镜像解决方案。您无需修改代码逻辑,仅需设置一个环境变量即可实现全速下载。

推荐方法:在代码中设置(最便捷)
在您的Python脚本最开头添加两行代码即可:




    
import os
# 关键设置:指定使用HF镜像源

os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'

# 后续所有 from_pretrained() 调用都将通过镜像站进行,速度飞起

from
 transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

备用方案:使用命令行工具
如果希望提前将模型下载到本地,也可使用huggingface-cli工具(需先安装huggingface_hub库):

# 在终端中执行
export
 HF_ENDPOINT=https://hf-mirror.com  # Linux/macOS
# $env:HF_ENDPOINT = "https://hf-mirror.com"  # Windows PowerShell


# 下载模型到当前目录下的 'bert-base-uncased' 文件夹

huggingface-cli download --resume-download bert-base-uncased --local-dir ./bert-base-uncased

05 | 复现结果

实验配置说明

为快速验证模型框架的有效性,本次复现采用了轻量化实验配置,旨在评估不同模型架构的相对性能表现,而非追求绝对性能上限。


实验结果呈现

 

表1. 轻量化配置下的模型性能对比(均值±标准差,2折交叉验证)

模型
Precision
Recall
F1-Score
BERT-Pooling
0.7879 ± 0.0217
0.6748 ± 0.0661
0.6610 ± 0.0861
BERT-Base-Joint
0.8063 ± 0.0158
0.6005 ± 0.0981
0.5343 ± 0.1620
BERT-ESIM
0.8004 ± 0.0098
0.5575 ± 0.0551
0.4738 ± 0.1015
BERT-Base-Pipeline
0.4217 ± 0.1317
0.5048 ± 0.0048
0.3912 ± 0.0241

 


 

 

核心结论:

 

  •   • 架构优势:BERT-Pooling凭借池化交互机制(u-v,u*v)表现最佳,相比基 线模型性能提升69.0%
  •    • 趋势验证:联合/交互编码模型普遍优于简单分别编码,与原文结论一致
  •    • 可行性证实:轻量化配置下模型性能排序稳定,代码实现可靠

 

即插即用:
此代码框架是优秀的BERT微调模板,可轻松适配其他文本分类任务(如舆情根因分析、内容审核等),助您快速启动研究。

06 | 结语

本次复现提供了将顶级学术论文转化为可运行代码的完整范例。希望这份资源能成为您开展计算社科、舆情分析等领域研究的实用起点。

欢迎在评论区留言交流!

如果您在使用中遇到任何问题,或有其他有趣的NLP任务想法,欢迎一起讨论!

版权说明:本文复现代码由【学术代码侠】整理分享,仅供学术研究使用。原始论文方法版权归原作者所有。

欢迎关注 『学术代码侠』。
我们专注于用 Python/Matlab/Stata/R等代码,复现社科顶刊模型、分享前沿算法。在这里,您能获得开箱即用的学术代码模板、提升研究效率的编程技巧。


 

代码领取方式

 

 


C0001



转发本推文到朋友圈

添加客服

发送代码编号

发送保留2小时并集齐10个点赞的截图

即可免费领取代码


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/194056