首页 > 其他分享 >Mahout的taste推荐系统引擎(视频推荐案例)

Mahout的taste推荐系统引擎(视频推荐案例)

时间:2024-04-04 13:44:06浏览次数:22  
标签:return taste List 推荐 userId Long Mahout new public

这是一个b站使用推荐引擎推荐的案例:
0点赞1收藏2转发
<select id="getAllUserPreference" resultType="com.imooc.bilibili.domain.UserPreference">
select
userId,
videoId,
sum(case operationType
when '0' then 6
when '1' then 2
when '2' then 2
else 0 end
) as `value`
from
t_video_operation
group by userId, videoId
</select>
public class UserPreference {

private Long id;

private Long userId;

private Long videoId;

private Float value;

private Date createTime;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public Long getUserId() {
return userId;
}

public void setUserId(Long userId) {
this.userId = userId;
}

public Long getVideoId() {
return videoId;
}

public void setVideoId(Long videoId) {
this.videoId = videoId;
}

public Float getValue() {
return value;
}

public void setValue(Float value) {
this.value = value;
}

public Date getCreateTime() {
return createTime;
}

public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}

/**
* 基于用户的协同推荐
* @param userId 用户id
*/
public List<Video> recommend(Long userId) throws TasteException {
List<UserPreference> list = videoDao.getAllUserPreference();
//创建数据模型
DataModel dataModel = this.createDataModel(list);
//获取用户相似程度
UserSimilarity similarity = new UncenteredCosineSimilarity(dataModel);
System.out.println(similarity.userSimilarity(11, 12));
//获取用户邻居
UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(2, similarity, dataModel);
long[] ar = userNeighborhood.getUserNeighborhood(userId);
//构建推荐器
Recommender recommender = new GenericUserBasedRecommender(dataModel, userNeighborhood, similarity);
//推荐视频
List<RecommendedItem> recommendedItems = recommender.recommend(userId, 5);
List<Long> itemIds = recommendedItems.stream().map(RecommendedItem::getItemID).collect(Collectors.toList());
return videoDao.batchGetVideosByIds(itemIds);
}


/**
* 基于内容的协同推荐
* @param userId 用户id
* @param itemId 参考内容id(根据该内容进行相似内容推荐)
* @param howMany 需要推荐的数量
*/
public List<Video> recommendByItem(Long userId, Long itemId, int howMany) throws TasteException {
List<UserPreference> list = videoDao.getAllUserPreference();
//创建数据模型
DataModel dataModel = this.createDataModel(list);
//获取内容相似程度
ItemSimilarity similarity = new UncenteredCosineSimilarity(dataModel);
GenericItemBasedRecommender genericItemBasedRecommender = new GenericItemBasedRecommender(dataModel, similarity);
// 物品推荐相拟度,计算两个物品同时出现的次数,次数越多任务的相拟度越高
List<Long> itemIds = genericItemBasedRecommender.recommendedBecause(userId, itemId, howMany)
.stream()
.map(RecommendedItem::getItemID)
.collect(Collectors.toList());
//推荐视频
return videoDao.batchGetVideosByIds(itemIds);
}

private DataModel createDataModel(List<UserPreference> userPreferenceList) {
FastByIDMap<PreferenceArray> fastByIdMap = new FastByIDMap<>();
Map<Long, List<UserPreference>> map = userPreferenceList.stream().collect(Collectors.groupingBy(UserPreference::getUserId));
Collection<List<UserPreference>> list = map.values();
for(List<UserPreference> userPreferences : list){
GenericPreference[] array = new GenericPreference[userPreferences.size()];
for(int i = 0; i < userPreferences.size(); i++){
UserPreference userPreference = userPreferences.get(i);
GenericPreference item = new GenericPreference(userPreference.getUserId(), userPreference.getVideoId(), userPreference.getValue());
array[i] = item;
}
fastByIdMap.put(array[0].getUserID(), new GenericUserPreferenceArray(Arrays.asList(array)));
}
return new GenericDataModel(fastByIdMap);
}

标签:return,taste,List,推荐,userId,Long,Mahout,new,public
From: https://www.cnblogs.com/15078480385zyc/p/18114129

