HITSZ-HLT / T2S-Augmentation

Released code for「Target-to-Source Augmentation for Aspect Sentiment Triplet Extraction」in EMNLP2023.
11 stars 0 forks source link

T2S-Augmentation

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

工作简介

背景

方面情感三元组抽取(Aspect Sentiment Triplet Extraction, ASTE)是方面级情感分析(Aspect-Based Sentiment Analysis, ABSA)中的一个典型任务。该任务旨在从评论中抽取用户方面级别的情感和观点,以三元组的形式输出。其中,一个三元组由方面项(aspect term)、观点项(opinion term)、情感倾向(sentiment polarity)组成。作为一个细粒度情感分析任务,ASTE的数据标注代价较高;而标注数据的缺乏限制了现有方法的性能。

传统的数据增强方法

数据增强方法旨在根据现有的标注数据合成新的标注数据,是缓解数据稀缺问题的可行方法。传统的数据增强方法一般修改现有样例的输入文本,然后将修改后的文本和原有样例合并为新的样例。这种修改一般通过启发式的规则或者条件语言模型来实现。传统数据增强方法的一大问题是,难以在保证修改后句子和原标签一致的情况下,生成多样化的样本。

Target-to-Source Augmentation

本工作中,我们学习一个生成器直接根据标签和句法模板来生成新的句子。假设我们有一个足够强大的生成器,我们就可以混合来自不同样例的标签和句法模板,生成大量的多样化的样例。

正式地,我们的目标是学习一个生成器,其输入是一个标签和一个句法依存树,输出是一个句子。输出的句子应该满足三个要求:

我们引入两个判别器来评估生成样本的流利性和一致性。

target-to-source augmentation

我们的方法

reinforcement learning framework

实验结果

我们在原标注数据集和增强后的数据集上运行了四个ASTE方法,结果如下。我们可以看到本文提出的增强方法在F1分数上取得了2.74%的平均提升。更多实验和分析请参见论文。

main result

运行代码

环境配置

运行代码

运行起来比较复杂,下面是14res上的一个参考。

chmod +x bash/*
bash/train_extractor.sh -c 0 -b extractor -d origin/14res
bash/do_extraction.sh -c 0 -m ./output/extraction/model/dataset=origin/14res,b=extractor,seed=42/ -d ./data/unlabeled/yelp2023/100k_1.json -o ./output/extraction/pseudo_labeled/yelp2023.json
python parsing.py --data_dir ./data/origin --dataset 14res --output_dir ./data/origin_syn
python parsing.py --data_dir ./output/extraction/pseudo_labeled --dataset yelp2023.json --output_dir ./output/extraction/pseudo_labeled_syn --main2
bash/train_generator.sh -c 0 -d ./data/origin_syn/14res -t ./output/extraction/pseudo_labeled_syn/yelp2023.json -b generator -s 50_000
bash/build_fluency_dataset.sh -c 0 -d ./data/origin_syn/14res -t ./output/extraction/pseudo_labeled_syn/yelp2023.json -m ./output/generation/model/b=generator -o ./output/fluency_dataset_14res/
bash/build_alignment_dataset.sh -c 0 -d ./data/origin_syn/14res -t ./output/extraction/pseudo_labeled_syn/yelp2023.json -m ./output/extraction/model/dataset=origin/14res,b=extractor,seed=42 -o ./output/alignment_dataset_14res/
bash/train_fluency_discriminator.sh -c 0 -d ./output/fluency_dataset_14res/ -b fluency_model
bash/train_alignment_discriminator.sh -c 0 -d ./output/alignment_dataset_14res/ -b alignment_model
bash/ppo_tuning.sh -c 0 -b 14res -d data/origin_syn/14res -t ./output/extraction/pseudo_labeled_syn/yelp2023.json -g ./output/generation/model/b=generator -a ./output/alignment_model/model/b=alignment_model -f ./output/fluency_model/model/b=fluency_model -b ppo
bash/data_synthesis.sh -c 0 -b 14res_100k -g ./output/generation_ppo/model/b=ppo -e ./output/extraction/model/dataset=origin/14res,b=extractor,seed=42 -a ./output/alignment_model/model/b=alignment_model -f ./output/fluency_model/model/b=fluency_model -n 100000 -d data/origin_syn/14res -r output/extraction/pseudo_labeled/yelp2023.json
python data_filtering.py --origin_data_dir data/origin/14res --augmented_data_dir ./output/augmentation/14res_100k_42.json/augmented_train.json --output_dir ./output/augmentation_filtered/14res_5k_42 --k 5000

注:请事先解压data/unlabeled下的文件。

生成的数据集

我们将我们的方法在14res和14lap上应用,增强后的数据集可在data/augmented目录下获取。