CSDN个性化推荐系统-负反馈测试

news2024/12/28 19:06:59

文章目录

  • 前言
  • 一、uc不感兴趣标签过滤测试
    • 1.uc不感兴趣标签获取(uc_unlike_tag_list)
      • 1.1个人中心界面
      • 1.2从标签中可以发现什么?
      • 1.3与研发确认点
      • 1.4设计开发
      • 1.5接口获取结果
    • 2.推荐流文章标签获取(tag_list)
      • 2.1部分代码
      • 2.2基本标签校验
      • 2.3基本标签校验结果
    • 3.推荐流uc不感兴趣标签过滤验证
      • 3.1校验方法
      • 3.2部分代码
      • 3.3校验结果
      • 3.4结果分析
    • 4.用户场景回归
  • 二、用户推荐流负反馈过滤测试
    • 1.内容负反馈
      • 1.1提交API校验
      • 1.2获取API校验
      • 1.3过滤验证
        • 1.3.1获取内容负反馈资源列表(negative_item_list)
        • 1.3.2获取推荐流资源列表(item_list)
        • 1.3.3求item_list和negative_item_list交集
        • 1.3.4交集结果
        • 1.3.5结果分析
    • 2.标签负反馈
      • 2.1提交API校验
      • 2.2获取API校验
      • 2.3过滤验证
        • 2.3.1获取标签负反馈标签列表(negative_tag_list)
        • 2.3.2获取推荐流标签列表(tag_list)
        • 2.3.3求tag_list和negative_tag_list交集
        • 2.3.4交集结果
        • 2.3.5结果分析
    • 3.作者负反馈
      • 3.1提交API校验
      • 3.2获取API校验
      • 3.3过滤验证
        • 3.3.1获取作者负反馈作者列表(negative_user_list)
        • 3.3.2获取推荐流作者列表(user_list)
        • 3.3.3求user_list和negative_user_list交集
        • 3.3.4交集结果
        • 3.3.5结果分析
  • 三、未登录用户负反馈过滤测试
    • 1.提交API校验
    • 2.获取API校验
    • 3.过滤验证
  • 四、整体回归
  • 五、新老负反馈写入hbase对比

前言

大家好,我是空空star,本篇给大家分享一下《CSDN个性化推荐系统-负反馈测试》

一、uc不感兴趣标签过滤测试

用户:weixin_38093452

1.uc不感兴趣标签获取(uc_unlike_tag_list)

1.1个人中心界面

1.2从标签中可以发现什么?

  • 标签有一级标签、二级标签
  • 标签并不都是全小写,也有一些字母大写
  • 同一个标签在感兴趣和不感兴趣里都出现

1.3与研发确认点

  • 一级标签和二级标签在过滤侧会拆开用到还是只用了二级标签?
  • 获取到的uc标签与推荐流文章标签匹配时有无统一转小写或大写后才去匹配?
  • 当同一个标签在感兴趣和不感兴趣里都出现时,屏蔽的优先级是不是高于增强的优先级?
  • uc标签维护好后,在推荐流的生效时间?

1.4设计开发

def get_uc_tag_list(username, interest_type):
    uc_tag_list = []
    # 获取uc不感兴趣标签
    url = f'http://xxx.csdn.net/user_csdn_tag/get_tag_list?username={username}&type={interest_type}'
    response = requests.get(url)
    res = response.json()
    for i in res['data']:
        name = i['name']
        for tag in i['tags']:
            if tag['select']:
                # 添加小写后的一级标签
                uc_tag_list.append(name.lower())
                # 添加小写后的二级标签
                uc_tag_list.append(tag['name'].lower())
    return uc_tag_list

1.5接口获取结果

unlike_uc_tag_list = get_uc_tag_list('weixin_38093452', 1)
print(unlike_uc_tag_list)