相关文章

  • 完美世界一面 暑期 推荐算法 4.3
    1.code最长公共子序列,不仅要求长度,还要求出其中任意一个序列是什么,秒了2.项目详细问项目,没有扣非常细的细节有了解过双塔模型的结构吗为什么不能user和item提前交叉,那这个缺点,有什么方式可以改进吗双塔模型线上服务是怎样的3.八股Transformer架构,encoder和decoder有什......
  • 服务器主机推荐
      服务器推荐:雨云-新一代云服务提供商雨云的服务器享受免费使用CDN服务,当前CDN调整中;使用CDN时域名无需备案;注册后绑定微信可以获得一张首月5折优惠券;雨云支持1元任意配置1天试用,试用服务器一旦过期保留时间较短,注意数据备份,若想继续使用须及时续费。欢迎访问我......
  • Cush:从辞职自学编程到被 Apple、PriceTag推荐
    名字:Cush开发者/团队:ShaSha平台:iOS、macOS请简要介绍下这款产品也许你听过记账可以帮助省钱,但总是浅尝辄止?快试试Cush!它精简了记账中所有复杂繁琐的步骤,简单精美,让你轻松养成记账习惯!与此同时,在你超支时,Cush还会醒目地提醒你,让你每一天、每一笔都能省钱!这个月末不再超......
  • 【附源码】java毕业设计视频推荐系统
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在信息爆炸的当今社会,视频作为一种丰富的媒体形式,已经成为人们日常生活中不可或缺的一部分。随着互联网上视频内容的极速增长,用户在面对海量的视频资源时......
  • 强烈推荐 | 阿里开源的这11个神级项目
    强烈推荐|阿里开源的这11个神级项目 前言最近趁着国庆节放假休息,特地整理了一下,阿里巴巴开源的10款神级项目。这些开源项目中的绝大多数,我都在实际工作中用过,或者有同事用过。确实挺不错,挺有价值的,现在推荐给大家。1.DruidDruid自称是Java语言中最好的数据库连接池,它......
  • 云渲染工具有哪些呢?主流云渲染软件推荐
    ​云渲染技术根据其工具的类型分为两种主要形式:首先,有的渲染软件支持与多种云渲染平台集成,提供了广泛的兼容性以及各种扩展功能,适配不同服务商的具体需求。第二种则是由云渲染服务提供商特别开发的客户端应用,这是为了满足那些希望在云端进行渲染作业的用户,使他们能够更方便地设置......
  • 推荐几个好用的电商API接口(淘宝天猫丨京东1688商品详情数据接口)
    电商API接口主要用于帮助开发者将电商功能集成到自己的应用程序中,实现诸如商品检索、商品价格数据获取、订单处理、物流跟踪等功能。以下是一些常用的电商API接口提供商:一、主流电商平台API:淘宝开放平台:提供淘宝、天猫、1688等阿里巴巴集团旗下的电商平台接口,用于商品检索、......
  • 安全测试工具推荐
     工具名称工具用途工具链接操作指引BurpSuiteBurpSuite是用于攻击web应用程序的集成平台。它包含了许多工具,比如代理抓包等,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。也就是说,BurpSuite是web应用程序渗透测试集成平台。https:......
  • 推荐一款强大的开源自动化测试神器
    搞过自动化测试的小伙伴,相信都知道,在Web自动化测试中,有一款自动化测试神器工具:selenium。结合标准的WebDriverAPI来编写Python自动化脚本,可以实现解放双手,让脚本代替人工在Web浏览器上完成指定的操作。虽然selenium有完备的文档,但也需要一定的学习成本,对于一个纯小白来讲还是......
  • 好书推荐 《AIGC重塑金融》
    作者:林建明来源:IT阅读排行榜本文摘编自《AIGC重塑金融:AI大模型驱动的金融变革与实践》,机械工业出版社出版这是最好的时代,也是最坏的时代。尽管大模型技术在金融领域具有巨大的应用潜力,但其应用也面临不容忽视的风险和挑战。本文将深入研究大模型在金融领域的数据隐私......