Python 豆瓣阅读 书评 分析
豆瓣阅读作为“阅读”这一垂直领域的领头者,产生了海量的用户书评。
用户书评能够体现用户数据,作为用户画像的一个重要手段。
本次实验考虑将用户进行分级。对其阅读水平进行评级(0,1,2,3级)
例如下图所示:
计算机无法对书评进行自动评级,因而我们可以借助机器学习的方法来让机器“学会”人类评级的方式。
本研究采用人工对282条评论评级进行评分。取其中200条作为训练数据。82条作为测试数据。
目前训练数据是文本的形式,要将其转换为有效的特征形式:
本研究利用TF-IDF作为文本特征。 (参照http://blog.csdn.net/Eastmount/article/details/50323063)
需要注意的是由于处理的文本是中文,因而需要借助中文分词工具Jieba进行分词和语料统计(参照http://bruce3557.logdown.com/posts/291096/jieba-sklearn-calculation-of-chinese-tfidf)。
整个分析的流程可概括为串联的三个步骤。
- 语料分词
- 提取tf-idf特征
- 回归分析
其困难在于两点:
1、语料库太小,不能有效地提取词汇。
2、语料当中存在噪声,使得一些无意义的数字、乱码被当做词汇对待。
注意到此处Jieba分词工具较好的解决了以上两个困难,的取得了较好的中文分词效果,词汇表如下,共计2680个词汇:
词汇表
利用sklearn.feature_extraction.text库中的TfidfTransformer功能,我们可以将分词好的结果方便地转化为TF-IDF特征。
这意味着对于每一条评论,将产生2680维(对应2680个词汇)的特征。而我们的样本只有200条训练数据。在特征维度高于样本数量时,训练很难取得较好的成果。
这给我们未来工作提供了两个思路:
1.降低词汇表(例如,只关心形容词)
2.增加标注数量(较为耗时耗力)
注意到汉语常用词汇数量近100,000个,因而在增加标注数据的同时,一定要降低词汇表。
我们考虑了增加书评长度作为一个重要特征来预测评分,
在82个测试样本上的真实值和预测值对比如下:
预测值y_pred和真实值y_te的对比
本次实验效果一般,建议改进1、2两点后再做实验。