[‘python’, ‘pillow’, ‘java’, ‘java’, ‘编程语言’, ‘php’, ‘大数据’, ‘odps’, ‘大数据’, ‘大数据’, ‘人工智能’, ‘人工智能’, ‘aigc’, ‘chatgpt’]

2.推荐流文章标签获取(tag_list)

用户:weixin_38093452
请求推荐接口50次

2.1部分代码

    items = result['data']['items']
    for data in items:
        # 过滤掉nps
        if 'username' in data:
            tags = data["tags"]
            temp_tag = []
            for tag in tags:
                # 用来判断一个item中返回的标签是否重复(ml和title合并,只保留ml)
                temp_tag.append(tag['name'])
                # 多次请求后,用来跟uc的不感兴趣标签/负反馈标签做对比
                tag_list.append(tag['name'])
                # 多次请求后,用来判断ml标签和title标签是否有返回
                tag_type_list.append(tag['type'])
                if tag['name'] == '':
                    print(f"存在空标签,博客:{data['product_id']},标签类型:{tag['type']},标签名称:{tag['name']}")
            if len(temp_tag) != len(set(temp_tag)):
                print(f"同一篇博客{data['product_id']}存在重复标签:{temp_tag}")
if len(set(tag_type_list)) == 2:
    print(f'返回文章标签类型:{set(tag_type_list)}')

2.2基本标签校验

  • ml标签和title标签是否都有返回;
  • 是否有空标签结构返回;
  • 同一篇博客是否返回重复标签;

2.3基本标签校验结果

返回文章标签类型:{‘ml’, ‘title’}

3.推荐流uc不感兴趣标签过滤验证

3.1校验方法

  1. 获取用户的uc不感兴趣标签列表(uc_unlike_tag_list);
  2. 获取用户50次请求推荐流返回文章的标签列表(tag_list);
  3. 求uc_unlike_tag_list和tag_list的交集。

3.2部分代码

    print(f'【推荐返回的标签】:{set(tag_list)}')
    unlike_uc_tag_list = get_uc_tag_list(username, '1')
    print(f'【uc-不感兴趣标签】:{set(unlike_uc_tag_list)}')
    intersection_tag = list(set(tag_list).intersection(set(unlike_uc_tag_list)))
    print(f'【uc-不感兴趣标签过滤】验证结果,标签交集:{intersection_tag}')

3.3校验结果

3.4结果分析

标签交集为空,说明没有badcase;
将【推荐返回的标签】中的高频标签维护到uc不感兴趣标签中,再次执行我们的脚本观察校验结果,结合服务端uc不感兴趣过滤日志,多次执行标签交集仍为空,说明uc不感兴趣标签在推荐流过滤生效。

4.用户场景回归

确保推荐接口有返回数据和返回数据正常。

  • 登录用户(未维护uc不感兴趣标签)
  • 未登录用户

二、用户推荐流负反馈过滤测试

1.内容负反馈

1.1提交API校验

负反馈项(directive):

  • duplicate:内容重复推荐
  • content poor quality:内容质量较低
  • advertising:内容夸张、涉及广告等

资源类型(type):

  • blog
  • ask
  • blink
  • live

1.2获取API校验

  • last_unlike_time:负反馈操作时间戳记录是否正确;
  • num:负反馈提交次数记录是否正确;
  • directive:负反馈项记录是否正确;
  • 是否以type和item_id两个字段作为唯一键。

1.3过滤验证

1.3.1获取内容负反馈资源列表(negative_item_list)

def get_negative_item_list(username):
    negative_item_list = []
    url = f'http://xxx.csdn.net/api/v2/recommend/insight/negative/items/by/{username}'
    response = requests.get(url)
    res = response.json()
    pprint.pprint(res)
    for i in res['result']['duplicate']:
        if 'object_id' in i.keys():
            negative_item_list.append(i['type']+':'+i['object_id'])
    for j in res['result']['content poor quality']:
        if 'object_id' in j.keys():
            negative_item_list.append(j['type']+':'+j['object_id'])
    for k in res['result']['advertising']:
        if 'object_id' in k.keys():
            negative_item_list.append(k['type']+':'+k['object_id'])
    return negative_item_list

