版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lily960427/article/details/78844550
咸鱼好久……记录一下最近做的这个论文里面的重现,主要也就是对数据集的处理。
论文为Learning to Represent Review with Tensor Decomposition for Spam Detection,主要就是将评论和商品两种实体的关系扩展出11种,每一种为一个三维张量,也就是说会有11个三维张量。
然后把这11个三维张量投入RESCAL算法里面分解得到A和R和A^T
然后A中就有了评论者和商品的向量表示,最后放到SVM里面训练(这里也挺疑惑的 是用linearsvc还是svm.svc训练器,用后者吧结果会好一点,但是加了商品向量结果反而变低,于是就用了前者……)
除此以外,训练的时候使用的是平衡数据集,测试还分了i平衡和不平衡……不平衡的训练集我也没搞明白具体怎么划分的,反正结果不好,平衡的还差强人意。
至于数据集,论文里是这样
拿到手的不仅仅分布有差距,还是个.db文件,于是下了SQLite的可视化工具,转成了txt处理(学过SQL跟没学过一样QAQ
处理起来的代码还是比较简单的,就贴一个,这个关系是评论者之间平邮数量差距 X[i,j,8]就是评论者i和评论者j朋友数量差距。
def doX7():
print("开始创建关系8")
X7 = zeros((n, n)) # 0-5122为评论者ID 5123-5194为Hotel的ID
f7 = open("D:\pycharm\RESCAL/rescal.py-master\data/reviewer.csv", encoding='utf-8') # 打开评论者ID
reviewers = f7.readlines()
reviewer_friendcount=[]
for r in reviewers:
friendcout=int(r.split(' ')[-9])
reviewer_friendcount.append(friendcout)
for i in range(n1):
for j in range(n1):
try:
X7[i][j]=sigmoid(reviewer_friendcount[i]-reviewer_friendcount[j]) #要不要绝对值
except OverflowError:
if reviewer_friendcount[i]-reviewer_friendcount[j]>0:
X7[i][j]=1
else:
X7[i][j]=0
print("关系8创建完成")
f7.close()
return X7
结果没做五折,大概8:2随机划分了几次,求了平均:
P R F1 A
ours_re 平衡 81.219 86.953 83.963 83.440
与论文有差距(基本1个点)暂时不知道怎么改进