过滤垃圾评论

我们想搭建一个关于游戏的推荐系统,给用户推荐有趣、好玩的游戏。起初在还没有用户的情况下一般采用基于内容推荐,然而要还原游戏的真实面貌,清洗垃圾评论是必不可少的。下面讲讲我们在这其中的一系列尝试,处理代码戳这里

预处理

我们先从渠道应用宝里面获取了很多游戏的数据,其中包括评论、用户评分。这些评论有内容简短、重复出现等特点。因此我们先进行了预处理

  • 处理评论内容html 反转义内容、繁体转简体、去除标点符号
  • 并选出长度大于5 的评论
  • 去除重复三次以上的评论

接下来我们手动标记了1000条评论数据(这个样本有点少,至少要10000条的),0代表无用评论,1代表普通评论。分类模型选用了逻辑回归方法,但是如何表达样本数据使其适用分类模型是重要考虑得。我们尝试了四种表示方法

  • 词袋模型,就是基于样本预料集的词频矩阵,各样本维度相同,元素是对应词的词频
  • tf-idf,利用tf-idf 优化词袋模型,只用认为是样本关键词来表示样本,而不是全部词汇
  • word2vec,用向量表示每个词汇,求出样本全部词汇的平均值向量表示该样本
  • 端到端方式,利用卷积神经网络CNN学习语法特征

词袋模型

词袋模型就是用词汇出现的次数来表示每个词,忽略了词汇在句子中出现的顺序,只关心词出现的次数。要求先得到全部样本的语料集,再求出每个样本基于语料集的词频矩阵。

用词袋模型表示样本之后,可视化数据观察类别分布是否明显。语料的维度很大要利用PCA特征降维技术把数据降到2个维度。

cleanComment1.png

可以看到分类效果并不明显。接下来看看分类模型的效果怎么样。

from sklearn.linear_model import LogisticRegression
# 逻辑回归 分类器
clf = LogisticRegression(C=30.0, class_weight='balanced', solver='newton-cg', 
                         multi_class='multinomial', n_jobs=-1, random_state=40);

clf.fit(X_train_counts, y_train);
y_predicted_counts = clf.predict(X_test_counts);
y_predicted_counts;

结合混淆矩阵来检验模型

cleanComment2.png
accuracy = 0.886, precision = 0.888, recall = 0.886, f1 = 0.887

我们还可以把逻辑回归模型系数的大小看成词汇的权重,系数越大代表词的权重越大。选择影响分类权重最大的词汇,看是否和实际情况相符。

{'bottom': [
  (-1.9233468753654832, '想玩过'),
  (-1.9699934849413354, '东西'),
  (-1.9936101307589726, '一科'),
  (-2.0586707932196653, '完整版'),
  (-2.2143741219571784, '第六感'),
  (-2.2944339277405317, '平台'),
  (-2.296290346516122, '张立根'),
  (-2.5400863161740292, '全过'),
  (-2.6306392117308213, 'f2'),
  (-3.1548797624472003, 'cnm')],
 'tops': [
  (2.1516471108530144, 'lajibamxigyegei'),
  (2.1803090306315083, '界面'),
  (2.211154149794893, '根本'),
  (2.2950592487795909, '下载'),
  (2.507806444700754, '广告'),
  (2.513095684570573, '不错'),
  (2.8654346669109865, '好难'),
  (2.9219171750081423, '样儿'),
  (3.092310924958777, '老是'),
  (3.2120104179278735, '不能')
  ]}

tf-idf

词频逆文档(tf-idf)是找出样本关键词的一种算法,它认为出现频率最高的词就是样本关键词,为了排除那些常用词比如我、的、也的干扰,还必须是在其他样本出现频率较低的词。据此可得tf-idf的表达式,词汇w在样本出现频率n,样本总词汇N,样本总数D,包含w的样本总数D_{in}
tf-idf={n \over N} \log_2{D \over (1 + D_{in})}

tf-idf 对词袋模型的优化之后,分类模型的准确率有少量改善。详见源码。从效果来看感觉词袋模型不太适合短评论。

word2vec

用上面词频表示词汇的方法很容易遇到语料中缺省的词,这样模型就没法进行分类。Word2Vec 是一种为每个单词生成词向量的技术。通过阅读大量文本,它能够学到并记住那些倾向于在相似语境中出现的词汇。经过足够多的数据训练,词汇表中的每个单词都会生成一个300维的向量,由意思相近的单词组成。

我使用word2vec表示词汇,要先训练自己的语料库。用向量表示每个词汇,求出样本全部词汇向量的平均值表示该样本。还是用PCA降维技术可视化到界面观察类别分布情况。

cleanComment3.png

可以看到类别区分更加明显,分类器分类效果也有改善。

CNN

前面介绍了快速高效地获得句子嵌入的方法,然而由于省略词汇的顺序,我们也忽略了句子中所有的语法信息。CNN 能够考虑单词的顺序,能很好地学习到句子中哪些单词的序列特征影响到目标预测。处理代码戳这里

效果如下,

cleanComment4.png

参考文献

8个步骤,上手解决90%的 NLP 问题

欢迎大家给我留言,提建议,指出错误,一起讨论学习技术的感受!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容

  • 要查看原文,请参看:原文地址 简介 自然语言处理是当今十分热门的数据科学研究项目。情感分析则是自然语言处理中一个很...
    凌冰_lonny阅读 13,560评论 0 55
  • 字符串基础操作及应用 自然语言处理简介 做一个中文文本分类任务,首先要做的是文本的预处理,对文本进行分词和去停用词...
    Jachin111阅读 971评论 0 0
  • 文本关键词抽取,是对文本信息进行高度凝练的一种有效手段,通过3-5个词语准确概括文本的主题,帮助读者快速理解文本信...
    atLee阅读 22,151评论 8 46
  • 我灵愁苦,要发出言语。我心苦恼,要吐露哀情。 --《旧·伯》7:11 一、什么是情感分析 情感分析(SA)又称为倾...
    黄老邪怪阅读 33,609评论 7 47
  • 1.文本挖掘的分词原理 在做文本挖掘的时候,首先要做的预处理就是分词。英文单词天然有空格隔开容易按照空格分词,但是...
    Acapella_Zhang阅读 2,451评论 0 0