当搭配遇上个性化推荐

部署运行你感兴趣的模型镜像

今天介绍的是一篇个性化搭配推荐的论文,是 2017 年时候的论文,这也是比较早的开始结合搭配和个性化推荐的一个工作,基于度量学习和排序学习的方法。

论文题目:FashionNet: Personalized Outfit Recommendation with Deep Neural Network

论文地址:https://www.ijcai.org/proceedings/2017/0239.pdf

概览

将推荐加入到搭配中,实现个性化搭配的推荐。采用的也是深度学习的算法-- CNN 模型,具体实现就是用 VGG-16 网络模型作为基础,实现 FashionNet 模型,一个 FashionNet 模型包括两个网络,特征提取网络和实现搭配的匹配网络,这部分作者设计了 3 种网络结构,并做了对比实验,而在训练上采用的两阶段训练策略,即先训练一个通用的搭配模型,然后加入用户信息来微调网络模型,此外网络的最终结构如下所示,输入两套搭配,正样本是训练集 polyvore ,也就是用户自己上传的搭配,负样本就是随机选择衣服的搭配,分别通过 FashionNet,然后计算 RankLoss。


研究方法

本文研究的问题类似于度量学习,度量学习需要学习的是物体间的距离,或者说是相似性,而搭配需要学会的是衣服之间的匹配性;

网络结构

设计了三种网络结构,如下图所示。

FashionNet A

第一种网络结构,输入的时候将一套搭配里的衣服图片在颜色通道上进行concat,得到的就是一个 w*h*9 的输入图片,然后输入 VGGNet 网络,提取特征,接着是 1 个 FC(全连接)层+ softmax,输出两个数值,表示喜欢和不喜欢的概率;

这个网络的特点就是将特征学习和匹配性衡量都集成在一起;

FashionNet B

第二种网络结构,输入的时候并不会将搭配中的衣服图片 concat 起来,而是分别传入单独的 VGGNet 中,但每种衣服经过的网络都是相同的,也就是都被影射到共同的隐空间中,然后提取到的特征 concat 起来,后面跟着 3 个 FC 层 + softmax。

FashionNet C

前两个网络的问题:

  1. 在获取高阶关系的时候会有困难;

  2. 造成数据空间的扩大(原始数据或者特征空间),这要求大量的训练样本,但实际上并没有足够数量的训练样本;

因此,第三种网络结构,特征提取部分和 FashionNet B 是一样的,但是之后则是将任意的两个衣服提取到的特征 concat,经过各自的匹配网络(3FC+softmax),匹配网络的数量就和搭配数量有关系了;不同的匹配网络应用于不同类型衣服对,比如上装-鞋子,上装-下装对等,匹配网络的结果会累加起来得到搭配的最终得分 s。

训练网络模型

最终训练的网络结构如下图所示,

个性化搭配推荐不仅仅涉及到度量学习,还是是一个排序学习(learning-to-rank )问题,输入是正负样本对,分别输入一个 FashionNet ,网络输出的评分 s ,再采用 rank loss 计算 Loss。公式如下图所示:

训练

采用两阶段训练策略的原因有:

  • 每个用户的搭配数量是比较少的,特别是如果需要训练一个性能很好的神经网络;

  • 很多用户的搭配都比较相似,这些相似的搭配数量并不少;

  • 尽管每个用户的搭配审美都不完全相同,但还是存在很多通用的搭配尝试,比如衬衫通常都会搭配牛仔裤

基于以上的原因,选择两阶段训练网络的策略。

第一阶段的训练是学习一个通用的搭配网络模型,在这一步,会丢弃用户信息,将所有的搭配都混合在一起,然后训练网络。一个训练样本是正样本和负样本的搭配对,采用在 ImageNet 上预训练好的参数初始化 VGGNet,其他的网络层参数则是通过高斯分布进行初始化;

第二阶段是训练用户特定的模型(user-specific model)来进行个性化推荐。初始化是用第一步训练好的网络模型参数,接着使用每个用户的数据来微调网络。

