全国大学生悦读挑战赛

来自集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织
跳到导航 跳到搜索

原始数据集

作为南京大学和百度双创大数据平台建设的重要项目之一,“全国大学生悦读挑战赛”为国内首个参与规模最大的创新阅读大赛,率先开创读书时长PK+优质书评PK全新模式,用技术改革传统阅读。据悉,本次大赛时间从2016年11月10日到12月20日,覆盖全国1000多所院校的1000万大学生。大赛通过线上“读书时长PK”、“书评赢大奖”及“在线听书”等多种形式,倡导健康阅读,利用碎片化时间多次阅读。据统计,在过去一个多月的时间里,针对南大专家、师生推选出的60本经典书目,借由百度的大数据和人工智能技术与百度阅读平台,大赛共吸引了30万人次参加,累计读书时长达13.95亿秒,产出书评近5000条,优秀书评1000多条。经过40天的阅读时长pk和优质书评PK,最终16位获奖选手从30万人次中脱颖而出。特等奖得主为云南财经大学的杨月潇,他的阅读时长达到85万秒,相当于平均每天阅读6个小时。http://news.nju.edu.cn/show_article_4_44895

本研究的原始数据即来自于本次大赛,其包含的字段信息如下:

  • 销售记录:图书名,图书ID,用户ID,购买时间,购买价格
  • 兑换劵使用记录:图书名,图书ID,用户ID,兑换时间
  • 用户阅读行为数据:用户ID,行为编号(只有1098),阅读时长(毫秒),触发时间,图书ID,端(1 ipad,2 iphone,3androd)
  • 图书数据:图书名,图书ID,图书分类,文库价格

经过数据清洗得到的数据集中,包含阅读书目215820本,用户121862个,阅读总时长为437,065,849分钟,时间跨度为2016年10月01日到2016年12月20日

对书的研究

Word2Vec

Word2Vec背后的模型是LSTM,它可以利用深度神经网络学习到一段文本中,词语之间的上下文关系。利用Python的gensim包可以很容易地实现Word2Vec,它接受的输入是一个以词语为元素的二维数组,每一行是一个有词的list构成的句子,整个输入是一个由句子的list构成的corpus。以每本书为研究单位,我将每个人阅读的书目的list作为一个句子,即作为二维数组的一行,这样便可以得到一个corpus,可以交给gensim进行训练,从而为每本书得到一个distributed representation的vector

Predict Book Sales

一个令人感兴趣的问题是,这个vector是否可以预测这本书的销售量?将Word2Vec训练的维数设置为200,用训练出来的vector中的维度作为特征,以书的销售量作为目标进行预测。分别用scikit-learn中的LinearRegression和Gradient Boosting Regression进行实验。

Wordvector-predict-sales.png

从Mean_Square_Error来看,Linear Regression的Train MSE为4609.0130,Test MSE为6370.2843;Gradient Boosting Regression的Train MSE为4189.8437,Test MSE为5905.0230。可以这个模型并不理想。

Predict Reading List

反思一下为什么预测书的销量失败了,因为从LSTM模型的原理而言,这个vector反映了每个书目在这个corpus中的上下文关系,也就是说一个人阅读的书目之间存在的联系,因此利用这个vector可以计算书籍之间的相似度,从而根据相似度实现推荐,不过仍然需要寻找合适的方法来衡量推荐的准确性。

