在之前的工作中,我们实现了通过截取摄像头视频中的图像进行情绪分析。分析的结果为一个7维向量,分别代表愤怒、厌恶、恐惧、高兴、平静、伤心、惊讶7种情绪的权值。
现在我们需要设计一个算法来把这7个权值映射成阅读评分。映射的过程除了需要用户的情绪向量,还需要结合文章类型。
确定输入输出
输入为(文章类型,用户情绪向量);输出为根据情绪得到的评分,范围0-10
算法设计
算法设计如下:根据文章的类型,将其映射成为一个与情绪向量每一维意义均相同7维向量;然后计算其与用户情绪向量的余弦相似度;最后将余弦相似度映射到0-10之间作为文章评分。
这个过程中最困难的就是根据文章的类型,将其映射成为一个与情绪向量每一维意义均相同7维向量这一步。
首先确定文章类型,我们目前所拥有的文章类型有如下几种:
- 国际
- 军事
- 国内
- 台湾
- 社评
- 社会
- 海外看中国
这是根据环球网的不同板块分类得来的。
此外,情绪识别结果返回值包含以下字段。每个字段的值都是一个浮点数,范围 [0,100],小数点后 3 位有效数字。每个字段的返回值越大,则该字段代表的状态的置信度越高。字段值的总和等于 100。
- anger:愤怒
- disgust:厌恶
- fear:恐惧
- happiness:高兴
- neutral:平静
- sadness:伤心
- surprise:惊讶
为了计算出文章的情感,我们使用统计的方法,对多人,多篇文章进行阅读时的情绪采样,将人们对每个类型的文章时的情感取平均值,作为该类型的标准情感向量。最终统计的结果如下:
{'国际':[14.67, 0.163, 0.163, 1.936, 68.429, 14.67, 11.633],
'军事':[68.429, 1.936, 11.633, 14.67, 0.163, 14.67, 0.163],
'国内':[14.67, 0.163, 11.633, 1.936, 0.163, 68.429, 14.67],
'台湾':[11.633, 1.936, 14.67, 14.67, 68.429, 0.163, 0.163],
'社评':[1.936, 11.633, 0.163, 68.429, 14.67, 14.67, 0.163],
'社会':[0.163, 14.67, 68.429, 1.936, 14.67, 11.633, 0.163],
'海外看中国':[14.67, 68.429, 0.163, 1.936, 11.633, 14.67, 0.163]}
接下来我们计算出余弦相似度,把余弦相似度作为用户对该文章的评价指标,但该指标的值域是(-1,1),至于把余弦相似度映射到0-10之间则很简单使用公式
rate=5*(cos+1)
进行线性映射即可即可。