对于上述的 3 种网络结构在第二阶段的微调,是这样设置的:

  1. FashionNet A 的微调是对整个网络都微调(特征提取和匹配网络);

  2. 对于 B 和 C 两个网络,有两种策略:

  • 微调整个网络,特征提取网络和匹配网络都会有个性化的参数,也就是对不同的用户,同样的衣服会有不同的特征表示;

  • 固定特征提取网络,仅微调匹配网络。这种做法会加快训练速度,实际应用中更多的微调都是这种做法。

三种网络结构的参数设置情况如下所示:


实验

数据集

采用的 Polyvore 数据集,包含来自 800 个用户上传的搭配数据,每套搭配是三件衣服--上装、下装和鞋子,将 polyvore 作为正样本,负样本则是随机选择上装、下装和鞋子得到的搭配。

数据集分为训练集、验证集和测试集,在每个集合中,每个用户的正样本数量分别是 202,46 和 62,而负样本则是正样本的 6 倍,也就是 1212,276 和 372。

指标

NDCG 评价标准,用来评价一个排序的列表,其公式如下所示,第 m 个位置的 NDCG 是:

 表示一个理想排序的得分,对于正样本, 是 1,负样本是 0;

NDCG 的最优数值是 1;

Mean NDCG 是 NDCG@m (m=1,....M,表示排序的长度)的均值;

最终采用的指标:

  • mean NDCG:所有用户的 mean NDCG@m,也就是先计算不同m数值的NDCG,然后求平均,再除以用户数量;

  • average of NDCG @m:所有用户的NDCG@m,不同m值的均值(仅除以用户数量)

  • top-k 结果中正样本的数量(特定的 k 数量)

参数设置

使用的框架是 Caffe,batch 为 30,epoch 是 18。

学习率的策略参考论文《Return of the devil in the details: Delving deep into convolutional nets》。

实验结果

实验结果如下图所示:

上图中,Initial 是采用初始化参数的结果,也就是预训练模型的结果,Stage one 就是训练好第一阶段的模型,Stage two (partial)  和 Stage two(whole) 就是第二阶段的微调的两种策略,前者就是固定特征提取网络,微调匹配网络,后者就是整个网络都微调;Stage two(direct) 是不经过第一阶段的训练,直接微调网络的结果,应该就是直接用每个用户的数据来训练一个网络模型的结果。

通过实验结果的对比,可以得到这四个结论:

  1. FashionNet A vs B、C 前者是将特征提取和匹配计算都放在一个网络中,而后面两种网络是分开这两种功能,实验结果表明采用不同网络实现不同的功能,可以取得更好的性能;

  2. FashionNet B vs C 两个网络的区别是在匹配网络的设计,前者是仅设计了一个匹配网络,后者是任何两种不同类别的衣服的特征进行 concat 后,输入一个单独的匹配网络,实验结果是后者的效果更好,这表明将高阶关系分开成一系列成对组合是更佳的解决办法;

  3. 两阶段训练策略 对比第一阶段和第二阶段的结果,后者效果更好,这也说明微调是非常有用的技术;

  4. Stage two (partial)  vs Stage two(whole) 实验结果表明后者的效果更好,这表明学习一个特定用户的特征表示对于推荐任务很有帮助,但这种策略的训练时间会更久,它需要重新计算所有衣服的特征,因此,实际应用会采用效果稍差的第一种方法,仅仅微调匹配网络。


小结

这篇论文的思路是结合了度量学习和排序学习的方法,并且应用了 CNN 来进行特征提取,然后计算衣服之间的匹配性,训练策略上也是从训练通用的搭配模型到训练个性化搭配模型。

不过,这里我也还是存在一个小小的疑问的:按照论文的介绍,第二步采用用户的搭配来训练个性化推荐模型,那最终就是每个用户都会训练得到一个模型,也就是用户越多,训练得到的模型数量也就越多了

当然,这可能也是我的理解不到位,如果看过这篇论文的,也欢迎和我讨论一下。

完)


您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