1.3.2获取推荐流资源列表(item_list)

item_list.append(data['product_type']+':'+data['product_id'])

1.3.3求item_list和negative_item_list交集

    print(f'【推荐返回的item】:{set(item_list)}')
    negative_item_list = get_negative_item_list(username)
    print(f'【内容负反馈】:{set(negative_item_list)}')
    negative_intersection_item = list(set(item_list).intersection(set(negative_item_list)))
    print(f'【内容负反馈过滤】验证结果,item交集:{negative_intersection_item}')

1.3.4交集结果

1.3.5结果分析

交集为空,说明没有badcase;
将推荐结果返回的部分资源列表通过提交API写入内容负反馈,再求交集,多次执行交集为空,说明内容负反馈在推荐流过滤生效。

2.标签负反馈

2.1提交API校验

directive:

  • reduce:减少
  • block:屏蔽

2.2获取API校验

  • tag:标签是否统一转小写;
  • last_unlike_time:负反馈操作时间戳记录是否正确;
  • num:负反馈提交次数记录是否正确。

2.3过滤验证

2.3.1获取标签负反馈标签列表(negative_tag_list)

def get_negative_tag_list(username):
    negative_tag_list = []
    url = f'http://xxx.csdn.net/api/v2/recommend/insight/negative/tags/by/{username}'
    response = requests.get(url)
    res = response.json()
    for i in res['result']:
        negative_tag_list.append(i['tag'].lower())
    return negative_tag_list

2.3.2获取推荐流标签列表(tag_list)

tag_list.append(tag['name'])

2.3.3求tag_list和negative_tag_list交集

    negative_tag_list = get_negative_tag_list(username)
    print(f'【减少xx相似内容推荐】:{set(negative_tag_list)}')
    negative_intersection_tag = list(set(tag_list).intersection(set(negative_tag_list)))
    print(f'【减少xx相似内容推荐过滤】验证结果,标签交集:{negative_intersection_tag}')

2.3.4交集结果

2.3.5结果分析

交集为空,说明没有badcase;
将推荐结果返回的标签列表通过提交API写入标签负反馈,再求交集,多次执行交集为空,说明标签负反馈在推荐流过滤生效。

3.作者负反馈

3.1提交API校验

  • unlike_user_id大小写场景

3.2获取API校验

  • 作者是否转小写处理;
  • last_unlike_time:负反馈操作时间戳记录是否正确;
  • num:负反馈提交次数记录是否正确。

3.3过滤验证

3.3.1获取作者负反馈作者列表(negative_user_list)

def get_negative_user_list(username):
    negative_user_list = []
    url = f'http://xxx.csdn.net/api/v2/recommend/insight/negative/users/by/{username}'
    response = requests.get(url)
    res = response.json()
    for i in res['result']:
        negative_user_list.append(i.lower())
    return negative_user_list

3.3.2获取推荐流作者列表(user_list)

user_list.append(data['username'])

3.3.3求user_list和negative_user_list交集

    print(f'【推荐返回的作者】:{set(user_list)}')
    negative_user_list = get_negative_user_list(username)
    print(f'【不看此作者】:{set(negative_user_list)}')
    negative_intersection_user = list(set(user_list).intersection(set(negative_user_list)))
    print(f'【不看此作者过滤】验证结果,作者交集:{negative_intersection_user}')

3.3.4交集结果

3.3.5结果分析

交集为空,说明没有badcase;
将推荐结果返回的作者列表通过提交API写入作者负反馈,再求交集,多次执行交集为空,说明作者负反馈在推荐流过滤生效。

三、未登录用户负反馈过滤测试

1.提交API校验

pc传uuid,app传device_id

2.获取API校验

  • imei字段值不做大小写处理;
  • 根据imei字段值可以正确获取到负反馈的数据。

3.过滤验证