我简单地做了一个实验,以用户id为116294的用户为例,根据他所阅读的书目列表中的书目,一一计算与这本书相似度最近的书(gensim.KeyedVectors.most_similar),得到一个“推荐列表”,将该推荐列表与他实际的阅读列表进行比对,重合率达到36%。用100个用户做实验,重合率最高可达0.83,也有一些用户的重合率为0,但重合率大于0的用户占到了实验样本用户数量的73%,将这一计算推广到全体用户,有0.07%的用户的重合率高达1.0,重合率大于0的用户占到了68%。这些数据初步证明了用书的word vector进行相似度推荐的有效性。从更深层次的角度而言,这背后是对“信息茧房”这一效应的印证。以上的计算数据表明,利用LSTM的长短期记忆模型对数据进行学习和训练,可以较好地从用户的历史阅读记录中“计算”出用户的阅读喜好,也就是说,用户可能只注意自己已经选择过的书目和使自己愉悦的阅读材料,久而久之,便将自身桎梏于像蚕茧一般的“茧房”中。推而广之,这种思想其实与人类移动行为(Human Mobility)中表现出Preferential Return的习惯性行为模式有异曲同工之妙。简单说,这就是习惯的力量。

另一个问题是这个vector与node2vec算法得到的vector之间是否存在关系?需要验证一下

对读者的研究

Attention Fragmentation

Time Fragmentation

从阅读时长的概率分布来看,阅读时长在10分钟及以下的概率高于50%,而阅读时长超过10分钟后,概率分布曲线急剧下降到0.00001%,整个曲线可以用指数截尾的幂律分布进行拟合,函数形式大约长这样,拟合结果如图

[math]\displaystyle{ P(x)=(x+x_0)^{-\beta}exp(-x/\kappa) }[/math]

Duration-distribution.png

Book Concentration

计算每本书被阅读时间的基尼系数,为0.8863,这表明人们在不同的书上花费的阅读时间存在极大的不平等性,也就是说存在集中化现象,人们的注意力更容易聚焦于一部分书,而非均等地分配到各类书上。

受Webster在测量电视收视率与互联网用户行为方面的工作的启发[1],我们以每本书占用的阅读时间类比于“市场份额”的概念,计算了HHI(Herfindahl-Hirschman Index)。由于HHI指数的计算通常要求该市场中“企业”的数量要在50个以内,而我们的书目数量多大20万本以上,因此我们将书按照种类重新分组,以书的分类为单位计算其阅读时间所占的“市场份额”,得到的数值为0.3845(3845点),根据维基百科上给出的范围:An H above 0.25 (above 2,500) indicates high concentration. 这表明在书目种类这个Market中,各个种类图书的阅读时间存在着高度的集中性,这与基尼系数的计算结果相一致,也就是说,尽管人们阅读的时间变得碎片化,但在阅读单本图书的时间或在阅读的种类上均存在极为集中的现象。这一结论与之前对书本身进行Word2Vec操作后进行相似性推荐时得到的结论也是一致的。

HHI的计算公式如下: [math]\displaystyle{ HHI = \sum_{1}^{N}(X_i/X)^2 = \sum_{1}^{N}S_i^2 }[/math]

  • X_i - 第i个企业的规模
  • X - 市场总规模
  • S_i - 市场占有率

Attention Flow Network

以每个用户为研究单位,整理出的所有用户的attention flow数据,这个数据每一行是一个人阅读一本书所用的时间,下一行记录表示这个人的注意力跳转到了下一本书,并记录相应的时间。大致长这样。在这个数据集中,共有121862个用户,时间跨度从2016年10月01日到2016年12月20日

Index,uid,book_id,duration,startingtime

0 116294 bf6f5580f90f76c660371a28 5764248.0 2016-10-01 00:24:01

1 116294 c4721243650e52ea55189895 887.0 2016-10-01 21:30:44

2 116294 bf6f5580f90f76c660371a28 1487263.0 2016-10-01 21:31:20

3 200851 003798047fd5360cbb1adb0e 2782364.0 2016-10-01 00:35:41

4 718703 751d350f7481509368a6d9a50d344866 3327098.0 2016-10-01 01:19:18

先画出这个网络的度分布,基本符合一个scale-free network的特征

Degree-distributin.png

Allometric Growth

这个流网络中是否存在异速增长率?作出PV关于UV的散点图,可以看到log-log坐标下,拟合直线的斜率仅为1.02,也就是说,异速增长现象不明显,PV与UV的增长更接近于线性关系

