IMDB依存树情感分析数据集
树形情感分析和数据集
最近在做树形情感分析的任务,查阅了几篇论文,都是利用依存树来进行情感分析。但是现成的树形情感分析数据集Stanford treebank数据集是子句/短语结构树格式的,一些依存树情感分析的方法在字句/短语结构树上效果很差,又没有现成的依存树情感分析数据集,所以我决定利用Stanford dependency parser工具造一个依存树情感分析数据集。
数据/工具来源
- BFSU (Stanford Parser 1.0, based on Stanford Parser 2010)
配置Stanford Parser可以查阅网上的相关博客,但是我配置一直失败,所以我干脆在CSDN上下载了别人写的GUI,用起来挺方便的。
- IMDB数据集
IMDB训练集/测试集25000/25000条,每条包括文本和评分标签(1-10,评分大于5为pos,否则为neg),我不准备使用无监督数据集。
数据集一开始是分散在不同文件中的,用merge_sentences.py脚本把它们合并起来。
depenency tree parsing
因为数据集过大,所以不能直接整个文件去解析,所以用split_sentences.py脚本分割数据集为2500个文件,每个文件20个句子。
因为一个句子里面有多个
′?′
或者
′.′
,容易被解析为多个句子,所以需要在一个句子后手动加
<EOS>
<script type="math/tex" id="MathJax-Element-102">
</script>以区分。并且,防止与句号混淆,我手动把省略号替换为’and so on’。
解析耗时大约为4day-5day之间,解析结果储存在2500个文件,后缀名为.par
等待.par文件全部解析完后,用merge_trees.py脚本合并.par文件并对单词抽词干,同时转化数据格式,提取出有用的信息。
解析完毕的数据集格式如下:
标签在all.label中,一行一个整数表示一个评分1-10,大于5则为pos。
树在all.par中,一条数据对应的树/森林格式如下:
<NODE>
relation(word1-po1, word2-pos2)
…
<NODE>
relation(word1-po1, word2-pos2)
…
<EOS>
数据读取
利用tool.py脚本解析all.par和all.label,其中该模块的数据和初值为
train, test = [], []
T, voc_dic, voc_size = 0, {'<unk>': 0}, 1
rela_dic, rela_size = {'<conj>': 0}, 1
其中
dataset(train,test)格式为
dataset[i] = [tree, label]
label范围为0,1。
tree为一个TreeType的数据结构
class TreeType:
def __init__(self, root, edge_list):
self.root = root
self.edge_list = edge_list
edge_list为边列表,边的格式为[relation编号(int型), node(TreeType型)]
用法示例如下
import tool
train, test = tool.train, tool.test
voc_size, rela_size = tool.voc_size, tool.rela_size
线性的baseline
如果不用树形情感识别而用线性情感识别的话,数据的解析方式就不一样了,不再赘述,下面给出baseline的结果:
Naive Bayes+否定词,连词特殊处理: 0.864
Attention+LSTM: 0.890