类似登录用户的校验流程,只是请求推荐接口的入参有调整。

四、整体回归

  • 召回策略验证;
  • 召回资源类型验证;
  • 未登录用户/登录用户(是否维护uc兴趣标签/是否维护身份标签)场景验证;
  • 单次请求结果中资源类型分布情况验证;
  • 单次请求结果中出现重复作者占比验证;
  • 单次请求结果中出现重复资源验证;
  • 单次请求结果中连续出现同作者资源验证;
  • 其他渠道数据验证(关注流、同城流、blink热门流、推荐用户列表等)
  • 多端验证(app/wap/pc/小程序等)

五、新老负反馈写入hbase对比

旧负反馈新负反馈
流程用户提交负反馈->上报到sls->flink消费sls->udf处理写入hbase用户提交负反馈->通过API直接写入hbase
响应flink任务时常延迟/迁移华为云等因素,需要重构实时
文案文案不统一,如wap端【内容重复推荐】叫【旧闻,重复】,【内容质量较低】叫【内容质量差】,【不看此作者】叫【不喜欢该作者】各端文案已统一
数据非blog资源的负反馈数据未正常解析,导致没有正确写入hbase已兼容不同资源类型

引用
[1] 《如何支持研发对CSDN个性化推荐系统重构》
[2] 《CSDN 个性化推荐系统的设计和演进》
[3] 《CSDN 个性化推荐的数据治理》


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux——DNS域名解析服务

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。 个人主页:小李会科技的…

【③MySQL 数据查询】:提高查询的效率

前言 ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL数据查询的讲解(基本、分组、排序、聚合、分页、条件查询) 目录 前言一、基本查询二、条件查询三、聚合函数(统计函数)四、分组查询五、排序查询五、分页查询六、总结 一、基本查询 MySQ…

海格里斯HEGERLS仓储设备高端定制|四向穿梭车立体库仓储的重要设备换层提升机

随着科技的快速发展,仓储物流行业已慢慢的朝着无人化、自动化和智能化方向快速发展,用户的需求量也随之日益提升。自动化立体库早已成为很多企业智能仓的标配,可以实现仓库高层合理化、存取自动化、操作简便化。在立体仓库内,高位…

基于SQL Server数据库的安全性对策探究

数据库进阶课程论文 题 目:基于SQL Server数据库的安全性对策探究 作者姓名: 作者学号: 专业班级: 提交时间: 2023/6/4 目 录 1概述 1 2 SQL Server数据库的安全问题 1 2.1以使用者身份进入数据库 1 2&a…

区块链中怎么惩罚虚假信息的矿工,工作量证明POW,共识算法

目录 区块链中怎么惩罚虚假信息的矿工 工作量证明POW 什么是工作量证明? 现在出现了另一个问题:如果其他人偷看了小明的答案并且抢答了怎么办? 为什么区块可以安全广播? 共识算法 小结 区块链中怎么惩罚虚假信息的矿工 1…

二叉树|代码随想录2刷|11-34

222.完全二叉树的节点个数 链接:力扣 利用完全二叉树的性质,这个更容易想到,如何计算完全二叉树的节点数 | labuladong 的算法小抄 另一个二分的方法计算太偏了,既然时间复杂度都是O(logn*logn)&#xff0c…

Python读写xml(xml,lxml)Edge 浏览器插件 WebTab - 免费ChatGPT

Python读写xml(xml,lxml)Edge 浏览器插件 WebTab - 免费ChatGPT XML一、xml文件创建方法一:使用xml.dom.minidom1、文件、标签的创建 方法二:使用ElementTree 二、xml文件修改1、修改标签内容,属性2、增加子…

flask旅游数据可视化-计算机毕设 附源码81319

flask旅游数据可视化 摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对旅游数据可视化等问题&…

阿里企业邮箱标准版、集团版和尊享版有什么区别?