实验一门诊挂号系统界面设计 界面构思: 整体布局简洁明了,以白色或淡蓝色为背景主色调,营造出干净、舒适的视觉效果,符合医院环境的氛围。 顶部设置医院名称及LOGO,下方有挂号系统标题,标题下方有日期时间显示区域。 左侧设置功能导航栏,包含患者信息录入、挂号类型选择、挂号科室选择、挂号医生选择等功能按钮,按钮采用简洁的矩形设计,以不同颜色区分不同功能。 右侧为主操作区域,分上下两个部分,上半部分为患者信息录入框,包括姓名、性别、年龄、联系方式等必填字段,字段采用简洁的线条框,以红色星号标识必填项;下半部分为挂号结果展示区,以表格形式展示挂号信息,包括挂号单号、患者姓名、挂号科室、挂号医生、挂号时间等,表格边框简洁,文字清晰可读。 实验二电子病历界面设计(医生端和病人端) 医生端界面构思: 采用深蓝色调为主,搭配白色和浅灰色,营造专业、沉稳的氛围。 顶部有医院名称、系统名称及当前医生信息显示区域,包括医生姓名、科室、职称等,右侧有消息通知、系统设置等图标按钮。 左侧设置功能导航栏,分为主诉、现病史、既往史、体格检查、辅助检查、诊断、治疗方案、病程记录等模块,每个模块以简洁的图标加文字形式呈现,图标采用深蓝色,文字为白色。 右侧为主操作区域,上半部分为病历编辑区,以丰富的文本编辑工具栏展现,包括字体、字号、加粗、斜体、下划线、列表等,编辑区背景为白色,文字为黑色,边框为浅灰色,确保医生能够清晰地编辑病历内容;下半部分为病历预览区,以简洁的布局展示病历的整体结构和内容,预览区背景为浅灰色,文字为深灰色,方便医生在编辑过程中随时查看病历效果。 病人端界面构思: 以淡绿色为主色调,搭配白色和浅灰色,营造出清新、自然的氛围。 顶部有医院名称、系统名称及当前病人信息显示区域,包括病人姓名、性别、年龄等,右侧有消息通知、帮助中心等图标按钮。 左侧设置功能导航栏,分为我的病历、检查报告、健康档案、健康提醒、在线咨询等模块,每个模块以简洁的图标加文字形式呈现,图标采用淡绿色,文字为白色。 右侧为主操作区域,上半部分为病历展示区,以简洁的布局展示病历基本信息,包括病历编号、就诊日期、就诊科室、主诉、诊断结果等,背景为白色,文字为深灰色;下半部分为健康建议区,以图文结合的方式展示针对病人病情的健康建议,包括饮食指导、康复锻炼建议、用药注意事项等,背景为浅绿色,文字为白色,图片选择与健康建议相关且清晰、直观的素材。 实验三住院信息系统流程图 界面构思: 绘制流程图时,采用简洁的矩形、圆形、菱形等基本图形,搭配清晰的箭头线条,确保流程走向明确、直观。 流程图整体呈竖向排列,从上到下依次表示住院流程的不同阶段,包括入院前、住院中、住院结算、出院后反馈。 每个流程节点的图形内,用简洁的文字描述该阶段的关键操作或环节,如“患者登记信息”“医生开具入院医嘱”“护士安排床位”等,文字采用黑色,字号适中,保证可读性。 不同类型的流程节点可采用不同颜色的图形进行区分,如入院前的流程节点用淡蓝色,住院中的流程节点用淡绿色,住院结算用淡黄色,出院后反馈用淡紫色,以便于快速识别和理解整个住院流程的不同部分。 在流程图的适当位置,添加简短的注释或说明文字,对一些复杂的流程环节进行进一步解释,如“如遇紧急情况,可直接进入绿色通道办理入院”等,注释文字采用较小的字号,颜色为深灰色,以免影响整体流程图的视觉效果。 实验四住院信息系统流程图分工制作 界面构思: 各小组成员可使用墨刀的团队协作功能,共同在一个项目中进行流程图的绘制和编辑。 每个成员负责绘制流程图的某一部分,如入院前、住院中、住院结算、出院后反馈中的一个环节。 在各自负责的流程图部分,按照实验三中提到的构思方式进行绘制,确保图形样式、颜色搭配、文字描述等方面保持一致性和协调性。 绘制完成后,其他小组成员可在墨刀的评论功能中提出修改意见和建议,主负责人根据反馈进行调整和优化,直到整个流程图完整、准确地展示住院信息系统的流程。 实验五住院电子病历界面设计 界面构思: 医生端: 整体以深色专业色调为主,如深蓝色或深灰色背景,搭配白色和浅色的文字及图形元素,突出专业性和可读性。 顶部有系统名称、当前病区、当前患者列表等信息显示区域,方便医生快速了解所处的工作环境和患者情况。 左侧设置功能导航栏,包括病历书写、病程记录、医嘱管理、检查检验结果查看、护理记录查看等功能模块,每个模块以简洁的图标加文字形式呈现,图标颜色鲜明但不过于刺眼。 右侧为主操作区域,分上下两个部分。上半部分为病历书写区,提供丰富的文本编辑工具栏,同时结合AI辅助功能,如自动采集患者信息、检验检查结果,智能生成病历内容等,编辑区背景为白色,文字为黑色,边框为浅灰色,确保医生能够高效、准确地书写病历。下半部分为病历预览区,以简洁的布局展示病历的整体结构和内容,预览区背景为浅色,文字为深色,方便医生在书写过程中随时查看病历效果。 护士端: 采用淡紫色或淡粉色为主色调,营造出温馨、关怀的氛围,同时搭配白色和浅灰色,保证界面的清晰度。 顶部有系统名称、当前病区、当前患者列表及护士个人信息显示区域。 左侧功能导航栏包括护理记录书写、医嘱执行与审核、患者体温体重等监测记录、护理提醒等功能模块,图标设计简洁明了,易于识别。 右侧主操作区域,上半部分为护理记录区,提供便捷的记录工具,如快速填写患者生命体征、护理操作执行情况等,记录区背景为白色,文字为黑色,边框为浅灰色。下半部分为护理提醒区,以醒目的颜色(如橙色或黄色)显示即将进行的护理任务提醒,如输液、口服药等,提醒内容包括患者姓名、床号、护理任务名称、执行时间等,确保护士能够及时、准确地完成护理工作。 病人端: 以淡绿色或淡蓝色为主色调,营造出清新、舒适的氛围,搭配白色和浅灰色,使界面简洁易读。 顶部有医院名称、系统名称及当前病人信息显示区域,包括病人姓名、性别、年龄、床号等。 左侧功能导航栏包括我的病历、检查报告、健康档案、健康提醒、在线咨询、费用查询等功能模块,图标设计简洁、直观,方便病人快速找到所需功能。 右侧主操作区域,上半部分为病历信息展示区,以简洁的方式向病人展示其住院期间的病历基本信息,如入院时间、诊断结果、治疗方案等,背景为白色,文字为深灰色。下半部分为健康建议与随访区,以图文结合的形式为病人提供个性化的健康建议,如饮食指导、康复锻炼建议等,同时展示随访计划和记录,背景为浅绿色或浅蓝色,文字为白色或深灰色,图片选择与健康建议相关的素材,帮助病人更好地了解自己的健康状况和康复进程。
06-10
### 门诊挂号系统界面设计 门诊挂号系统的界面设计应以简化用户操作、提高效率为核心目标。挂号窗口的工作人员需要快速完成患者信息录入和挂号流程,因此界面需简洁直观[^2]。以下是具体设计方案: - **顶部导航栏**:显示系统名称、当前登录用户信息以及退出按钮。 - **左侧菜单栏**:提供功能选项,如“挂号管理”、“退号管理”、“医生排班查询”等。 - **中间内容区域**: - 患者信息输入框(姓名、身份证号、联系方式)。 - 医生及科室选择下拉菜单。 - 挂号费用显示区。 - 提交按钮和取消按钮。 ```html <div class="header"> <h1>门诊挂号系统</h1> <span>当前用户:张三</span> <button>退出</button> </div> <div class="sidebar"> <ul> <li>挂号管理</li> <li>退号管理</li> <li>医生排班查询</li> </ul> </div> <div class="content"> <form> <label>姓名:</label><input type="text" name="name"><br> <label>身份证号:</label><input type="text" name="id"><br> <label>联系方式:</label><input type="text" name="phone"><br> <label>科室:</label><select name="department"></select><br> <label>医生:</label><select name="doctor"></select><br> <label>挂号费用:</label><span id="fee">0元</span><br> <button type="submit">提交</button> <button type="reset">取消</button> </form> </div> ``` --- ### 电子病历界面设计(医生端/病人端) #### 医生端 医生端的设计需支持高效查看与记录病历信息,同时确保数据准确性和完整性[^3]。 - **顶部导航栏**:显示患者基本信息(姓名、年龄、性别)。 - **左侧菜单栏**:包括“病历概览”、“诊断记录”、“处方记录”等功能。 - **中间内容区域**: - 病史记录表单(既往病史、过敏史等)。 - 当前诊断输入框。 - 处方开具模块。 ```html <div class="header"> <h1>患者病历管理系统</h1> <span>患者:李四(男,35岁)</span> </div> <div class="sidebar"> <ul> <li>病历概览</li> <li>诊断记录</li> <li>处方记录</li> </ul> </div> <div class="content"> <textarea placeholder="请输入病史记录..."></textarea> <input type="text" placeholder="当前诊断..."> <button>保存</button> </div> ``` #### 病人端 病人端的设计需注重隐私保护,仅展示必要的病历信息[^4]。 - **顶部导航栏**:显示用户信息及退出按钮。 - **左侧菜单栏**:提供“病历查询”、“预约挂号”等功能。 - **中间内容区域**:以表格形式展示病历记录,包括日期、医生、诊断结果等。 ```html <div class="header"> <h1>个人健康档案</h1> <span>用户:王五</span> <button>退出</button> </div> <div class="sidebar"> <ul> <li>病历查询</li> <li>预约挂号</li> </ul> </div> <div class="content"> <table> <tr><th>日期</th><th>医生</th><th>诊断结果</th></tr> <tr><td>2023-01-01</td><td>张医生</td><td>感冒</td></tr> </table> </div> ``` --- ### 住院信息系统流程图 住院信息系统的核心流程包括入院登记、床位分配、费用结算等环节[^5]。以下是流程图的简要描述: 1. **患者入院**:录入患者基本信息,分配床位。 2. **住院期间管理**:记录每日诊疗情况、药品使用情况。 3. **出院结算**:计算住院总费用,生成结算单。 ```mermaid flowchart TD A[患者入院] --> B{分配床位} B --> C[住院期间管理] C --> D[出院结算] ``` --- ### 住院电子病历界面设计(医生端/护士端/病人端) #### 医生端 医生端需支持详细记录患者的住院诊疗过程。 - **顶部导航栏**:显示患者基本信息。 - **左侧菜单栏**:包括“住院概览”、“诊疗记录”、“用药记录”等功能。 - **中间内容区域**:提供诊疗记录表单和用药记录表单。 ```html <div class="header"> <h1>住院病历管理系统</h1> <span>患者:赵六(女,40岁)</span> </div> <div class="sidebar"> <ul> <li>住院概览</li> <li>诊疗记录</li> <li>用药记录</li> </ul> </div> <div class="content"> <textarea placeholder="请输入诊疗记录..."></textarea> <input type="text" placeholder="药品名称..."> <button>保存</button> </div> ``` #### 护士端 护士端需支持记录患者的日常护理情况。 - **顶部导航栏**:显示患者基本信息。 - **左侧菜单栏**:包括“体温记录”、“血压记录”等功能。 - **中间内容区域**:提供护理记录表单。 ```html <div class="header"> <h1>护理记录管理系统</h1> <span>患者:孙七(男,50岁)</span> </div> <div class="sidebar"> <ul> <li>体温记录</li> <li>血压记录</li> </ul> </div> <div class="content"> <input type="text" placeholder="体温..."> <input type="text" placeholder="血压..."> <button>保存</button> </div> ``` #### 病人端 病人端需展示住院期间的关键信息。 - **顶部导航栏**:显示用户信息。 - **左侧菜单栏**:包括“住院详情”、“费用明细”等功能。 - **中间内容区域**:以表格形式展示住院期间的费用明细。 ```html <div class="header"> <h1>住院费用查询系统</h1> <span>用户:周八</span> </div> <div class="sidebar"> <ul> <li>住院详情</li> <li>费用明细</li> </ul> </div> <div class="content"> <table> <tr><th>项目</th><th>金额</th></tr> <tr><td>床位费</td><td>100元</td></tr> </table> </div> ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值