Skip to content

Released code for「Boundary-Driven Table-Filling for Aspect Sentiment Triplet Extraction」 in EMNLP2022.

Notifications You must be signed in to change notification settings

HITSZ-HLT/BDTF-ABSA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

中文说明 | English

BDTF-ASTE

本仓库开源了以下论文的代码:

工作简介

ASTE任务

本文要解决的是Aspect-Based Sentiment Analysis(ABSA)问题中的Aspect Sentiment Triplet Extraction(ASTE)任务。 如下图所示,ASTE的目的是抽取用户评论中表达观点的方面情感三元组,一个元组包含三个部分:

  • Aspect Term: 情感所针对的目标对象,一般是被评价实体(餐馆或者产品)的某个方面项,常被称作方面术语、方面词、属性词等。
  • Opinion Term: 具体表达情感的词或短语,常被称作情感术语、情感词等。
  • Sentiment Polarity: 用户针对Aspect Term所表达的情感倾向,类别空间为{POS, NEG, NEU}
ASTE

以往方法的问题

以往的方法将本任务建模为一个表格填充问题(table-filling problem)。如下图所示,二维表中的每个元素为词与词之间的关系。该方法首先通过对角线抽取aspect和opinion,然后通过aspect和opinion定位对应的关系区域,通过投票的方法是确定aspect和opinion之间的关系。该方法存在诸多问题。比较明显的问题有两个:

  1. 关系不一致:将aspect和opinion之间的关系分解为词与词之间的关系,这会带来潜在的关系不一致问题。
  2. 边界不敏感:如果aspect或者opinion的边界出现了小错误,二者关系预测的结果大概率不会改变,这就使得模型产生了边界错误的输出,如('dogs', 'top notch', POS)。
GTS

以往的工作尝试使用Span-based的方法来解决关系不一致的问题。这是一种可行的思路。但是该方法忽略了细粒度的词级别的信息,这正是表格填充方法的优点。

本文提出的方法

本文为了解决上述的两个问题,提出了边界驱动的表格填充方法(Boundary-Driven Table-Filling)。如下图所示,该方法将方面关系三元组转为二维表中的一个关系区域,因而将ASTE任务转化为关系区域的定位和分类。对关系区域整体进行分类可以解决了关系不一致的问题,那些边界错误的关系区域也可以通过将其分类为Invaild而移除。

BDTF

此外,本文还提出了一种关系学习的方法来学习一个二维的表示。该方法包含三个部分:

  • 首先,将评论文本输入到BERT中学习词级别的上下文表示。
  • 然后,通过基于张量的操作,根据词表示构建关系表示。文本中所有词之间的关系表示构成一个二维的表,表中的元素为一个向量。
  • 最后,使用CNN对二维表进行建模。 该方法学习到的二维表示将被用到关系区域的定位和分类中。

整体上,本文所提出方法的模型框架如下图所示。

Model

实验结果

本方法的主要实验结果如下表,详细的分析见论文。

Result

运行代码

环境配置

  • transformers==4.15.0
  • pytorch==1.7.1
  • einops=0.4.0
  • torchmetrics==0.7.0
  • tntorch==1.0.1
  • pytorch-lightning==1.3.5

代码结构

├── code
│   ├── utils
│   │   ├── __init__.py
│   │   ├── aste_datamodule.py
|   |   └── aste_result.py
│   ├── model
│   │   ├── seq2mat.py
│   │   ├── table.py
│   │   ├── table_encoder
│   │   |   └── resnet.py
|   |   └── bdtf_model.py
|   ├── aste_train.py
|   └── bash
│       ├── aste.sh
│       ├── aste_14res.sh
│       ├── aste_14lap.sh
│       ├── aste_15res.sh
|       └── aste_16res.sh
└── data
    └── aste_data_bert
        ├── V1
        │   ├── 14res
        |   │   ├── train.json
        |   │   ├── dev.json
        |   │   └── test.json
        │   ├── 14lap/...
        │   ├── 15res/...
        |   └── 16res/...
        └── V2/...

运行代码

code目录下

  • 运行chmod +x bash/*
  • 运行bash/aste_14lap.sh

下面是aste_14lap.sh运行的结果。这里随机种子取的是40,计算设备为A100。

Result

在V100上跑aste_14lap.sh,结果如下。

Result2

请注意,文章发布的性能都是在5个随机种子下运行然后取平均的结果,这与单次运行可能存在一些出入。

如有问题请在issues提出,或者联系我

  • email: zhangyc_hit@163.com

About

Released code for「Boundary-Driven Table-Filling for Aspect Sentiment Triplet Extraction」 in EMNLP2022.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published