从推荐算法出发,谈谈题库个性化推题思路

YTY
6 评论 4971 浏览 74 收藏 38 分钟

个性化推荐、算法推荐这类概念已经在互联网产品中十分常见,那么,我们是否可以将个性化推荐概念应用到在线学习领域,借助个性化推荐来提高学习效率?这篇文章里,作者谈了谈题库个性化推题思路,一起来看一下。

在线教育提供了丰富的学习资源,也留下了大量学习者的学习数据,如何据此实现个性化推题来提高学习效率是个值得研究的课题。本篇文章先以抖音为例研究了一下推荐算法的思路,再把思路应用到题库的个性化推题中。

为什么选择了抖音?提到推荐算法,大部分人脑中闪过的第一个词可能就是“抖音”,抖音容易让人上瘾靠得就是推荐算法。

根据 Question Mobile 数据显示,2023 年 9 月的抖音人均单日使用时长从 2022 年 9 月的 108.4 分钟提升至 115.2 分钟。

一、推荐算法是什么

我们在抖音的产品表面能看到的就是每次上滑的时候,都能刷出一个系统觉得你喜欢的视频。那么推荐算法是什么呢?

一句话来说,推荐算法就是把合适的内容推送给合适的人

这个流程中体现出了三个过程:

  1. 断物:让算法识别物料
  2. 识人:让算法识别人
  3. 推荐:匹配合适的内容和人

要让推荐系统识别用户和物料并建立连接,需要将用户和物料向量化——打标签。所以在推荐前的准备工作,就是建立标签体系,并给物料和用户都打上标签。

二、断物:给物料打标签

断物指的就是系统把物料进行分析、归类、打标签。对于电商平台来说,物料就是商品;对于文章资讯平台来说,物料就是文章;对于题库来说,物料就是试题。

1. 标签类别

物料标签可以分为分类标签内容标签

  • 分类标签:主要是根据个业务的特点定制一套体系框架,将每个物料映射到框架中。比如谷歌的分类体系;
  • 内容标签:描述主体内容的开放式词汇集,很难提前制定完备的体系枚举出每个词汇,往往是一个无穷的集合。

分类标签和内容标签的区别:

分类是一种严谨的数据组织方式,一般按照一个或多个维度自上而下、从整体到明细的穷举,遵循“相互独立,完全穷举”的原则。而内容标签是一种灵活的数据组织方式,放弃大而全的框架。

简单来说,一个物料只能属于一个分类,但是可以拥有一堆内容标签

2. 视频怎么打标签

打标签最基础的方式就是靠人工,但是内容量过大时,人工打标签效率会很低,所以需要机器来辅助,实现自动打标签。怎么自动给视频打标签呢?

一般采用的是对视频封面图、关键帧图片进行图像识别,提取音频分析,提取字幕、视频介绍等对文字进行分析,从中抽取出标签,然后将得到的标签进行整合,得到视频的标签。

参考链接: 爱奇艺短视频智能标签生成实践

三、识人:建立用户画像

在建立用户画像之前,我们仅有用户的行为数据,这些无法直接用于数据分析和模型训练,所以需要将用户的行为日志进行处理,然后标签化,这样我们对用户就有了一个直观的认识,同时计算机也能够理解用户,将用户的行为信息用于个性化推荐、广告精准投放等领域。

用户标签按生成方式来划分包括三种:事实类标签、模型类标签、预测类(基于机器学习挖掘)类标签。

1. 事实标签

事实标签也叫统计标签,是根据实际发生的原始数据统计得到的(原始数据包括网站/app 日志、用户填写的表单、消费数据等等)。事实标签构成了用户画像的基础,也是数量最多的一种标签。

比如:

  • 人口属性:性别/年龄/城市
  • 最近 7/30/90 天购买次数
  • 首次购买时间
  • 每天登录次数
  • ……

2. 模型标签

模型标签以事实标签为基础,按照指定规则生成,用于对用户分群。该类标签与业务紧密结合,通常由数据人员和业务人员配合完成。

比如:

  • 按购课类型:软考、法考考生;
  • 按活跃度:高活跃、中活跃、低活跃;
  • 按消费:RFM 用户分群模型(Recency、Frequency、Monetary)

按转化:AARRR 转化模型中从获取的用户到推荐的用户分为五层。