Pv-uv.png

Flow Dissipation

计算流网络的耗散量与流量的关系,其中:

  • Ti表示总流量
  • Di表示耗散量(即离开了整个流网络系统,直接流入sink节点的那部分流量)
  • Si表示从Source节点流出的流量
  • Fi表示流经某个节点的总流量

Flow-dissipation.png

在Attention Flow Network中,节点是每本书,边是流动的注意力,由此可以认为,耗散量是每本书自身的一些属性,可以用来进行预测这本书的其他属性,比如销售量。以Di、Ti和Si作为自变量,书的销量为因变量,进行多元线性回归。采用OLS方法拟合得到的R2为0.418,三个量的系数分别为:-0.89,0.01,0.94,可见Di和Si的影响因子较大。用scikit-learn的Linear Regression分别对随机划分的训练集和测试集进行试验,如图。

Dissipation-prediction.png

Entropy

从熵的角度入手衡量Fragmentation,对每个用户而言,可以分别计算他所阅读的书目和每本书上消耗的注意力(即阅读时长)的熵,前者反映了读者在面临海量的图书时作出选择的多样性,后者反映了读者在每本书上消耗注意力的差异性。我的问题是:阅读的碎片化是否会导致阅读时间的碎片化?也就是说,读书的多样性是否会影响到阅读时间的差异性?也就是,阅读书目的熵(book_entropy)是否会影响阅读时间的熵(time_entropy)?

由于用户数量太多,有12万多个,对每个用户进行计算耗费大量的时间,为了先观察pattern,我先计算了1000个用户的book_entropy和time_entropy,它们各自呈现出近似正态分布,且二者存在较好的线性关系,使用OLS拟合得到的R2为0.412,皮尔森相关系数为0.64。计算全部12万多用户的book_entropy和time_entropy,用OLS回归得到的R2为0.532,皮尔森相关系数为0.73。

User entropy l.png

对12万全体用户的数据作出散点的热力图

User entropy heatmap.png

分别对数据进行log-binning,linear-binning,rescale和rescale+normalize的变换操作,在rescale的时候,采用的方式是用book_entropy和time_entropy分别除以用户所读书目的总数(N)和所花费的总时间(T,单位为分钟)

User entropy relationships l.png

根据用户的time_entropy进行排序,分别取顺序前5个用户和逆序前5个用户,作出他们从2016年10月01日-2016年12月20日期间每次阅读持续时间的示意图,横轴是时间轴,色块在横轴上的长短表示该用户该次阅读行为持续的时间长短。该图的作图思路参考Barabasi关于人类动力学中的爆发现象的研究[2]

Reading-intervals-timeentropy.png

从上图中可以看出,由于时间跨度过长,难以清晰直观地看到用户的阅读行为到底是碎片化的还是集中的,于是任意选取其中两个用户,各任意选取10天,看他们在这10天内阅读行为的时间间隔情况

Reading-intervals-u695337949-60-70.png

用户695337949在2016-11-30至2016-12-09

Reading-intervals-u1945757708-0-10.png

用户1945757708在2016-10-01至2016-10-13

用户695337949在2016年10月01日-2016年12月20日期间阅读情况

User-695337949-log-scale.png

用远程服务器进行多进程计算

用PyCharm的远程调试功能,利用ssh连接到服务器,可以把本地的py文件同步到服务器上,并直接新建ssh session在服务器上运行代码。利用multiprocessing包可以实现多进程运行,让每个CPU都用起来。

参考文献

  1. Webster, J. G., & Ksiazek, T. B. (2012). The dynamics of audience fragmentation: Public attention in an age of digital media. Journal of communication, 62(1), 39-56.
  2. Barabási, A. L. (2005). The origin of bursts and heavy tails in human dynamics. Nature, 435(7039), 207-211.

作者:Zhicongchen