阿里云企业邮箱版本分为免费版、标准版、集团版和尊享版,除了费用区别,功能方面有什么差异?如何选择企业邮箱版本?免费版0元适合初创型企业,标准版适合大、中、小型企业使用,涉及子公司之间邮箱通讯可以选择…

cesium多颗卫星绕着不同的轨道旋转示例

本示例的目的是介绍演示如何在vue+satellite项目中模拟多颗卫星的运行轨迹和覆盖状态。 直接复制下面的 vue+satellite源示例代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例代码相关API参考:示例效果 配置方式 1)查看基础设置:https://xiaozhuanlan.com…

knife4j 4.1.0(OpenAPI3)实现spring security或shiro权限注解内容显示

前两天写了个knife4j(swagger2)实现spring security或shiro权限注解内容显示,主要是使用knife4j 2.0.5来实现权限注解内容显示的扩展。 在Spring Boot 3 中只支持OpenAPI3规范,集成knife4j的stater:knife4j-openapi3-…

Deepin 20.08 linux 升级nvidia驱动 黑屏 报错nvrm api mismatch

驱动连接 https://us.download.nvidia.cn/XFree86/Linux-x86_64/535.54.03/NVIDIA-Linux-x86_64-535.54.03.run 安装过程 systemctl set-default multi-user.target reboot 重启到字符界面后 chmod x NVIDIA-Linux-x86_64-535.54.03.run sudo ./NVIDIA-Linux-x86_64-535.5…

C++(11):关联容器

关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 虽然关联容器的很多行为与顺序容器相同,但其不同之处反映了关键字的作用。 关联容器…

服务器数据中了locked勒索病毒,有关locked勒索病毒的介绍与预防建议

随着网络的普及和科技技术的发展,网络安全问题日益突出。而其中,勒索病毒就是一种常见的网络安全威胁。一旦企业的服务器数据库被勒索病毒攻击,会导致企业内部的重要数据被加密,给工作和生产生活带了极大的困扰。下面就为大家介绍…

Python工具箱系列(三十七)

二进制文件操作(上) python比较擅长与文本相关的操作。但现实世界中,对于非文本消息的处理也很普遍。例如: ◆通过有线、无线传递传感器获得的测量数据。 ◆卫星通过电磁波发送测量数据。 ◆数据中心的数万台服务器发送当前CP…

Android Studio 配置 DCL 单例脚本

DCL(Double-Checked Locking)单例是一种用于创建单例对象的设计模式。单例模式是一种创建型模式,用于确保一个类只有一个实例,并提供全局访问点。 DCL单例的核心思想是使用双重检查来保证只有在需要时才对实例进行实例化。它结合…

MIT 6.830 数据库系统 -- Lab One

MIT 6.830 Lab One 项目拉取SimpleDB存储结构一览SimpleDB特性说明Lab One练习一练习二练习三练习四练习五练习六练习七 项目拉取 原项目使用ant进行项目构建,我已经更改为Maven构建,大家直接拉取我改好后的项目即可: https://gitee.com/DaHuYuXiXi/si…

物联网助力鲜花冷链安全——温湿度监控系统

近几年来我国花卉生产的发展尤为迅速,生产面积逐年扩大,产值成倍增长,内销市场越来越旺,出口创汇也有较大幅度上升。 随着人民生活水平的提高和可支配收入的增加,人们对鲜花的需求日益增长,花卉市场的前景…

电子药盒语音芯片ic解决方案WT588F02B-8S,免屏实现精准较时设定

概述:电子药盒是一种具备定时语音提醒服药的贴心智能家居用品,每天的服药时间是预先设定好的,到了设定的时间提醒声音就会响起,服药者因此就可以准时服药。许多需要每天服药的人士,尤其是老年人群体,经常会…

Matlab论文插图绘制模板第105期—带缺口的分组填充箱线图

在之前的文章中,分享了Matlab带缺口的分组箱线图的绘制模板: 进一步,再来分享一下带缺口的分组填充箱线图的绘制模板。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自…