3. 预测标签

预测标签通过机器学习挖掘产生,用于对用户的某些缺失的属性或某些行为进行预测判断。例如:根据根据用户的行为数据预测用户的性别,用户的消费习惯判断其对某商品的偏好程度等。

这类标签是通过概率模型产生,概率是介于 0-1 之间的数值。根据用户消费过的内容(文本、图片、视频、商品等)数据,机器自动学习出用户兴趣、喜好等标签及其概率,通过全面、完整、细致地标签化来生成用户的个性化特征。

比如:

小明的预测标签:「汽车:0.1」,「宠物:0.8」,「航拍:0.7」

四、推荐流程

有了视频的标签和用户的画像之后,我们就可以通过推荐算法去匹配视频和用户了。上面小明的兴趣标签「汽车:0.1」「宠物:0.8」「航拍:0.7」,我们可以直接给用户推荐宠物内容的视频吗?

在刷抖音的时候我们也能发现,每次滑动的时候推的往往不是固定的一个主题,即使同一个主题下面不同的视频也会有个先后顺序,所以我们需要有一个量化的方式来计算用户对哪个视频的喜爱度更高。

因为抖音是要给用户推他最可能喜欢的视频,而用户在看视频的过程中发生的任何互动都能代表用户对视频的兴趣,比如点赞、评论、不喜欢等等,所以抖音假设用户看一个视频产生的价值等于用户在这个视频上发生的所有互动价值的总和

举个例子:小明打开抖音,默认进入了推荐 tab,有一个视频在自动播放。小明很喜欢这个视频,在看的过程中给视频点了个赞。

这个过程中有两种互动——观看&点赞。用户在观看视频时的每一次互动都有正面或者负面的价值,那么这次行为里面「小明观看视频」这件事情的价值是什么,「小明点赞」的价值又是什么呢?

1. 价值模型

在抖音平台中,互动的价值主要分为这样几种:

  • 用户价值:为当前视频被推给的用户创造的价值,主要是当前用户的时长、留存、满意度等。
  • 作者价值:为视频的作者创造的价值,包括作者获得的流量、互动、收入等。
  • 平台价值:为平台创造的价值,包括品牌效应、内容安全、平台收入等。
  • 间接价值:本次视频的播放间接产生的价值,如评论后其他用户收到通知可能提升其他用户的留存,对内容生态产生的影响等。

用户的每次互动,都可能带有上面的一种或多种价值。

想要衡量发生互动的价值,我们需要引入价值模型(V)。我们以点赞互动为例,用V_{like}来表示点赞的价值模型,来看一下小明这次点赞会产生哪些价值。

首先来拆解一下「小明点赞」这个行为有上面哪些价值:

用户价值:

  • 小明给这个视频点了赞,说明小明喜欢这个视频,所以这次点赞应该有正面的用户价值(公式中的 1);
  • 视频被点赞的次数(u_like_cnt)越多,再点赞时的用户价值越高,因为喜欢的人多,所以给高赞视频点赞的价值更高(这样可以保证其他参数都相同时,优先推点赞数高的视频);
  • 小明今天对这一类视频已经点过了好多次赞(same_tag_today),点的赞越多越可能产生审美疲劳,这次点赞的用户价值也会变得越低,所以点赞也会有一个负向的价值;

作者价值:

小明点赞增加了这个视频的点赞数,对作者有激励作用,特别是在低赞(is_like_lower_than_100)的时候,所有点赞也有作者价值;

平台价值:

如果视频是骗赞视频(is_like_bait),给它们过多的赞可能影响整体生态,所以在骗赞视频上的点赞可能会有负向的平台价值。

所以:

V_{like}=1 + u_like_cnt*0.01 – same_tag_today*0.5 + is_like_lower_than_100*10 – is_like_bait*100

由上面公式可以看出,同一个用户给不同的视频点赞产生的价值是不同的,不同的用户给同一个视频点赞产生的价值也是不同的

价值模型是对应该给用户推荐什么视频的理解,计算方式不是一成不变的,需要反复优化参数和权重,才能达到最好的效果。对价值模型做优化,需要把每个互动的价值分解清楚,从而最大化视频推荐获得的收益。

理解了价值模型之后,再看开头的例子,小明看过视频,点过赞,没有发生其他互动。那么这次视频观看的实际价值就是:

