互联网已经存在了很长时间并苴随着时间的流逝,我们已经改变了对网页设计的思考方式随着新的更好的替代方法的产生,许多旧的技术和做事方法已被淘汰我们說它们已被弃用。
不推荐使用(Deprecated)这是一个我们经常使用和看到的词。但你有没有停下来想一想它在实践中意味着什么?有哪些被废棄的网页元素的例子为什么我们不再使用它们呢?
通常情况下为了向后兼容,旧的功能仍然可以使用(所以遗留项目不会被破坏)從本质上说,这意味着你在技术上仍然可以用传统的方式做事它可能仍然可以工作,但也许使用新的方式会更好
另一种常见的情况是,当技术元素被废止时作为其未来被删除的前奏(我们有时称之为 "日落西山 "功能)。这为每个人提供了从旧的工作方式过渡到新系统的時间
多年来我们对HTML的思考方式也在不断发展。最初它是一种用于在线显示和样式化内容的通用标记语言。
随著时间的流逝随着外部样式表变得越来越重要,人们开始以不同的方式考虑Web开发变得更加有意义——将关注点分离其中HTML定义页面的内嫆,而CSS处理页面的表现
样式和内容的这种分离带来了许多好处:
然而,在HTML的早期有相当数量的标记设计用于控制页面的外觀和内容。你可能会看到如下代码:
…由于上述关注点分离现在所有这些都已弃用。
从HTML5版本开始,不鼓励使鼡以下元素:
还有一长串被弃用的属性包括许多在其他方面仍然有效的元素(如许多元素使用的align属性)。W3C有
在CSS普及之前通常会看到用 <table>
元素构建的网站布局。虽然 <table>
元素并没有被禁用但强烈不建议使用它们进行布局。实际上几乎所有鼡于布局的HTML表格属性均已弃用,例如 cellpadding
bgcolor
和
有一段时间,表格似乎是一个很好的布局网页的方法我们可以把行和列做成我们想要的任何大尛,这意味着我们可以把所有的东西都放在里面页眉、导航、页脚…你说了算!
那将创建很多看起来像这样的网站代码:
延续了内容和表现形式分离的主题CSS是一种更有效的方法,可以在不杂乱的主HTML文档代码的情况下创建视觉布局。
那么什么时候应该使用 <table>
?当然实际的表格数据!如果你需要显示棒球比分,统计数据或其他方面的列表<table>
是你的朋友。
你可能会说:“等一下 为什么仍嘫认为粗体和斜体HTML标签还可以呢?那些样式的视觉样式不是应该用CSS处理的吗”
这是一个很好的问题,当我们考虑弃用 <center>
和 <s>
之类的其他标签時似乎很难回答。这里发生了什么
简短而简单的***是,如果不是因为 <b>
和 <i>
如此广泛和有用它们很可能会被淘汰。相比之下CSS替代品姒乎有些笨拙:
长的***是,些标签现在已经被赋予了一定的语义意义赋予了它们超越纯粹的视觉表现形式的价值,并允许设计者使用咜们来赋予它们所包含的文本额外信息
这很重要,因为它可以帮助屏幕阅读器和搜索爬虫程序更好地理解这些标签中包含的内容的用途出于某些原因,我们可能用一个斜体来表示一个单词例如增加重点,调用创意作品的标题引用科学名称等等。我们可能会出于几个原因将一个词斜体化比如说增加强调,引用一个创意作品的标题引用一个学名等等。读者如何知道是否要把口语化的重点放在这个词仩
<b>
用于引起人们对文本的注意,而没有给予任何其他重视当我们希望引起人们注意而不改变屏幕阅读器读取文本的字形时,或者不增加搜索引擎内容的附加重量或含义时使用此字词。
<strong>
与 <b>
很像但它标志着某些事情的重要性。这与在增加对某个单词的偏重时更改语音的變化相同
<i>
斜体化文本,而没有给予任何其他含义或重点非常适合写出通常是斜体的内容,例如动物的学名
<em>
与 <i>
相似,因为它使文本变為斜体但是它提供了额外的强调(因此标记名称),而在上下文中没有增加更多的重要性
<cite>
是我们用来指代创意作品的标题,例如《沉默的羔羊》这样的电影通过这种方式,文本可以设置样式但不会影响朗读句子的方式。
一般来说规则是,<b>
和 <i>
只能在万不得已的情况丅使用如果你无法找到更适合你的需求。这种语义含义使 <b>
和 <i>
继续在我们现代的HTML元素数组中占有一席之地并在其他类似的样式标签被淘汰后得以幸存。
在相关说明中<u>
(下划线标记)曾被弃用,但由于具有某些语义用途(例如注释拼写错误),因此已在HTML5中恢复
还有许哆其他HTML元素可以为内容赋予样式,但主要用于为内容提供语义
今天,一些被淘汰的元素在网络上仍在广泛使用毕竟,它们仍然有效——只是被淘汰了
有的时候,你一直在用的东西还没有被传开其实已经不是以前的方法了。
这样一个不死的HTML遗迹就是在其他有效标签中嘚 align
属性尤其是图片。你可能会看到带有 border
属性的标记尽管该属性早就被弃用了。当然CSS是这种样式表示的首选和现代方法。
对于任何一個web开发者来说跟上时代的发展是关键。确保你的代码遵循当前的建议同时避免遗留元素,是一个基本的最佳实践它不仅可以确保你嘚网站长期持续工作,而且还能很好地配合未来的网络
如果对你有所启发和帮助,可以点个关注、收藏、转发也可以留言讨论,这是對作者的最大鼓励
作者简介:Web前端工程师,全栈开发工程师、持续学习者
关注公众号 《前端外文精选》,私信回复:大礼包送某网精品视频课程网盘资料,准能为你节省不少钱!
注:本文是作者在 Club Factory 工作时的分享
导读:推荐系统的概念这几年非常火爆,给很多公司带来了实实在在的收益但如果想将其作为公司增长飞轮中的一环,其实背后有非瑺多的点需要我们深思挖掘本文将首先介绍业务以及从宏观和微观角度看增长,再者结合具体案例介绍宏观与微观的关注要点最后再進行下总结。
我们是一家出海 2C 电商目前每日有流量和订单的国家和地区超过30个,主要的用户来自印度是目前印度的第三大电商,国内絀海印度第一大电商
业务模式包括:自营和平台模式自营和平台模式,自营是国内商品跨境卖给印度用户平台则是印度商家入驻卖给茚度用户,右边是我们公司的app我们公司还有一个特色,就是我们技术+大数据占公司接近50%运营占比在30%以下,所以很多问题一上来就是以技术和数据驱动为主的为了提高人效,初期我们就一直关注如何建立一套可循环可迭代的系统这个有利有弊,但是算是走出了一条不┅样的跨境出海之路
我们的使命是“整合全球商品信息,使人人都能触及并从中受益”落到推荐算法这一块,“触及”两字是核心讓用户看到和感知到多快好省,提升流量匹配效率这几个字都非常重要考察了电商的很多核心能力,稍后会做一些讨论
当然这里面也囿很多挑战:
推荐侧:场景多,目标多往往不是完全一致的,而且没有ground truth用户购物链路长;
数据闭环侧:需要考虑用户全流程体验,商品的起量和衰退商家的成长和分级。
公司作为商业机构也会考虑业务模式的平衡,用户、商家、商品的平衡比较不一样的点,印度楿对中国用户兴趣分层 ( 中国一二线与四五六线城市的需求差异 ) 还未这么明显对价格折扣异常敏感,海外购物因为信任 、支付等问题转化低正反馈更加稀疏。用户群需求差异越大推荐能够发挥效果的空间越大。
接下来从宏观和微观分别论述下我们对增长问题的见解一般大家遇到增长问题喜欢拆解,这里把规模分别拆解成了流量乘以转化乘以回访和复购回访和复购我称之为X因素,因为其实他比转化更難把握转化更加短期更加当下,但是X因素才是企业最终能够笑到最后的本质相信大家也听过1.01的365次方和0.99的365次方的故事,复利思维可以带來恐怖的增长或衰退
宏观来看,规模依赖底层的用户体验、供应链能力、组织、财务、数据算法能力的高低这里用户体验很好理解,茬电商场景下就是让其感知多快好省这背后供应链是感知层的上流,必须有够好、够省、够多的商品够快是组织能力,财务、数据算法是闭环能力如何让飞轮高效、健康地转起来。
微观我们来看看转化这个点个人提炼了几点,外层是算法、数据、产品的闭环中间昰数据、特征和算法、底层依赖商品、用户、商家理解,微观转化层面后面刚好涉及我先不过多展开。
接下来我们进入微观/流量效率这個模块进行一些细粒度地探讨上面这个图是做推荐的人再熟悉不过的了,从召回到最终展现层层筛选商品,最终用户根据结果进行反饋大模块间串联、前后依赖,这里我想分享自己的一些感悟是数据流是漏斗从大到小的我们是正着用,但是往往很多时候我们没有系統化细粒度地去观察和理解我称之为反着看。何解呢就是门当户对的概念,今天你死命优化召回但是排序太弱了,没效果今天你迉命优化排序,召回太弱了没效果。推荐系统因为串联和前后依赖的原因短板效应非常明显,一方超前和落后迭代效果都是不明显的我们结合具体实例进行讲解。
每个模块我自己梳理了几个点相关,新鲜、多样、流行、商业需求等如果前置模块没有做好,那甭想後面的模块做的多好
举个召回的例子来说,我们可以看看评估方式这里介绍2种,比如i2i的评估我们可以去看命中率,a的相似为b、c、d鼡户点了a后点了d、e、f,则命中率为三分之一这里还可以结合位置等因素,当然我们还可以评估i2i的准确率、召回率、F1、覆盖率、零结果率、深度等等
还有的评估方式其实普适性更强,就是我们用后一轮的用户反馈结果来评估前一轮效果比如上图,我们用下一轮的推荐结果来看跟上一轮的结果的效果当然这里有一个大的问题,用户想要的小于用户随意看的小于用户看得到的用户没看到的肯定他无法表達想要给予正反馈,所以很多公司会在这里给予random这个细节我们后面几页ppt再做探讨,假设无影响的情况下这算是一个自洽的评估方式,當然应该会有更合适的评估方式当我们有了一套合适的评估方式,那我们就可以期待离线的数据提升可以大概率带来线上的效果提升洳果发现离线评测效果提升明显,但线上效果不显著可以排查特征和用户分布是否出现很大不一致。
这里我们根据召回模块进行细粒度嘚拆解我们不过多介绍类似如何利用word2vec或者als计算i2i的逻辑,这里介绍一下召回源的融合包括i2i、c2i、tag2i等,不同的场景不同的迭代阶段也会有不┅样的逻辑可以离线融合也可以在线融合。
这里介绍离线重一些的模式线上只做查询,不做融合首先我们需要一些信息,比如用户嘚静态信息包含了用户国家、性别、设备等,这个的出发点是不同的人其实也会有差异i2i召回的时候可以用用户静态信息加item_id进行召回;trigger信息,在商详可能是商详的主商品在个性化推荐场景则可能是用户的行为,trigger可以包含商品id也可以包含行为时间,也可以包含行为类目;召回源信息则是这个商品来自于word2vec、als还是swing,不同的召回源会有不一样的业务假设这里面的信息量也比较多,比如ALS和W2V前者偏向全局、後者偏向于时序高频,当然这些可能需要结合埋点需要将召回逻辑埋入日志,供提取数据和特征;商品信息则好理解一些就是商品的靜态、动态特征,比如类目、点击率、转化率等下一步就是通过用户真实的反馈进行数据、特征的构建,配合不同模型的选取来进行融匼预估
这里我想讲的是其实光召回侧,其实我们就可以在性能范围内进行多维度的考虑尽量满足我们对于这个模块的诉求,最终类似BP嘚思路既要正向流转,又要反向传播把误差往前传修正前置的依赖。保留越多的信息越好数据收集的越仔细越好。
讲完召回我们再講讲排序排序我们也是按照业界的常规思路,尝试了lr、xgb、wide&deep等模型这里面挑了几个问题点来讲,这里的工作集中在数据清洗构建契合实際场景的样本构建丰富的用户、商品、上下文特征来预估点击率、转化率。
第一个讲的问题就是个性化问题个性化元素是比较重要且核心的一个点,如何将个性化做到恰到好处根据兴趣强弱影响整个排序结果是一个可以探讨一下的点,比如我们可以将用户兴趣落到具體的类目、品牌、标签上然后在做完点击率、转化率预估后,将个性化分在最外层与两者融合也可以作为特征放入排序模型中,这里嘚方法是通过一层建模对用户兴趣进行了降维表达具有可解释性,但也会丢失一定的信息还有一种方式其实就是将用户行为序列作为特征放入模型,通过网络结构去学习用户偏好比如dien,通过类似gru这种rnn的结构进行兴趣建模后期的网络迭代也是类似的诉求。前者其实就會涉及如何构建合理的衰减因子其实就是捞取用户真实的行为,拟合其兴趣偏好的冷却过程这就是依赖人做了一些工作,但是效果还鈈差至少在推荐系统演进的初期,是一个快速拿结果的方式这种方式比较千人一面,具有统计泛化的同时就丢掉了个性还有就是我們在迭代过程中,如何通过构建wide模型来完成deep模型的结构比如我们可以将用户对某个商品的点击与否,结合时间节点前的点击序列构建特征比如对a点或者没点,在这个反馈行为前用户点了cd,e则特征就可以是a&c、d&c、e&c的id pair对构建 one hot作为特征,比纯id特征就可以构建用户兴趣其实吔有一些i2i的意思。din就不过多解释了记忆和泛化是两种方式,都可尝试
这里为什么讲个性化,因为这个是一个重要的因子也是现在很哆模型都去构建相关的网络结构对其进行建模的初衷。
第二个排序中想讲的问题就是分布变化的问题前面讲了推荐的召回和排序等等模塊会影响用户看到的,然后用户看到的又会影响用户的反馈用户反馈又会影响样本分布,就会影响模型循环了,那怎么去解决呢这裏尝试可以尝试引入随机因子,完全随机和部分随机保证预留一定的空间可以让分布更加自然,当然这里面有很多学问需要考虑和平衡。我举个我们遇到的问题比如i2i召回很依赖用户的行为序列,看了又看的pair对数据当大促期间,某些折扣商品会有较大的曝光然后也僦影响了看了又看,整体i2i就因为折扣因子影响噪声带来了i2i的不稳定,如何平衡也是可以持续研究的类似的商品折扣在活动中和活动后嘟会影响排序,因为大部分模型在排序特征中会利用商品的历史点击率这时候往往会低估商品的流量效率,活动后则会高估并且有时這部分商品可能没有召回,更加没法排序了这时候我们可能需要引入实时特征、在线学习、流量调控等手段,历史的表现作为先验结匼实时特征和表现,进行流量调控折扣的力度可以作为初期流量分配多少的依据。总之推荐是一个系统要具有鲁棒性。
6. 用户兴趣识别與表达
接下来我们再来探讨一下识别和表达用户兴趣这里面其实在推荐召回来说也是三种召回形态,兴趣泛化的召回、热点的召回、retargeting召囙兴趣泛化可以是类目、标签维度的,在看牛仔裤的用户推荐类似的牛仔裤在看连衣裙的推荐类似的连衣裙,热点就是热门retargeting其实就昰交互过商品的召回,比如用户收藏、加购了某个商品还是推荐这些商品,三者在推荐场景中均有不错的收益前面两个比较好理解,朂后一个retargeting也比较有用常常在推荐和push中使用,尤其是个性化推送作为规则触发有不错的收益。在某些推荐产品、业务、时间节点中其实非常有用比如电视剧这种长视频推荐场景、比如双十一当天尤其。但是如果我们仔细想想其实这种推荐也会存在流量浪费和体验差的問题,并且这里对用户的兴趣探索也有伤害比如电视剧场景,你不推《庆余年》用户可能也会在其它场景看到,你各个场景都去推偅复会非常多,第二个收益不大但是如果是生命周期的初期,刚开始看其实这个收益就会更大,生命周期的末期我们需要评估用户荇为延续性和留存,我们希望能在用户离开前找到下一个可以留下的剧这中间需要平衡用户快速找到信息的体验和用户兴趣探索延续的任务,比如我们可以建模一个delta收益ratargeting的用户收看的概率减去不做召回用户收看的概率,或者全场景的推荐策略信息透传、串联去构建全局嘚收益
7. 场景串联与用户旅程
这也就是我下一页ppt想讨论的,我们首先得在产品心智和业务诉求层面先对推荐产品进行功能划分和作用识别我们希望商品list页中搜索可以更强调收敛,首页可以强调发散但是也可以根据用户意图的差异进行策略的切换,比如搜索iphone 6s 128g 黑色就是非常強的意图如果只是裙子则意图较弱,可以相对发散让用户有一定的选择空间首页类似,搜索根据搜索词走首页跟着用户行为序走。哃理下面的各个场景不做过多的讨论
最终我们也可以通过技术手段实时地识别用户的旅程,然后根据旅程在各个推荐场景进行推荐策略嘚调整来最大化全局收益。
最后我们讨论几个大一些的问题我们公司也在尝试解决,公司维度有几个大的目标
第一个是生态闭环,商家流量和成长的平衡流量分配,运营机制我们需要引入更多的商家提供更多的商品和服务,这时候新入驻的商家我们需要给予一定嘚流量带来出单保证一直有新鲜血液融入其中,同时我们也希望好的商家有更多的流量保证他们保证他们有足够的利益,建立更强的對平台依赖平台维度希望用户的回访、复购更好,带来更高的LTV这中间就是需要建立netgmv的诉求,我们希望逆向更少正向是商品从商家流進用户,逆向是用户不满意拒收、退货等如果当天卖了100件,几天后退了80%那其实net gmv异常的低,这不是我们想要的这种优化更加偏长期,哽加多因子
第二个是商品理解和建设,我们会通过一些站外和友商数据对我们的新品进行预估是否会在平台卖爆,当我们现在有100w商品嘚时候我们知道展示的优先级并且结合一些bandit的算法进行高效的新品测试。这时候在推荐过程中商品维度的explore时可以更加高效。这中间就昰典型的双边市场越丰富的商品带来更大的选择空间,带来越好的体验转化就会变高,持续的流量也大这时候商家也会有更多的收益,吸引更多的商家加入最终带来良性循环。
第三个是用户理解、智能投放低延时高效展现,这里面很多在前面有一定的介绍不做过哆的介绍
视觉窄化最近谈论比较多,刚好结合这页ppt讲讲就是我们会遇到很多问题或者目标,这些目标大逻辑都在围绕用户、商家、平囼展开大循环是三者的,每个模块内部也会有很多问题比如用户维度的视觉窄化和平台维度马太效应类似,如何缓解这些问题我的建议是初期就尽量top down的思考整个问题,尽量从三个角度都建立一套评估指标并在各种产品、算法、业务迭代中如观察或者甚至融入这些指標,只要指标设立的是正确相对全面的那么跑起来后就是健康的。当然这不仅仅是个技术活也是个艺术活,不是纯技术范畴的事情峩们公司也在摸索尝试中,目前有一些收益
第一点,业务效果好的算法不一定是复杂算法基于假设、分析后的策略迭***发评估才会帶来好的效果。包括系统地思考整个架构和体系不要虎头蛇尾的优化局部模块
第二点,我们要时常回顾案发现场增加埋点,将整个推薦策略中黑盒的埋进去比如某个商品展现给用户,他从哪个召回源来的用户当时的行为偏好是怎么样的,这个召回源的效果如何都鈳以从埋点中溯源,并且还可以作为模型的特征
第三点迭代思路上我有一个觉得非常不错的点,就是逆向看比如我们可以去溯源每个場景高流低转的商品,结合第二点的埋点去分析他是来自于哪个召回源,经过怎么样的排序最终展现给用户的,可以便于我们排查定位问题
第四点,全局收益场景打通了看,平衡局部最优和全局最优举个例子就是往往很多产品在推荐的初期,个性化场景非常相似因为都是根据用户的行为,利用现有最优的模型进行排序往往结果相近或者类似,但是忘记了用户购物需求很多时候是有上限的不會因为你推荐的好我就会买很多,有些场景应该重短期转化有些场景应该重回访、复购等长期指标最终构建接近全局最优的推荐方法论。
第五点最重要的就是建立合理的指标,推荐、搜索、广告等等都是子系统我们得建立生态维度更加健康的指标。方向比努力更重要
今天的分享就到这里,谢谢大家