好想哭!微信视频号推荐大赛,居然输在了内存问题上!

微信大数据挑战赛决赛方案:微信视频号推荐算法 结束了深圳腾讯滨海大厦之行,回来忙完手头的工作,写一写这次参赛的解决方案。参加这次比赛,一方面是题目比较有意思,在微信视频号场景下的多目标预测(推荐)问题,跟真实工作场景比较匹配,另一方面,源于对清华大学刘强老师的无条件支持。这次故地重游,见到了老友,感慨颇多。 不废话了,接下来由我来分享一下我在微信大数据挑战赛中方案。 我将从赛题理解、模型设计、创新与实用、总结与思考等方面进行介绍。那么... 阅读详情

文章来自:炼丹笔记

作者:一元

背景

    微信大数据挑战赛,已经进入复赛阶段,近亿级别的数据带来了很多挑战,很多暴力的方式去跑GBDT类的模型都产生了瓶颈,有些NN模型也是在暴力之下出现了很多训练问题。

    很多朋友都会发现,修改embedding的大小能对深度模型带来非常大的影响,往往越大的embedding能带来更佳的效果,但是却因为Embedding内存的问题,没法直接用,或者只能采用Hash Trick的技巧来弥补,真的是遗憾啊,太遗憾了,想哭。不急不急,本文就带大家一起学习一下Embedding的内存问题的一种解法。

    现代的基于深度学习的推荐系统利用了成百上千种不同的类别特征(Categorical Features),每一种分类都有数百万种,从点击到发布。为了符合类别数据中的自然多样性,Embedding将每个类别映射到嵌入到一个稠密的向量中。由于每个类别特征可能包含上千万个不同的可能类别(例如电商的商品个数很多都是上亿的),因此嵌入表在训练和推理过程中会出现内存瓶颈。

    本文提出了一种新的方法,利用探索类别集合的互补划分为每个类别生成一个唯一的嵌入向量。基于每个互补分区存储多个较小的嵌入表,并结合每个表中的嵌入,可以以较小的内存开销为每个类别定义一个唯一的嵌入。这种方法可以解释为使用特定的固定码本(codebook)来确保每个类别的表示的唯一性。实验结果证明了该方法对于减少嵌入表的大小在模型损失和精确度方面的有效性,同时在参数上保留了相似的减少。

商余数技巧

01


问题

每个类别被映射到一个embedding向量表,数学上就是, 我们令

表示的枚举。我们令为对应的Embedding矩阵, 是Embedding的维度。