如果小明还做过其他互动呢?短视频中都包括哪些互动方式——播放、点赞、收藏、评论、分享、不喜欢、关注作者等,前面提过用户看一个视频产生的价值等于用户在这个视频上发生的所有互动价值的总和,所以总价值:

2. 预测模型

我们应该给用户推送价值最高的视频。但是我们给用户推送视频的时候,互动还没有发生,我们怎样去计算实际产生的价值呢?

我们要预测视频推送给用户之后每个互动发生的概率,用价值的期望值来替代实际发生的价值来衡量。因此需要引入预测模型(P)。

预测模型是在排序时预测一切未知的事情发生的概率的模型。预测模型一般是机器学习模型,它们用视频和用户相关的数据做输入,输出一件事情发生的概率。模型的输入叫做特征,输出叫做预估。

常见的预测模型包括两类:

  • 预测是否发生:点赞、评论等互动是否会发生,有多大概率发生;
  • 预测实际值:播放时长、个人页停留时长等;

预测模型的输入特征可以分成这样几部分:

  • 用户相关信息。如用户 id、用户地域、用户历史互动统计、用户最近看过的视频 id 列表等。
  • 视频相关信息。如视频 id、视频时长、视频贴纸、视频内容、视频互动统计等。
  • 作者相关信息。如作者 id、作者粉丝数、作者历史统计等。
  • 其他信息。

预测模型是个性化的,比如点赞模型预测的是当前用户在当前场景下,看到当前视频,点赞的概率。同一个视频,对于不同的观看者或在不同环境下的同一个观看者,预测出的概率也是不同的,拿一个明星视频举例:

  • 这个明星的粉丝和非粉丝点赞的概率是不同的;
  • 这个明星的粉丝,在刚打开抖音时看到这个视频和已刷腻快要退出的时候看到这个视频,点赞的概率也是不同的。

3. 排序公式

推荐系统的目标就是把价值最高的视频推给用户,引入预测模型(P)后,我们用期望值来代替实际发生的价值,所以价值公式就变成了样子:

根据这个公式把候选集里的视频分别计算一下,按分值大小排序,分值最高的就是下一个要推荐给用户的视频。

4. 筛选视频

抖音有几十亿条视频,我们不可能直接把全部的视频按上面的公式跑一下,计算出最高值的视频作为下一个推荐的内容,因为数据量太大了。那么怎么从中选择出来要推荐的视频呢?

直接从大池子里捞不现实,所以预先会维护一个小池子,可以叫推荐池。推荐池对所有用户是几乎完全一致的,通常包括比较新的视频和表现比较好的老视频。

用户每次请求推荐流时,推荐服务会从推荐池中通过多个召回源初步选取几千或者上万个视频,再用上面的公式进行计算。

召回源主要分两种:

  1. 基于模型的召回:给推荐池中全部视频按照模型打分排序,选择得分最高的视频,比如 like 模型-召回用户最可能点赞的视频。
  2. 基于属性的召回:根据用户的属性,召回一系列视频,比如同城召回、好友召回等等。

比如:

  • 点赞召回 100 个视频:视频 A1(预测点赞概率 32.5%)、视频 A2(27.4%)、视频 A3(27.1%)…
  • 同城召回 300 个视频:视频 B1(丰台区)、视频 B2(西城区)…
  • 好友召回 10 个视频:视频 C1(好友 A 发布)、视频 C2(好友 B 发布)…
  • ……

所有召回的视频形成一个序列,就可以用上面的公式计算得分来排序了。

5. 效果评估

怎么评估排序的效果好不好呢?主要是两个步骤:

第一步:离线评估

在离线准备好的验证集上进行数据验证,如果效果优于先前的模型数据,则进行第二步,这里的效果包含多个指标,比如准确率、覆盖率、多样性等,在不同阶段侧重的指标也许是不一样的,这个就是产品经理要去把控确定的,当前这一产品阶段侧重点在哪里或者是怎么去取舍平衡。

第二步:线上实验

直接对于线上用户进行 AB 分桶实验,先小流量实验一段时间,一般在 10 天到半个月左右,对比实验组和对照组数据;如果实验数据为正向,则推到更多的用户;如数据持续稳定,则推全到所有用户。

