采用张量分解的方法检测垃圾评论(YELP数据集、RESCAL张量分解)

一、任务需求

论文:《Learning to Represent Review   with Tensor Decomposition for Spam Detection》
对于给定的YELP数据集,根据用户信息、餐馆信息、评论信息构建十一个关系矩阵,进而得到一个三维张量。采用RESCAL方法,对三维张量进行分解,获取embedding后的用户、餐馆向量表示。以用户、餐馆向量为特征,YELP数据集中的flagged信息为标签(Y-被过滤-垃圾评论),训练线性SVM分类器,并评估其性能。

二、所用工具

python(Anaconda):编程环境
sklearn:训练分类器工具、文本特征权重工具
rescal:张量分解工具
evaluation_classfier:自编分类器评估函数

三、实现过程

共分为四部分:提取数据集、构建关系矩阵进行张量分解、 获取评论内容bigram特征、训练分类器并评估,在实现中分四个py实现。
1.提取数据集
根据给定的yelpHotelData数据集,采用SQLite将用户、旅馆、评论的信息导出。在原始的评论数据集中,提取出一个平衡数据集a(Y=N),五折后作为训练集+测试集(由于N>>Y,会剩余很多N评论,成为集合b)。同时提取包含用户、旅馆的无标签数据,形成集合c(YR、NR)。用于张量分解的评论 = a中训练集 + b + c。

2.构建关系矩阵 进行张量分解
根据论文中提及的实体间的11种关系,构建11个n x n关系矩阵(n=len(reviewers) + len(hotels)) 。构建三维张量后,输入到RESCAL张量分解工具,输出得到embedding后的用户和餐馆表示。

3.获取评论内容bigram特征
调用sklearn中TfidfVectorizer工具,获取训练集和测试集的bigram特征并用TF-IDF进行加权。注意,测试集需要用训练集的字典。

4.训练分类器并评估
参照论文中的实现,拼接用户表示RE、商品表示PE和评论表示Bigram作为特征。这里用了sklearn线性核SVM分类器,性能评估采用之前用到的 evaluation_classfier工具。

四、实验结果

1.hotel
RE+PE(C=10)
classfier report: 
*****************************macro*****************************
accuracy : 0.860
           precision       recall     F1_score
    0          0.887        0.827        0.856
    1          0.840        0.893        0.866
  avg          0.863        0.860         0.861
*****************************micro*****************************
accuracy :0.860
           precision       recall     F1_score
    0          0.886        0.828        0.856
    1          0.838        0.893        0.865
  avg          0.862        0.860        0.860
耗时 2 秒

unigram + bigram(C=10)

classfier report: 
*****************************macro*****************************
accuracy : 0.642
           precision       recall     F1_score
    0          0.619        0.744        0.675
    1          0.678        0.539        0.601
  avg          0.648        0.642         0.638
*****************************micro*****************************
accuracy :0.642
           precision       recall     F1_score
    0          0.618        0.744        0.675
    1          0.678        0.539        0.601
  avg          0.648        0.642        0.638
耗时 905 秒

bigram+RE+PE(C=10)
classfier report: 
*****************************macro*****************************
accuracy : 0.868
           precision       recall     F1_score
    0          0.867        0.870        0.869
    1          0.871        0.866        0.869
  avg          0.869        0.868         0.869
*****************************micro*****************************
accuracy :0.868
           precision       recall     F1_score
    0          0.867        0.870        0.868
    1          0.870        0.866        0.868
  avg          0.868        0.868        0.868
耗时 685 秒


你可能感兴趣的:(自然语言处理)