我们将每个类别(都有一个索引, 然后我们将其映射到一个dense向量中, ,

存储Embedding的空间复杂度为:。

02


解决方法

2.1 Hash Trick

    为了降低embedding表的存储代价,最为常用的策略就是使用简单的hash函数。例如求余函数,hashing trick ,给定一个embedding表, , 我们有, 我们可以定义一个hsh矩阵,

我们的Embedding可以通过下面的方式得到:

对应算法如下:

    该方法将原始embedding矩阵的大小从降低为, 因为,但这么做会将非常多不一样的类别映射到同一个embedding向量,导致模型的质量大大下降,当然这么做也没法为每个类别变量产出一个唯一的embedding向量。
2.2 quotient-remainder trick

    我们令""表示正数除法, 或者是商操作, 使用两个互补的函数:一个正数商,一个余数函数,这么做我们就可以得到两个单独的embedding表,这么做我们就可以对每个类使用唯一的embedding向量进行唯一的表示。

更加严格的说是,我们定义两个embedding矩阵,, , 我们再定义一个额外的Hash矩阵,

最终我们得到我们的Embedding:

其中: 表示element-wise相乘, 这么做我们的空间复杂度为:

03


互补分割

    为了能使在类别集合中的每个元素产出它对应的唯一表示, 甚至可以通过大量的分割。使用基本的集合论,我们将这个概念形象化为一个notion,我们将其称之为互补分割(complementary partitions), 我们令表示由分割关于引入的等价类。

定义:给定集合的集合分割,如果对于所有的, 如果,存在使得,那么我们说集合分割是互补的。

    注意,给定分区的每个等价类都指定一个映射到嵌入向量的“bucket”。因此,每个分区对应于一个单独的嵌入表。在互补分区下,每个分区产生的每个嵌入通过某种操作组合后,每个索引映射到一个不同的嵌入向量。

3.1 一些例子

对于一个给定的, 我们将集合;

  1. 原始的互补分割: 如果,从定义看就是一个互补分割,这对应一个full Embedding表;

  2. 商余互补分割:给定, 这两个分割为:

  1. 泛化的商余互补分割:给定,对于,有,那么我们就可以递归地定义互补分割:

其中, 对于我们有;

  1. 中国余数分割:考虑成对互质分解大于或等于, 也就是对于,我们有 ,同时对于所有的, 我们有, 于是我们可以定义互补分割, 对于所有的:

    更加抽象的, 我们还可以根据应用程序定义更多的互补分割。回到我们的汽车例子,我们可以根据年份、品牌、类型等对其进行定义分区。假设这些属性是唯一规范的,能对应一辆独一无二的汽车,那么这些分区确实是互补的。

04


使用互补分割构建合成Embedding

    对于每个分割,我们构建一个embedding表, 这样每个等价的类被映射到一个embedding向量,这些embedding可以通过一些操作进行组合生成一个合成的embedding或者直接作为一个单独的稀疏特征。特征生成的方法虽然高效,但是也会大大增加参数的量。

    更加严谨的,考虑一个类别集合的互补分割,对于每个分割,我们可以创建一个embedding表, ,其中每一个等价的类被银蛇到一个embedding向量(下标为),是关于embedding标的embedding维度。我们令:

将每个元素映射到它对应的等价类的embedding下标, 也就是。

为了生成我们的合成embedding,们将给定类别的每个embedding表中所有对应的嵌入进行交互,以获得最终的embedding向量.

其中是一个操作函数.它可以是:

  • 拼接操作: 假设, 则

  • 加法操作: 假设对于所有的,我没有,那么

  • Element-wise的乘法:假设对于所有的,我没有,那么

假设每个embedding表中的向量为是不一样的, 也就是说对于以及对于所有的, , 如果链接使用被使用,那么对于任意的类别的embedding都是唯一的, 也就是说如果同时, 那么我们有

该方法将空间复杂度从降低为, 假设同时可以被随意选择,这个方法可以得到一个最优的内存复杂度,相较于存储完整的嵌入表相比有了显著的改进。

4.1 基于路径的合成embedding

    生成嵌入的另一种方法是为每个分区定义一组不同的转换(第一个embedding表除外); 特殊地, 我们可以使用一个分区来定义一个初始embedding表,然后通过其他分区确定的函数组合来传递初始嵌入,从而得到最终的嵌入向量.

对于类别集合, 给定互补的分割, 我们定义一个embedding表, , 然后我们定义:

我们令: 将每个类映射为它对应的等价类的embedding的index。为了获得对于类的embedding, 我们可以进行转化:

我们将这种嵌入公式称为基于路径(path-based)的组合嵌入,因为组合中的每个函数都是基于来自每个分区的唯一等价类集来确定,从而产生一个唯一的转换“路径”。这些转换可能包含参数,这些参数也需要与网络的其他部分同时训练。

函数的例子包含:

  1. 线性函数: 如果, 是参数, 那么;

  2. MLP: 我们令为层的个数, 对于, 我们令, , 表示在每一层的节点数,然后如果,...,, , , ... , , 为一个激活函数,

与基于操作的组合嵌入不同,基于路径的组合嵌入需要学习函数中的非嵌入参数,这可能会使训练复杂化。对于线性函数,或者是小的固定大小的MLP,我们还是可以获得的复杂度。

实验

01


合成特征


  • 当使用阈值化时,结果更加细微,性能的提高取决于所考虑的操作。特别是,我们发现元素级乘法最适合DCN,而级联操作更适合Facebook DLRM。

  • 对于DLRM,我们能够观察到相对于基线的0.7%的误差到0.5%的误差的改善,同时保持了大约4倍的模型尺寸减小。

02


基于Path的合成Embedding


使用较小的网络可能更容易训练,但可能无法充分转换Embedding,而较大的网络可能具有更大的能力适应更复杂的转换,但需要学习更多的参数。

01


权衡的讨论

  • 商余trick可以对类别数据施加任意的结构,这会在内存和效果上产生一个trade-off。一个更大的embedding表可以带来更好的效果, 但也会增加非常多的内存消耗。大多数模型的性能随着参数的数量呈指数级下降。

  • 这两种类型的合成嵌入通过在生成每个类别的嵌入时隐式地强制执行由互补分区定义的某些结构来减少参数的数量。因此,模型的质量应该取决于所选的划分反映范畴集及其各自嵌入的内在属性的紧密程度。

  • 基于路径的组合嵌入也可以产生更具计算性的模型,其优点是模型复杂度较低,但是基于路径的组合embedding不能取代基于operation的组合embedding;

小结

    本文采用quotient-remainder的技巧降低高基数类别在Embedding表中出现的内存瓶颈。缓解了Hash Trick等技术带来的冲突问题,使得我们每次都可以得到一个唯一的embedding表示。

    这种技巧虽然可以令每个类别获得唯一的embedding向量表示,但是中间存在多个约束(相乘,取余等必然会导致拆解的多个embedding之间出现共享),所以这种约束会对模型最终的影响是多少,仍然是一个值得思考的问题。比如拆解为两个embedding矩阵表示和10个embedding矩阵表示,虽然节省了内存,但是最终的效果也会下降很多,如何设计既能缓解冲突又能尽可能维持效果是一个值得探讨的问题。

参考资料

  1. Compositional Embeddings Using Complementary Partitions for Memory-Efficient Recommendation Systems:https://arxiv.org/pdf/1909.02107.pdf

觉得还不错就给我一个小小的鼓励吧!

推荐大赛如何在一周时间内打进决赛 作 者:十方 公众号:炼丹笔记一、前言十方又拖更一周了,这周拖更的原因,主要是参加了鹅厂内部的推荐大赛,而且是直接做B榜进了前十(具体名次就不说了,怕被认出来)。这篇主要给大家讲讲,如何快速在数据比赛中拿到一个好名次。本篇不同于以往分享比赛冠亚军方案的文章,本篇是讲方法论的,喜欢做比赛却一直拿不到好名次的可以耐心地看下这篇。为什么看了很多冠亚方案,抄袭了很多冠亚的特征,也用了xgb,lgb,却... 阅读详情

相关推荐

推荐算法竞赛TOP方案合集

作 者:九羽 公众号:炼丹笔记推荐算法竞赛相关 会议赛(一)2020 ACM Twitter RecSys Challenge问题背景:Twitter上呈现的是正在发生的事情,也是人们现在谈论的话题。在Twitter上,随着对话的展开,生活变得生动起来,向你展示故事的方方面面。从突发新闻和娱乐到体育、政治和日常兴趣,当世界上发生的事情,它们首先发生在推特上。 在这个平台上,用户发布和参...

炼丹笔记 2781

比赛推送:ML/NLP/推荐/CV,一大波比赛来袭!

微信大数据挑战赛 微信视频号推荐算法比赛链接:https://algo.weixin.qq.com/ 赛题描述 本次比赛基于脱敏和采样后的数据信息,对于给定的一定数量到访过微信视频号“热门推荐”的用户, 根据这些用户在视频号内的历史n天的行为数据,通过算法在测试集上预测出这些用户对于不同视频内容的互动行为(包括点赞、点击头像、收藏、转发等)的发生概率。 本次比赛以多个行为预测结果的加...

yanqianglifei的专栏 618

微信视频号推荐算法方案分享

基于脱敏和采样后的数据信息,对于给定的一定数量到访过微信视频号“热门推荐”的用户, 根据这些用户在视频号内的历史n天的行为数据,通过算法在测试集上预测出这些用户对于不同视频内容的互动行为(包括点赞、点击头像、收藏、转发等)的发生概率。本次比赛以多个行为预测结果的加权uAUC值进行评分。该数据包含了视频(简称为feed)的基本信息和文本、音频、视频等多模态特征:该数据包含了用户在视频号内一段时间内的...

炼丹笔记 3785

微信视频号推荐算法

导语:最近看了一眼微信视频号推荐算法的时间安排,初赛马上就要结束了,作为一个打工人,工作日自然要好好工作,划水是万万不能的,因此满打满算就只有剩下的2个周末可以动手实践了,现在数据集还没有下载,干看着赛题数据描述,简单构建一下思路,主业信贷风控模型,推荐算法是个彻底的小白,这次就纸上谈兵一下,后续再与TOP方案做深入对比,看自己思考得是否全面合理,本文以供查缺补漏,拟合大佬之用 整体框架 具体内容 见知乎:https://zhuanlan.zhihu.com/p/380637348 或者微信公众号:h.

I was young,I need more experience 1128

vMix、OBS与DingCaster导播选型实战指南

导播软件不是单纯的功能比拼,而是面向真实直播场景的系统性工程决策。理解vMix的硬件隔离机制、OBS的插件化神经网络架构、DingCaster的中文工作流深度适配,是构建稳定直播系统的前提。其技术价值在于将信号接入、NDI协同、多平台推流、实时字幕同步、绿幕抠像等关键链路,从‘能用’提升至‘敢签保底协议’级别。广泛应用于教育远程答辩、企业发布会、电竞赛事、政务直播及社区科普等多元场景。本文基于67场真实直播验证,聚焦2026年4K/NDI/双推流/本地化字幕等核心需求,提供可落地的选型逻辑与故障应对方案。

weixin_33980459的博客 371

2021微信大数据挑战赛总结(微信视频号推荐)

赛程持续大概了两个多月的时间,从笔者临近毕业到工作,算是学生时代最后一个比赛吧,遗憾的是成绩并不是很理想,最后只拿到了国二,到了复赛阶段又是被迫solo的局面。复赛期间体会到了在职人员的不易,白天上班,晚上熬夜打比赛,真的太难了┭┮﹏┭┮。最后,做为学生时代的“收官之赛”,还是在此记录下比赛过程中学习到的知识,感谢周周星的分享以及大佬们无私的开源,努力向前排优秀选手学习。 一、赛题描述 此次比赛基于脱敏和采样后的数据信息,对于给定的一定数量到访过微信视频号“热门推荐”的用户, 根据这些用户在视频号内的历.

Wisley的读书笔记分享 4404

微信大数据推荐算法比赛

2021中国高校计算机大赛-微信大数据挑战赛Baseline 本次比赛基于脱敏和采样后的数据信息,对于给定的一定数量到访过微信视频号“热门推荐”的用户,根据这些用户在视频号内的历史n天的行为数据,通过算法在测试集上预测出这些用户对于不同视频内容的互动行为(包括点赞、点击头像、收藏、转发等)的发生概率。 本次比赛以多个行为预测结果的加权uAUC值进行评分。大赛官方网站:https://algo.weixin.qq.com/ 1. 环境配置 pandas>=1.0.5 tensorflow>=1.

qq_42397330的博客 2223

3天干完6个月的活,Claude把模型搬上AMD

一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。

DeepPing,日更,陪你聪明看世界。 445

微信大数据挑战赛 亚军方案--如何用baseline上724+

“大数据挑战赛”是以产学合作为主导,由清华大学联合企业承办,以企业真实场景和实际数据为基础,面向全球开放的高端算法竞赛。

m0_63642362的博客 1302

手把手教你配置SAP EWM HU类型及号段分配(含常见错误排查)

本文详细介绍了SAP EWM系统中HU类型及号段分配的配置方法,包括环境准备、包材主数据配置、存储类型关联及号段管理。通过实战案例和常见错误排查,帮助用户高效完成HU配置,提升仓储管理效率。重点讲解了EWM后台配置和号段配置的关键步骤与技巧。

weixin_33670786的博客 444

Python 爬取网页文字并保存为 txt 文件教程

将要爬取的网页网址赋值给变量url。

2403_89537385的博客 2791

本硕非科班,单模型获得亚军!

Datawhale干货作者:周远哲,斯特拉斯堡大学硕士我的本科与硕士都是非科班,几乎没有相关的基础。 接触机器学习竞赛的半年左右的时候参加了去年kaggle规模最大的jane stre...

Datawhale 861

【Docker】搭建一个媒体服务器插件后端API服务 - MetaTube

本教程基于群晖的NAS设备DS423+的docker功能进行搭建,DSM版为 7.2.1-69057 Update 5。MetaTube是一个媒体服务器插件,主要用于Emby和Jellyfin媒体服务器。它的主要功能是从互联网上抓取内容并响应 JSON 数据,然后通过预安装的 MetaTube 插件请求服务器并下载相应的元数据,以与 Jellyfin/Emby 服务器配合使用。使用 MetaTube 的步骤大致如下:部署后端:首先,需要部署一个名为​ 的后端 API 服务器来抓取内容。

小小笔记大大用处 1万+

刘昊天:以数据思维助力工程实践 | 提升之路系列(十一)

导读为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的“π”型人才,由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组...

数据派THU 995

一种4位sar adc仿真验证

4位sar adc采用下图的电容阵列,电路如下图:所有电容的正端(也称为上极板)与比较器的反相端连接,比较器同相端接Vin,其工作过程进行大致分析见之前的文章《一种4位sar adc工作过程推导(三)》,下面对这个电路进行仿真验证。 两个参考电压VrefPV_{refP}VrefP​和VrefNV_{refN}VrefN​,V+=VinV_{+}=V_{in}V+​=Vin​,假设1116(VrefP−VrefN)+VrefN<Vin<1216(VrefP−VrefN)+VrefN\frac{

大学生视野 1955

编译原理2024期末复习(面向做题,大题速学)【太原理工大学】

归约-归约”冲突就是在项目集规范族一个状态中两个。

m0_63181421的博客 1万+

CnOpenData 线上招聘网站信息数据

CnOpenData线上招聘网站信息数据库是一个覆盖中国主流招聘平台、时间跨度长、更新频率高的劳动力市场需求侧大数据集合。本数据库汇集了,为学术界和业界提供了一扇实时观察中国劳动力市场动态的窗口。

CnOpenData_wj的博客 2666

Unity3D 集成 SQLite 数据库实战:从零搭建到数据可视化

本文详细介绍了在Unity3D项目中集成SQLite数据库的完整实战流程。从SQLite的轻量、稳定、易用特性讲起,逐步指导开发者完成环境配置、驱动集成、C#脚本编写(涵盖连接、建表、增删改查),并进阶演示了数据模型封装与在Unity UI中实现数据可视化的方法。最后提供了多线程访问、路径差异、性能优化等关键避坑指南,帮助开发者构建可靠高效的本地数据管理方案。

weixin_29291069的博客 96

通知 | 2021 中国高校计算机大赛 —— 微信大数据挑战赛

2021 中国高校计算机大赛 —— 微信大数据挑战赛通 知2016 年,教育部高等学校计算机类专业教学指导委员会、教育部高等学校软件工程专业教学指导委员会、教育部高等学校大学计算机课程教...

数据派THU 9061

微信小程序 - 强力解决wx.getLocation定位不准的问题,如何修正微信小程序wx.getLocation获取用户位置信息不准确解决办法(高精度定位还是不够精准,定位不准有偏差,彻底消除误差)

如何解决getLocation定位偏差的问题?微信小程序API—wx.getLocation定位不准的问题,微信小程序wx.getLocation获取用户位置信息不准确解决办法,解决微信小程序wx.getLocation定位不准的问题,定位不准确,实际位置偏差大,相差几公里,微信小程序wx.getLocation获取用户位置信息不准确解决办法,关于微信小程序获取准确定位的方法及解决定位不准确的问题,偏差太多好几百米,wx.getLocation 返回定位精度不准问题,如何消除这个误差,开启高精度定位依旧有误

🏆 前端领域优质创作者 1万+

Agisoft Metashape 基于RTK技术的无人机航测免像控技术流程

利用无人机进行航空摄影测量,其使用方便、快速获得成果,已经是测绘行业外业生产的主要方式。RTK定位系统的出现,其厘米级的定位系统,使得航测无人机在作业时,能够准确获取拍照时的GPS位置,能够大量减少像控点,即使不使用像控点也能满足规范对精度的要求。可以有效解决特殊地形(如山川、峡谷、河流、沼泽、水库等)外业人员很难布设像控点的情况。

penglu366366的博客 2189

基于点击率预估的推荐&视频点击预测大赛20名分享

基于点击率预估的推荐 传统方法的局限 推荐系统的传统方法很多如协同过滤等其实很难用于生产的系统 面对海量的用户数据时,协同过滤不能很好地解决数据稀疏性的问题和满足实时性的要求。 当一个系统如电商平台的用户数据过多时,大部分用户都是非活跃用户,非活跃用户点击的商品也很少,构建矩阵时矩阵会非常稀疏,难以确定与用户相似的其他用户,也难以确定与用户点击商品相似的其他商品。 另外,协同过滤每次都要实时计算所...

sherpahu的博客 1569

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 182

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【第 009 讲】全面掌握 Python 注释:注释的定义与作用 | 单行注释 | 三引号与多行注释 | 注释使用的最佳实践

本文系统讲解 Python 注释的完整知识体系:从注释的定义与作用讲起,梳理单行注释的书写位置、临时屏蔽用法与 PEP 8 排版规范,剖析注释被忽略的底层机制;进而说明三引号字符串的本质与嵌套问题;最后给出注释使用的三条实践原则,帮助读者写好可读性高的注释。

大模型全栈工程师 · Thanks_ks 1053

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 436

Python 的 yield from 到底转发了什么:拆开 send、throw 和那个 return 值

很多人把yield from记成「省一层 for 循环的语法糖」。写和写,结果看着一样,于是就当它只是少敲几个字。这个理解会在三个地方翻车:调用方.send()的值送不进去、子生成器return的值拿不到、异常和close()传不下去。yield from真正做的事是,外层生成器退成一个透明通道。本文所有输出来自本机 CPython 3.13.14 实测。yield from不是循环,是委托——nextsendthrowclose四个方向的流量全部直通子生成器,并且子生成器return。

小小张说故事的博客 152
上一篇: 谷歌出品!机器学习常用术语总结
下一篇: 美!最常用的10个激活函数!
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值