🔔抖音的推荐流程中哪些思路可以用在教育中?

抖音推荐流程中的核心在于对不同互动价值的拆解,并且可以根据战略发展重心来不断调整计算公式中的参数和权重。这个思路是可以借鉴的。

五、题库个性化推题

个性化推题是个性化学习中的一个环节。个性化学习是个比较大的概念,它可以根据学员设定的目标和可投入时间生成符合学员自身诉求的个性化学习路线,让“学-练-背-考”各个环节都适应学员自身。我们本次只针对学员在题库练习中的智能推题部分。

俗话说,他山之石,可以攻玉。从上面抖音的推荐流程,我们可以推理出题库中的题目推荐流程,实现学员的个性化学习。

推题的逻辑按以下几个步骤:

  • 打标签:给题目和用户打标签,建立用户的能力模型;
  • 筛选题目:通过多种召回方式,从题库的所有题目中召回可能适合当前学员的一些试题;
  • 读取数据:读取学员的基本信息、学习水平、学习进度、学习偏好、学习目标等数据和题目的标签数据;
  • 计算得分排序:通过模型计算候选集中对学员提升知识点掌握水平最高的试题作为下一个推荐的目标;
  • 收集反馈:收集学员的作答结果和定性反馈,评估效果,不断迭代优化模型中的参数。

1. 题标签

💡对题目来说,最主要的标签就是知识点,但是让机器去理解题目考查的知识点内容比较困难,也不够准确,所以主要采用人工打标签的方式,靠教师专家去标注知识点。

题目标签的维度:

  • 学科:法考、软考、考研英语等;
  • 内容:知识点;
  • 类型:选择题、填空题、主观题等;
  • 能力:记忆、理解、分析、创造等;
  • 难度:1、2、3 或简单、中等、困难;(题目难度是对学员能力水平的衡量,难度标签可以在创建题目时人工创建初始值,在实际使用的过程中,根据学员作答情况去修正)
  • 区分度:题目对学员的区分能力,区分度高的试题能更好地将不同水平的考生区分开;(题目的区分度靠机器根据题目对学员的区分情况自动生成)

2. 用户标签->能力模型

考试类学科用户的能力体现在什么地方——体现在对知识点的掌握,对所有知识点的掌握水平越高,考试的时候就越容易考高分。

但知识点依托于题目,我们没办法直接得到学员对知识点是否掌握,只能通过学员作答题目的情况来分析他对知识点的掌握情况。学员对某个知识点的掌握水平越高,答对对应题目的概率就越高

如上图,横坐标表示学员对知识点的掌握水平,纵坐标是答对某题的概率,随着学员对知识点掌握水平提高,答对概率会无限趋近于 1。

除了知识点掌握水平,还有哪些因素影响学员作答是否正确呢?

一是题目的猜测系数。做题的时候除了答对,还能蒙对,比如不会就选 C。猜测系数是哪怕学员掌握水平极低,纯凭猜测也有答对题目的概率(我们用c表示),在图中的表示就是曲线和纵轴的交点。对于四个选项的单选题来说,猜测系数就是0.25。

二是题目的难度。同一个知识点下有不同难度的题目,学员对知识点的掌握水平相同的情况下,答对的概率也不一样,题目的难度越高,答对的概率就会越低,如下图。(题目的难度我们用d来表示)

题目的难度是反映答对题目所需要的对知识点的掌握水平,这是同一个维度的东西。从上图中可以看出,学员对知识点的掌握水平和题目难度相等的时候,答对题目的概率是 0.5。

这个 0.5 的含义不是说学员每次作答时一定有 50%的几率答对问题,而是表示在学员能力和题目难度匹配的情况下,通过大量重复试验,学员答对和答错的机会是相等的,就和抛硬币一样。

第三个因素是题目的区分度(我们用a来表示)。题目的区分度越高,我们越能区分出不同掌握水平的学员。表示在图上就是曲线拐点处的斜率,区分度越高,斜率越大,学员对知识点的掌握水平提升一点,答对的概率会提升很多。

我们用什么公式来表示上面图中的曲线呢?因为答对题的概率:

所以采用逻辑回归函数表示。

💡逻辑回归的公式如下,这种方式可以把输入的任意 x 值转化为[0,1]之间的数:

