图数据库
常用使用场景
社交应用场景:好友推荐,社交关系梳理(粉丝关注),怎么通过最少的人认识特朗普?
知识图谱:把错乱的关系网,快速的搜索出你需要的东西
推荐场景:
零售、电商、内容等个性推荐,挖掘用户需求,提升用户体验
导航城市规划:最短路径
金融领域:资产交易图
节点画像:设备画像,用户画像等
节点(V):人、电影、食谱、食材
节点属性(VP):人的岁数、身高、年龄、职业
关系(E):人和电影之间的关系(喜欢 ,点赞,评分等)
关系属性(EP):人对电影的评分的分值
标签(Label):对节点和关系进行分类的 用户(user),设备(device)
比关系型数据库更适合做关系数据库
主体:用户---食谱
常见的推荐逻辑
item ==> item
根据内容推荐相似食谱(食材、营养、标签等)
user ==> item ==> user
推荐制作记录推荐相似用户
user ==> item ==> user ==> item
根据相似度最高的用户推荐他常用的食谱
图数据库库中常用的推荐
内容过滤
协同过滤
余弦相似度
皮尔逊相似度
领域推荐
内容推荐
顾名思义是根据内容来做为推荐
食谱食材内容相似推荐:I2I
小鸡炖蘑菇和香菇炖鸡相同食材
可以找到和香菇炖鸡食材相同的食谱排序
还可以用食谱标签、食谱营养成分等内容作为推荐
Jaccard距离 u2i2u
公式:
根据制作过相同食谱的用户推荐相似用户
并集:取的是全量食谱
交集:取得是相同制作过的食谱
余弦相似度 u2i2u
公式:
样本数据:
用户A和用户B算余弦相似度
合集余弦:(正确的余弦相似度)
交集余弦:(有一定缺失的余弦相似度)
由于图数据库逻辑合并取参数逻辑,损失一部分值的余弦相似度计算方法
精确度问题
A与C的情况怎么办?
制作相同过食谱后
扩大食谱样本
就是说只发生在新用户已经少量制作的用户上,也就是合集较少的情况,在食谱样本扩大的时候以及用户制作过相同食谱之后,两个影响差值会缩小,也就是说用户越做推荐的越准确。经常制作的用户,样板偏差会被拉小。
皮尔逊相似度 u2i2u
公式:
样本数据:
用户A和用户B算皮尔逊相似度
空值预期为用户制作的平均次数
合集皮尔逊:
交集皮尔逊:
对比余弦相似度:
两个公式差距就是空值预期(零、平均数),公式是可以互推的
领域推荐 u2i2u2i
根据相似度最高的用户推荐食谱(拿余弦相似度作为参考)
用户之间的相似度:
用户A--->用户B--->0.617
用户A--->用户C--->0.954
用户A--->用户D--->0.796
==》取到前两个相似用户C、用户D
==》红烧肉 =8x0.954+0x0.796=7.632
==》辣椒炒肉 =1x0.954+1x0.796=1.75
==》也就是加权求和排序,加权和大的在前面
良好推荐期望值:
功能全面个性化推荐
效果精准
性能快
实际的推荐场景里,功能、效果、性能三者相辅相成、也彼此互相影响,很多时候要进行折中的考虑
一、选取相似度算法问题
性能:余弦相似度>>皮尔逊相似度
准确度:余弦相似度<皮尔逊相似度
在阿里云GDB初始阶段我们会使用余弦相似度来做为用户之间相似度系数
二、数量级别过大全量计算过慢(数据筛选)
根据相似度最高的用户推荐食谱
采用数据过滤的方式
万/十万/百万 ==> 找到相同制作食谱最多的人
千/万==> 协同过滤
十/百==> 加权求和
三、冷数据问题
四、超时截断
超时后选取热门数据进行补足