那么把上面的知识点掌握水平、题目猜测系数、题目区分度、题目难度代入公式,知识点掌握水平比题目难度高的越多,答对概率就会越高。题目的区分度会放大知识点掌握水平和题目难度的差值。所以题目区分度越高,知识点掌握水平与题目难度的差值与答对概率正相关性越大。

因此学员答对题目的概率:

这个公式就是项目反应理论(IRT)的核心内容。

我们把所有学员对每个题的历史作答记录都放入公式中(答对的题目 P=1,答错的题目 P=0),可以计算出这四个参数,数据越多,计算出的参数的精度越高。

(具体的计算过程比较复杂,可以参考 项目反应理论(IRT)详解 – 知乎 )

有了学员对知识点的掌握程度和题目属性之后,我们就可以将用户要做的题目的猜测系数、区分度、题目难度和学员的知识点掌握水平代入这个公式,来预测用户做对的概率。

3. 需完善的问题

1)能力值的参考

上面这种方式我们可以计算出用户对某个知识点掌握水平的绝对值,但这个值代表的意义是什么?比如用户对知识点 a 的掌握水平是 11.3,没有外显的价值。

外显的内容应该是用户可以直接感受到的,比如考试的预估分。因此,掌握水平的值达到多少可以在考试中取得多少分数,还需要补充其他维度的数据。

这方面可以通过助教的考后服务或者考后估分工具来收集学员在考试中的作答情况,以此与学员的能力模型形成关联,比如:学员 A 掌握知识点 a 的水平 11.3,掌握知识点 b 的水平 5.6…考试中知识点a的题目3题全对,知识点b的题目对1错1…整体考了178分。

数据量大之后,我们就可以建立模型,根据学员对每个知识点的掌握水平结合考试中知识点出现的概率来预测这个学员在考试中能够考多少分

2)学习曲线和遗忘曲线

这个公式只能计算到当前状态下学员对知识点的掌握程度,但学员对知识点的掌握水平不仅会随着学习的过程提高,也会随着时间推移降低。

学习曲线理论:随着持续性的尝试和练习,学员能够习得相关知识。

遗忘曲线理论:随着时间推移,学员对于知识的记忆也越来越差,其知识水平会呈现下降趋势。

所以我们在计算学员对知识点的掌握程度时,需要引入记忆因子和遗忘因子,这是需要完善的地方。

4. 筛选题目

当前现状最多的学科才几千道题,几万道题以内大概率不太需要召回,直接全量跑即可,如果题目多形成题海的话才需要一些召回方式。

在题库中可能会用到的一些召回方式如下:

  • 掌握水平低的知识点对应的题目;
  • 没做过的知识点的题目,完善学员能力模型;
  • 高频考点对应的题目;
  • 其他相似用户在本阶段练习的题目(用户协同);
  • 全站难题易错题;
  • 短期内波动的知识点的题目;
  • 长期未练习的知识点的题目;

5. 计算得分排序

我们应该给学员推什么样的题目?

就和抖音不会直接推用户喜爱度最高的标签的视频一样,我们也不能直接推用户掌握水平最低的知识点对应的题目,这种单一的推荐目标是不合理的。比如一个学员未掌握知识点 a,我们一直给学员推考察知识点 a 的题目,其中可能会包含难度远超出学员水平的题目,导致学员在学习过程中产生挫败感。

💡抖音推给用户的是 ta 喜欢的视频,用户在一个视频上发生的所有互动都能代表他是不是喜欢这个视频,所以抖音通过计算用户在视频上的互动价值之和来推荐值最大的视频。

但在做题的场景下,我们需要考虑的是提升用户对知识点的掌握水平,除了作答这种互动方式之外,其他的比如收藏题目、做笔记都是做完题后置的互动过程,这些对评估掌握水平帮助有限。所以我们不能直接采用每种互动价值加和的方式来计算推送题目的价值。

抖音价值的计算拆解的是互动行为,题库中需要考虑学员在学习过程中的诸多学习需求,因此,我们在做推荐时拆解的是目标,让推荐的题目满足每个目标的价值加和最大。

需要考虑以下三个目标:

  • 复习与探索:不仅需要帮助学员及时查漏补缺,让他们复习掌握水平不高的知识,还需要在合适的时候,即使某些知识未完全掌握,让他们学习新的知识;
  • 难度平滑性:学员知识学习的过程是循序渐进的,推荐题目的难度不应该变化过大,算法需要自适应调整使得被推荐题目的难度更加平滑;
  • 学习热情:在线学习系统需要持续保持学生学习的热情,这是一个比较抽象的概念。一个合理的推荐算法,需要推荐一部分具有挑战性的题目,而保留一些“送分题”给学员,从而使他们保持学习热情。

综合这三个目标,来找出对用户知识点掌握水平提升帮助最大的题目。接下来我们需要把每个目标的价值量化:

1)复习与探索

目标 1 的价值用V1表示。

我们需要全面了解学员对各知识点的掌握水平,所以优先应该推荐学员未做过的知识点。因此,系统推荐新知识点的题目时,赋给这个目标的价值一个正的值:

若学员在每个知识点下均做过题目,优先推其掌握水平低的知识点的题目(还需结合知识点的考频),所以推的题目学员掌握水平越低,价值应该越高。仍然采用逻辑回归公式:

可以控制价值的值在β2到 0 之间;

如果学员答错了当前的题目,我们希望能让用户再次做相同知识点的题目,来确定学员的状态,所以此时推荐系统推荐不同知识点的题目时,给予惩罚,赋给这个目标的价值一个负的值:

β1、β2、β3是可调的参数,如果希望学习新知识的机会高一些,可以调高β1的值。

2)难度平滑性

目标 2 的价值用V2表示,难度平滑性体现在要推的题目和上一个题目的难度是否接近,临近两个题目的难度越接近,目标的收益也应该越大。

所以我们用两个题的难度差值的平方取负数来表示,这样两个题目难度越接近V2值越大(越趋近于 0),总收益越大。

3)学习热情

如果一直给学员推荐极简单或者极难的题,都会让学员对结果不满意,我们需要让推的题符合学员的学习目标,来让学员保持学习热情。如果学员一直做对题目,需要提高推荐题目的难度;如果学员一直做错题目,那么就需要降低推荐题目的难度。

这个目标价值衡量的基本思想是:学员最近做题的表现与设置的目标因子越接近,价值应该越高

这里面我们引入一个学习目标因子:

可以通过学员自己设置的目标来对应,也可以根据学员的表现自动调整。

我们假设即将要推的题目是 t,回顾学员最近 N 次的学习记录(答对 p=1,答错 p=0),结合即将要推的题的预测答对概率,计算其平均表现。因此目标 3 的价值公式用V3表示:

学员如果希望获得具有挑战性的学习体验,可以设置较低的 g 数值。

举个例子:比如学习目标因子是 0.8 的学员最近 10 题的表现为 0,1,0,1,1,0,1,0,1,1,我们的窗口题数 N 设为 6,那么:

我们现在有两个题,一个答对概率是 0.2,一个答对概率是 0.8,计算一下就知道此时推答对概率高的题目当前目标的价值值更大。

综上,每个目标的价值在总价值中会有不同的权重,给每个目标设置一个权重系数 λ ,那么推一个题目的总的收益公式如下:

公式中的权重系数可以根据需求来调整,如果更关注推的题目难度的平滑性,就可以通过调高 λ2 的值来实现。用这个公式将候选集中的题目计算后,收益最高的题目就是接下来要推的题目。

当然,以上仅是设想的思路,但在实际应用过程中是否可行,还需要根据使用情况,不断调整优化公式中的参数和权重,找到最合适的计算方式。

本文由 @YTY 原创发布于人人都是产品经理,未经许可,禁止转载。

题图来自 Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 虽然部分内容有些难以理解,但是觉得思路是对的,值得反复琢磨,收藏一下

    来自湖南 回复
  2. 路过,点赞,文章内容十分棒

    来自山东 回复
  3. 路过,点个赞,好文章

    来自江苏 回复
  4. 非常棒的文章,收获很多!我是一名大二计算机专业学生,刚刚了解产品经理,请问这属于产品经理的哪个方向呢?

    来自黑龙江 回复
    1. 这个属于在线教育领域的推荐策略,可能偏策略产品

      来自北京 回复
    2. 最近投了美团的策略产品实习,这篇文章讲的内容帮助了我很多,谢谢!

      来自山东 回复