关于推荐:实操结合图数据库图算法机器学习GNN-实现一个推荐系统

本文是一个基于 NebulaGraph 上图算法、图数据库、机器学习、GNN 的举荐零碎办法综述,大部分介绍的办法提供了 Playground 供大家学习。 基本概念举荐零碎诞生的初衷是解决互联网时代才面临的信息量过载问题,从最后的 Amazon 图书举荐、商品举荐,到电影、音乐、视频、新闻举荐,现在大多数网站、App 中都有至多一个基于举荐系统生成的供用户抉择的物品列表界面。而这些物品的举荐根本都是基于用户爱好、物品的特色、用户与物品交互历史和其余相干上下文去做的。 一个举荐零碎会蕴含以下几个局部: 数据、特色的解决从特色登程,生成举荐列表过滤、排序举荐列表这其中,过滤的外围办法次要有两种:基于内容的过滤 Content-Based Filtering、与协同过滤 Collaborative Filtering,相干论问介绍可参考延长浏览 1、2。 基于内容的过滤内容过滤办法的实质是给用户的偏好做画像,同时对所有待举荐的物品计算特色,做用户的画像与待举荐物品特色之间的间隔运算,过滤失去相近的物品。。 内容过滤的办法的益处有: 清晰的可解释性,无论是对用户的画像剖析,还是对物品的运算自身人造带来了排序、过滤的可解释性;用户数据输出的独立性,对指定的待举荐用户来说,只须要独自剖析他们的画像和历史评分就足够了;躲避新物品冷启动问题,对于新的增加的物品,即便没有任何历史的用户评估,也能够做出举荐;同时,基于内容过滤的举荐也有以下弊病: 特征提取难度,比方:照片、视频等非纯文本数据,它们的特征提取依赖领域专家常识。举个例子,电影举荐零碎须要抽出导演、电影分类等畛域常识作为特色;难以突破舒服圈,挖掘用户的潜在新趣味点;新用户冷启动数据缺失问题,新用户个人信息少难以造成用户画像,进而短少做物品画像、特种间隔运算的输出;基于协同过滤协同过滤的实质是联合用户与零碎之间的交互行为去举荐物品。 协同过滤的办法又分为基于记忆 memory-based 的协同过滤与基于模型 model-based 的协同过滤。 基于记忆的协同过滤次要有物品与物品之间的协同过滤 ItemCF 和用户与用户之间的协同过滤 UserCF。ItemCF 简略来说是,举荐和用户之前抉择类似的物品,即:依据行为找物品之间的相似性;UserCF 则举荐与用户有共同爱好的人所喜爱的物品,即:依据行为找用户之间的相似性。 基于模型的协同过滤次要依据用户爱好的历史信息、利用统计与机器学习办法训练模型,对新用户的偏好进行推理。 协同过滤的办法的益处有: 无需对非结构化物品进行特征分析,因为协同过滤关注的是用户和物品之间的协同交互,这绕过了对物品畛域常识解决的需要;对用户的个性化定制水平更强、更细,基于行为的剖析使得对用户偏好的划分实质上是间断的(相比来说,对用户做画像的办法则是离散的),这样的举荐后果会更加“千人千面”。同时,也会蕴含内容过滤、无限的画像角度之下的“惊喜”举荐。但,它的毛病有以下方面: 有新用户和新物件上的冷启动问题,因为它们身上都短少历史爱好行为的信息;咱们总结一下,两种过滤形式各有利弊,也存在互补的中央。比方,新物件的冷启动上,基于内容的过滤有劣势;对于个性化、举荐惊喜度方面,协同过滤有劣势。所以,在实操中,举荐零碎大多演变都比下面的归类简单得多,而且经常随同着多种办法的交融。 基于图的共性举荐图技术、图数据库技术在举荐零碎中的利用是多方面的,在本章节中咱们会从图数据库的出发点上给出多种利用例子。 建设图谱在开始之前,我简略地介绍下本文应用的图数据集。 为了给出更靠近理论状况的例子,我从两个公开的数据集 OMDB 和 MovieLens 中别离抽取了所需信息,组成了一个既蕴含电影的卡司(导演、演员)和类型,又蕴含用户对电影评分记录的常识图谱。 Schema 如下: 顶点: user(user_id)movie(name)person(name, birthdate)genre(name)边: watched(rate(double))with_genredirected_byacted_by 这个数据的筹备、ETL 过程会在另外的文章里具体介绍,在进入下一章节之前,咱们能够用 Nebula-Up 一键搭起一个测试的 NebulaGraph 单机集群,再参考数据集的 GitHub 仓库,一键导入所需数据,数据集参考延长浏览 4。 具体操作步骤: 用 Nebula-Up 装置 NebulaGraph;克隆 movie-recommendation-dataset;导入数据集 NebulaGraph;curl -fsSL nebula-up.siwei.io/install.sh | bashgit clone https://github.com/wey-gu/movie-recommendation-dataset.git && cd movie-recommendation-datasetdocker run --rm -ti \ --network=nebula-net \ -v ${PWD}:/root/ \ -v ${PWD}/dbt_project/to_nebulagraph/:/data \ vesoft/nebula-importer:v3.2.0 \ --config /root/nebula-importer.yaml基于内容的过滤CBF,内容过滤的思维是利用畛域常识、历史记录、元数据别离对用户和物件做画像、打标签,最终依据用户的标签与待举荐物件之间的间隔评分进行排序给出相干举荐。 ...

December 27, 2022 · 8 min · jiezi

关于推荐:给视频加密的软件推荐视频加密的作用好处有什么

随着社会的倒退,人们越来越器重本人的版权。许多教育培训机构也开始重视本人辛苦创作的视频的安全性和严密性,如果本人培训机构的视频被人可能随便流传翻录的话,那么任何人都能够用此来谋取不当的利益,给培训机构带来微小的损失,因而视频加密在教育行业中显得尤为重要,那么进行视频加密所带来的益处是什么呢?具体以上面这个加密软件的性能来看一下:一、无效阻止视频流传 抉择把本人创作的视频加密,能够极大地提高本人视频的安全性,视频加密后是用专门的视频加密播放器播放,并且针对加密视频进行高强度的加密。无效的阻止了视频流传进步视频的安全性。 二、一机一码对应机制 视频加密后只能应用激活码进行激活播放,一机一码的设置使让没有购买此课程的人拿到视频也播放不了,即使拿到激活也是激活有效的 三、防翻录水印 加密时有水印设置,真水印逐帧联合技术无奈去除水印,水印能够设成观看用户的信息,随机变动的水印也可能调整透明度不影响观看感,以及呈现的间隔时间,水印的字体大小色彩都能够本人设置。用户如果偷拍流传的话,也可能通过下面显示的信息来保护本人的权利。无效避免用户采纳外置设施如相机,对视频进行非法录制流传。 四、防录屏机制 视频加密的防录屏设置,无效的进步视频的保密性,播放视频时可能自动检测出防录屏软件的开启,并后盾强制退出播放,用手机即便录下屏来也是黑的。 五.播放工夫日期设置 可限度播放日期,可能给学员指定播放日期,针对视频的内容设置播放截止日期或播放次数,给商家带来更好的治理。

November 22, 2021 · 1 min · jiezi

关于推荐:聊一聊我在-B-站自学-Java-的经历吧

Hey guys ,这里是 cxuan,欢送你收看我最新一期的文章。 这是一篇鸽了很久的文章。。。。。。 事件还要从上回说起。。。。。。 我爱 B 站! 这篇文章我汇总了 B 站上计算机根底(操作系统、计算机网络、数据结构和算法、汇编等)学习视频,受到了很多小伙伴的认可和追更。 甚至 CSDN 还有在催我更新的读者敌人 所以这篇文章,不能再拖了,更新起来!!! Java 根底Java 根底 :尚硅谷宋红康 https://www.bilibili.com/vide...宋红康老师讲课十分有意思,在讲 Java 之前,他会先把一些计算机基础知识带你理解一下,让你学习 Java 的时候不至于雾里看花。讲完 Java 根底后,前面还有我的项目驱动带你温习一下 Java 根底还有一些 Java 新个性的解读,强烈推荐。 黑马 Java 根底+待业班+各种我的项目 idea 版本 https://www.bilibili.com/vide...应用 idea 作为工具是很多 Java 教程都不具备的,能够看到这个教程是十分新的。这个教程有 561 节,贯通了 Java 根底、我的项目、数据库、MySQL、JDBC、数据库连接池,能够说学完这个视频就可能间接上手 Java web 开发了。 能源节点 Java 零基础教程视频 https://www.bilibili.com/vide...能源节点的这门零根底 Java 课程分类很全,简直涵盖了所有的 Java 基础知识,有 800 多节视频,也足以可见这门零根底视频课的用心水平。 北京尚学堂高琪(举荐) https://www.bilibili.com/vide...高琪老师的视频也十分不错,其中还夹杂着多线程和网络编程的知识点,还有一些手写汇合类的视频十分有特点,这是其余视频教程所不具备的。 求知讲堂 Java 基础教程 https://www.bilibili.com/vide...这是一位对学生有过深刻理解的老师,口碑十分好,而且简直没有废话,无尿点,十分好的一个 Java 基础教程,有很多小伙伴认为是全网最好的 Java 基础教程 ...

July 7, 2021 · 2 min · jiezi

关于推荐:得物技术聊聊推荐系统是如何做排序的

引言信息时代到来当前,咱们被各种各样海量的信息所吞没,从新闻、广告、电商、直播、短视频等各种波及这些场景的APP中,大量个性化的信息被推送到咱们眼前。例如在应用得物APP购物的过程中,咱们也经常会听到这样的问题,为什么会给我推这双鞋/这件衣服?为什么浏览珍藏过的商品重复呈现在举荐流中?举荐流是怎么猜想我的爱好的?举荐的排序逻辑是怎么的,都思考了哪些因素?能不能被动减少某些类目标曝光量?这些种种的问题,都和咱们的排序模型、排序逻辑无关,上面就让咱们来聊聊举荐零碎中是如何对商品做排序的。 图1. 得物APP首页举荐瀑布流 举荐零碎首先来简略说一下举荐零碎的根本架构,借用youtube论文中的一张图片来阐明。举荐零碎的外围指标是从咱们的总商品库中,为用户挑选出他最感兴趣的一部分商品,从而节俭用户工夫,也进步平台的转化效率,为交易的顺利进行提供助力。除开一些工程实现局部的细节,整个过程能够大抵分为两个阶段,即召回(candidate generation)和排序(ranking),其中召回的工作是从海量商品中选取局部用户“大概率”感兴趣的商品集,而排序则负责将召回选出来的这部分商品仔细分析,依照用户可能感兴趣的水平(probability),从高到低进行排序,展现给用户观看,整个过程在毫秒级的工夫内实现。 图2. 援用自论文:Deep Neural Networks for YouTube Recommendations 召回层面的策略和逻辑有很多,也演变了很长一段时间,不过这不是咱们明天聊的重点,咱们来具体聊聊,当咱们拿到了召回后果,大略在一万件以内的规模下,模型是怎么确定他们的先后顺序的,机器怎么自动化地计算出分数来评估用户对他们的感兴趣水平的。 排序模型的倒退也有很长一段时间了,从互联网逐步衰亡开始,为用户疾速筛选出有价值的信息始终是一件十分外围的事。咱们无妨来看看,为了实现这项工作,都经验了哪些演变过程。 先看一个简略例子,一位女性用户来到咱们平台,咱们能够拿到的信息有她的性别、拜访工夫、行为历史记录等,假如她之前逛了逛衣服,珍藏了一双鞋,最近又在浏览吹风机,而咱们的召回候选集中又恰好有衣服、鞋和吹风机,咱们应该怎么来定义排序的逻辑呢? 规则学习解决问题的第一阶段,往往是依赖于直觉的,直觉通知咱们,每一个和用户或者是商品无关的信息,都会影响到用户的决策,这之中又必然存在着肯定的数量关系,排序便有了最后的思路:人工规定。顾名思义,就是依据平台经营人员对业务的相熟水平,来间接定义物品的先后顺序,例如平台最近某件衣服是爆款,卖的很好,所以要排在后面,尽可能让顾客看到,思考到个性化因素,这位又是女性用户,那么就把最近所有女性用户购买的商品做一个统计,依照销量从高到低排序,或者更近一步,某个地区的女性用户,最近珍藏过鞋子的某地区的女性用户….只有划分用户特定维度后的数据流足够多,规定足够明确,最终所有商品对一个具体用户都会有一个排序后果,一个毛糙的举荐排序策略也就成型了。 那么以上策略是否就是咱们的排序计划呢?显然并不是的。以上计划有两个不太正当的中央: 人工的策略会因人而异,很难有一个对立的规范,而且简直不可能把所有信息整合在一起利用起来。优化的指标含糊,依赖于线上实际后果来评估好坏,总体而言大家都是为了让平台更好,然而每一个具体的策略,到底是优化点击率还是转化率还是用户的停留时长、下拉深度,很难在给出规定时对后果有一个预期,线上试验的老本很高,而且计划的迭代周期可能是有限长的(人总能想到各种不同的规定组合)。有没有一个计划能整合利用所有能拿到的信息,并且在上线前对后果有一个正当预期,甚至不须要上线试验,离线就能评估策略的好坏呢?这个时候,机器学习办法呈现在了咱们眼前。 机器学习解决问题的第二阶段,就是在直觉的根底上引入可量化的模型。模型是一个比拟形象的词,在这里它指的是对一种映射的形象形容,即 f(context,user,item)—> score,任何能用具体公式提供这个分数计算逻辑的计划,都能够叫做模型。掂量一个模型好坏的规范,就是这个假如进去的映射关系与事实中实在的外在关系的间隔。比方个子越高,体重就越大,就是一个依据身高信息去映射体重信息的线型模型,这个模型显然是不谨严的,但在很多时候也是成立的。说回咱们的排序模型,咱们须要设计一个计划,从用户、商品和上下文信息(事件产生的工夫、场景等主观信息)中,提炼出用户对商品的偏好水平。 一个能同时整合所有信息,在模式上足够简略,在工业界的大数据和高并发下又领有足够稳定性的模型,早就曾经被数学所给出,那就是驰名的逻辑回归模型,模式如下: 图3. 逻辑回归函数图像 这个模型的模式尽管简略,但思维足够粗浅,外面整合了数学界在参数估计、信息论和凸优化等方向的研究成果,将变量用线性的形式联合起来,把定义在(-∞,+∞)的自变量映射到(0,1)的值域上,这里的(0,1)之间的分数能够了解为用户感兴趣的概率,整个过程便成了一个点击率预估问题。当咱们用线上实时收集到的用户行为数据作为根底,把用户的点击行为转化为0或1的训练指标,便能够用很成熟的数学计划疾速地求出公式中的所有最优化参数w,从而确定下最终的计算过程。尽管逻辑回归模型在学术界曾经是根底中的根底,但因为其稳定性和极高的计算效率,工业界也仍然有很多业务场景中应用这套模型作为线上服务的次要担当或者降级备用计划。 除了逻辑回归以外,还有许多机器学习的模型被利用在排序环节中如NB, SVM和GBDT等,其中比拟胜利的模型是GBDT,这外面又以陈天奇博士提出的XGBoost模型最为驰名,在工业界也有宽泛的利用。GBDT模型是以决策树模型为根底提出的组合模型,树模型的特点是更加合乎咱们人对事物的判断形式,大略的思维相似下图: 图4. 树模型决策思路简述 方才提到的GBDT模型就是将以上这种决策行为给定量化,并且应用多棵决策树进行组合决策的后果,相比于逻辑回归模型,它提出了一个更合乎人类直觉的视角,将排序问题拆解为对若干特色的而二分类组合,将各种用户和商品特色在决策过程中进行了穿插,实际中成果往往是更优的,这也合乎咱们提到的“模型是对实在决策关系的模仿”这一观点。然而树模型也有它的有余,比方它优化性能较低,对大数据量的计算性能较差,对增量训练的反对度较差等等。 总的来说,无论是逻辑回归还是GBDT模型,都是机器学习在举荐畛域很好的实际和摸索,他们各自都还存在一些显著的有余,业界针对这些有余的中央也都有各种补充和优化的计划,通过几年的迭代,随同着实践和硬件条件双重倒退的根底上,举荐零碎迎来了它的深度学习时代。 深度学习解决问题的第三阶段,是在成熟的工业界计划根底上,退出本人对具体业务场景的了解。逻辑回归公式简洁,性能牢靠,GBDT思路清晰,成果杰出,但他们是否就是问题的最终解决方案呢?显然还是不够的,如下面提到的,他们各自都还有不少的问题须要解决: 逻辑回归对特色间关系的刻画过于简略,对特色仅仅做了线性组合,与事实中大量的非线性关系的存在是违反的,比方女性、上海、数码产品这几个特色的简略加减法来形容用户购买偏向,与咱们的认知不符,这三个特色和购买志愿的关系,更有可能是非线性的,而GBDT在解决特色组合时应用的形式也比拟繁多,难以刻画更为简单的组合关系。数据的排序逻辑过于繁多,都是以点击率作为指标,繁多指标的问题在于,很容易导致后果不足多样性,用户此刻想看数码产品,并不意味着满屏的举荐都应该变成数码产品,这可能反而会升高用户体验。从解决这两个问题登程,咱们的思路又细分到了两个方向上,别离是拓宽模型的复杂度和多指标下的后排序干涉。 第一个问题是拓宽模型的复杂度,在具体操作中能够分为两个方面的工作,第一个方面,是在特色组合上尽可能提供简单的特色,比方咱们例子中,自身模型输出的信息是性别、地区、用户行为、商品属性,然而咱们能够人工定义一些其余的简单特色,比方用户是否购买过同类商品,用户对同品牌商品的点击次数等,通过减少特色的复杂度,来减少模型输出的信息量,把一些非线性的关系转化到线性模型上来解决,这样做的益处是无效节俭了计算资源,也加重了线上推断所带来的压力,对成果晋升也很有帮忙;不过弊病也是显著的,那就是整体思路又回到了咱们一开始人工规定的老路上,依赖于人的教训来做优化,不过这里的人由平台经营换成了算法工程师。所以能不能把拓宽非线性关系的工作也交给机器来实现呢?这便是第二个方面,引入深度学习的模型。 图5. Google提出的模型的Wide&Deep模型架构 深度学习在现在的工业界早已是赫赫有名,从2016年起,在谷歌的W&D模型的影响下,工业界的举荐零碎开始纷纷效仿,大踏步地迈进了深度学习所统治的时代,现在各大厂的支流举荐模型,都是在深度学习的根底上做的开发,对于深度学习的理论知识,相干解说有很多,这里就不具体开展。对于举荐零碎来说,深度学习所解决的外围问题,就是特色间非线性关系的自动化开掘。这外面的逻辑,能够说是一个“用魔法来战胜魔法”的过程。我对这个问题的了解是这样的,特色间正确的组合形式是存在的,只是组合成几何级增长,遍历尝试的操作代价难以承受,这便是第一重“魔法”;而深度学习从实践上证实,只有给定入参和指标,它能够拟合任意简单的函数,然而最终你也不会晓得拟合进去的函数具体模式是怎么的(可解释性目前为止也是学术界的一个很重要的方向),这便是第二重“魔法”;一边是你无奈遍历的组合后果,另一边是你无法解释的组合后果,但最终产出了合乎你预期的业务成果,所以我称之为一个用魔法去战胜魔法的过程,这也是业内深度学习算法工程师又被戏称为“炼丹工程师”的起因,很多时候工程师对于模型的具体作用原理也是难以解释的,惟一晓得的,就是它是否“无效”。 图6.阿里巴巴提出的ESMM多指标网络 图7.阿里巴巴提出的重排序网络 对于逻辑回归的第二个问题,多指标和多样性,就不能简略通过拓宽模型复杂度来解决了。多指标优化和后排序干涉也是当初举荐排序侧很重要的逻辑,因为深度学习这个魔法特地好用,所以业界也产出了很多相干的实践模型,比方阿里的ESMM和Re-ranking模型。不过因为后排序这块是间接影响到用户最终体验的,不可解释的魔法后果在目前的实用性和可控性上还是比不上可能灵便调整的规定,因而在模型排序的后果环节,又退出了一些人工规定,比方类目打散、品牌打散和曝光过滤等,来满足一些主观需要。最终的排序流程,还是一个计算机模型和人工规定相互扶助来实现的。 总结以上便是举荐零碎的大体排序逻辑,当前的模型还会越来越多,也未必都会局限在深度学习的畛域,整个业界也还在探寻什么样的模型能以最小的代价刻画出人与物的协同关系,这个问题很可能没有一个标准答案,须要算法工程师依据具体的业务场景和业务特点去结构和解决排序的问题。最终的排序后果是在训练数据、特征选择、模型构造和后排序逻辑的独特干涉作用下决定的,数据会是排序逻辑的外围,而不是人工主观意识在驾驭和操纵的。尽管小的细节还在一直地调整和扭转,然而大的方向肯定是以更简单的特色、更正当的模型构造、更高效的迭代形式,更灵便的规定调整来实现更好的业务指标。 参考资料[1] Covington, Paul, Jay Adams, and Emre Sargin. "Deep neural networks for youtube recommendations." Proceedings of the 10th ACM conference on recommender systems. 2016. ...

March 12, 2021 · 1 min · jiezi

关于推荐:关于京东技术你想了解的都在这里丨征文活动获奖及优秀专栏推荐

为给宽广开发者们提供更多对于京东实际业务场景、京东技术“神秘”的干货内容,会集领有类似技能和雷同趣味的技术人们一起交换提高,京东科技开发者打造技术分享的博客平台,并于2020年12月28日-2021年1月28日举办征文活动,面向京东团体外部各技术产品团队征集优良技术文章。 本次征文活动共有36支京东团体技术&产品团队开设技术专栏,以文字发声,累计上线479篇优质内容。其中,6个团队的技术专栏怀才不遇取得大奖,6个甄选优良专栏取得特地举荐。这12个专栏均积淀着来自京东批发、京东物流、京东科技等业务线的优良实践经验与技术内容,涵盖前端、架构、开发、测试等技能实际,AI、IoT、大数据、云原生、开源等技术畛域,篇篇精选,值得一看! 扫描文中对应二维码,即可跳转技术专栏号,浏览优良技术文章。 以下为获奖与优良专栏举荐: 技术专栏耕耘奖(3个)NO.1: 京东城市JUST团队(114篇) 专栏介绍: 专栏内容致力于帮忙开发者便捷、高效地治理海量时空数据,篇篇精选,值得一读。其所对应的京东城市JUST团队,也在打造世界上最好用的时空数据管理和开掘平台的路上致力着,让咱们一起加油! 扫码查看专栏文章 NO.2: Apache ShardingSphere (89篇) 专栏介绍: Apache ShardingSphere 是目前ASF首个分布式数据库中间件生态圈我的项目,我的项目文档&我的项目布局&开源文化&技术干货哪里寻,就在这个专栏里! 扫码查看专栏文章 NO.3: 云与AI设计部(88篇) 专栏介绍: 专栏次要分享我的项目积淀和设计常识,波及UE Design、Brand Design、UE Research、ID Design等toB方向,团队保持以用户为核心,打造具备“价值·体验·服务”设计共同体团队,硬核&美感这个团队均可。 扫码查看专栏文章 技术内容璀璨奖(3篇)NO.1: 京东物流质控队《Insight Mybatis JdbcTemplate 混合事务管制的实现》 文章作者: 京东物流 杨攀 文章摘要: 本文解答了多个数据库继续框架如何集成、如何协同管制事务。通过Mybatis JdbcTemplate 混合事务案例,咱们能够看到最佳实际,更多的是spring框架提供的通用扩展性以及架构扩展性设计模式。 所属专栏介绍: 物流质控包含异样自动识别、上报、责任断定、回损等业务,团队以物流异样数据为根底,为京东物流的品质把控提供无效的技术支持,与升高异样的改良。专栏内容包含物流大数据处理、业务流程、品质管控专利等相干的技术实际与干货。 扫码查看专栏文章 NO.2: 西安CS产测测《软件工程量估算办法》 文章作者: 京东物流 王博 文章摘要: 本文联合行业内的教训以及普适办法,给出了软件开发工程估价的计算公式,并具体的介绍了公式的形成以及设计思路。这篇文章介绍的价格估算办法次要是针对行业内商业单干的场景,然而对于工作量的估算办法能够为小伙伴提供参考和帮忙。 所属专栏介绍: 专栏内容的测试罕用实践及测试技术总结,以及产品相干的思路思维,落地且实用,心愿能为相干畛域的技术从业者提供一些参考。 扫码查看专栏文章 NO.3: 京东科技IoT团队《大数据 | ClickHouse在京东能源管理平台的实际》 文章作者: 京东科技 樊思国 文章摘要: 本文探讨了OLAP技术倒退历程,联合京东能源管理平台业务理论,介绍了利用ClickHouse实现实时数据多维分析引擎的实践经验,并提出了一种通用的面向OLAP场景的API设计办法。 所属专栏介绍: 专栏以智能家居为外围场景,覆盖物联网的连贯能力、平台架构,前端技术利用、数据智能利用等;分享各场景的实践经验、商业化思考与客户案例剖析。 ...

February 5, 2021 · 1 min · jiezi

关于推荐:推荐一些优秀的工具文章博客

在线Cron表达式生成器在线工具 - 程序员的工具箱优良文章和博客守业互联网公司如何搭建本人的技术框架[zejian的博客]zejian微服务实战单点登录原理与简略实现网站架构教训随笔领取零碎架构Spring整合JMS跟我学Shiro目录贴跟我学SpringMVC目录汇总贴Elasticsearch权威指南(中文版)springMVC对简略对象、Set、List、Map的数据绑定和常见问题.如何细粒度地管制你的MyBatis二级缓存本文来源于:宋文超super,专属平台有csdn、思否(SegmentFault)、 简书、 开源中国(oschina),转载请注明出处。

August 2, 2020 · 1 min · jiezi

关于推荐:推荐一些优秀的工具文章博客

在线Cron表达式生成器在线工具 - 程序员的工具箱优良文章和博客守业互联网公司如何搭建本人的技术框架[zejian的博客]zejian微服务实战单点登录原理与简略实现网站架构教训随笔领取零碎架构Spring整合JMS跟我学Shiro目录贴跟我学SpringMVC目录汇总贴Elasticsearch权威指南(中文版)springMVC对简略对象、Set、List、Map的数据绑定和常见问题.如何细粒度地管制你的MyBatis二级缓存本文来源于:宋文超super,专属平台有csdn、思否(SegmentFault)、 简书、 开源中国(oschina),转载请注明出处。

August 2, 2020 · 1 min · jiezi

推荐系统

推荐系统“推荐系统”第一次出现在大众视野源自美国学者Resnick & Varian,其给出得到定义一直沿用至今,电子商务推荐系统是指利用电子商务网站向客户提供商品信息和建议,帮助客户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。为什么定义要加上电子商务这个领域范围的限制,难道说只有电子商务领域才有推荐系统。我的理解是,推荐系统设计的初衷是解决信息过载问题,帮助用户在茫茫信息中找到对自己有价值的信息,大大节约时间和精力。而电子商务领域在如今是一个非常火的领域,如阿里巴巴,京东商城,交易信息每天都在产生,数据量大是电子商务领域显著的特点,如何利用这些信息挖掘潜在购买力推动着电子商务企业大胆尝试做这件事。推荐系统如网易云音乐网站、抖音小视频、今日头条资讯APP等也都具有数据量大的特点,所以推荐系统在音乐、视频、资讯等领域也很常见。个性化推荐系统传统意义上的推荐系统还不是真正的个性化推荐系统,顾名思义,个性化推荐系统简单理解就是让推荐系统拥有个性化特征,就像推荐系统就是为你本人定制的,清楚你的喜好,实时为你提供推荐服务。而要做到这一点,你的所有历史记录就是个性化推荐系统能利用的信息,它认为你的行为历史代表了你在某个时间点或者时间段的喜好或者需求,恰当地利用这些信息可以给你意想不到的推荐服务。搜索引擎,广告系统个性化推荐系统这么强,以致于许多人已经对它产生依赖性,就像手机成了不可或缺的工具。那推荐系统出现之前又是谁在为大家服务呢?第一个就是搜索引擎,代表作品就是百度浏览器和谷歌浏览器,以及bing搜索,360浏览器等。搜索引擎的出现也是为了解决信息过载,浩如烟海的信息,不仅仅局限在某个领域了,只需要通过几个关键词就可以大致准确地为你查询到相关信息。但是它不同于推荐系统,搜索引擎旨在用户的主动性,用户主动搜索自己想要的东西,用户的需求十分明确,但是缺乏个性化,你搜索出的东西可能是大众需求,不代表个人兴趣。而推荐系统旨在用户的被动性,推荐系统占主动,在某个合适的时间为你“量身”推荐你想要的东西,这时用户的兴趣是模糊的,如我想听好听的歌,但是不知道具体哪一首,这时候推荐系统的优势就显露出来了。第二个是广告系统,好的广告能给企业带来意想不到的财富,差的广告让人所诟病,甚至葬送公司的美好前程。广告系统也是将合适的信息推荐给合适的受众,但是商业化比较强,广告系统一般包含广告主,平台和用户三部分,平台按照广告投递和相应或者成功交易进行计费。广告系统更准确地说对一类人进行推荐服务,如高考培训机构广告投放到学生视野中,健身广告投放到健身社区等。而个性化推荐系统就是针对个人进行“定制”,更具针对性和有效性。推荐系统的发展如何恰当利用用户历史信息是一个关系到推荐效率的重要举措。推荐系统早期是基于内容的推荐系统,比如我买了一件衣服,推荐系统会根据我买的衣服提取衣服特征,比如颜色,材料,品牌等等,然后根据这些信息推荐一件大部分具备这些信息的相似衣服,推荐系统认为既然你喜欢这件衣服,那也可能喜欢与这件衣服相似的衣服。这种算法也遭受了很大的挑战,如提取信息的难度是巨大的,视频信息的提取就是个代表,视频信息量大,时间长,待提取的特征很多,这就给推荐造成了巨大的难度。再者,提取信息这件事需要专业领域的人去做,门外汉始终没有专业领域的人提取信息准确有效,所以也会给推荐带来挑战。为了减少这种挑战,学者转而关注用户行为,提出基于协同过滤的推荐系统,研究用户行为之间和商品之间的潜在相似性,举个例子,用户A买了一件漂亮裙子,恰好用户B也买了同样的裙子,那么推荐系统认为用户A和B具有一定相似性,那么B购买的其它裙子A有一定可能也会喜欢,因此推荐系统就会推荐用户B购买过而用户A没有购买过的衣服。可以看到基于协同过滤的推荐系统并没有考虑裙子的任何属性,只关注用户的购买行为,这就绕开了提取物品或用户信息的瓶颈。基于协同过滤的推荐系统也是如今研究比较广泛的算法。推荐系统的挑战这部分内容来自Linyuan Lü、Matúš Medo的论文Recommender Systems数据稀疏性:一个网站可能存在许多用户和许多项目,用户对电影的喜好通过评分来反应,高分代表喜欢,低分相对来说不那么喜欢。但是一个用户对电影网站上的电影有效评价个数在少数,绝大部分电影并未评分,所以如果将用户和项目视作一个矩阵的话,这个矩阵是稀疏的。可扩展性:计算复杂度,时间复杂度,空间度复杂度冷启动:对于一个新用户和新项目来说,没有任何历史纪录对于推荐系统的确是个挑战精确性和多样性:当任务是推荐可能被特定用户欣赏的物品时,通常最有效的方法是推荐受欢迎和评价较高的物品。然而,这种推荐对用户来说价值很小,因为没有推荐系统,热门对象很容易找到(通常很难避免)。易受攻击:由于推荐系统在电子商务应用中的重要性,它很可能成为恶意攻击的目标,试图不公正地促进或抑制某些项目。有大量的工具可以防止这种行为,从阻止恶意评估进入系统到复杂的抵抗推荐技术。然而,这并不是一个容易的任务,因为随着防范工具的开发,攻击者的策略也越来越先进。例如,Burke等人介绍了八种攻击策略,进一步分为四类:基本攻击、低认知攻击、核攻击和知情攻击。时间因素:虽然实际用户的兴趣具有广泛的不同时间范围(例如,与计划旅行相关的短期兴趣和与居住地点或政治偏好相关的长期兴趣),但大多数推荐算法忽略了评估的时间戳。老观点的价值是否和如何随时间衰减,以及用户评价和项目相关性中的典型临时模式是什么,这是一个正在进行的研究领域。评估方式:虽然我们有很多不同的度量标准,但是如何选择最适合给定情况和任务的度量标准仍然是一个悬而未决的问题。不同推荐算法的比较也存在问题,因为不同的算法可能只解决不同的任务。最后,给定推荐系统的总体用户体验,包括用户对推荐的满意程度和用户对系统的信任,难以在“在线”评估中衡量。因此,经验用户研究仍然是推荐系统值得欢迎的反馈来源。用户界面:有研究表明,为了方便用户接受建议,建议必须是透明的。当明确为什么向用户推荐某一特定项目时,用户会表示赞赏。另一个问题是,由于潜在有趣项目的列表可能很长,因此需要以简单的方式呈现,并且应该易于浏览,浏览不同的建议,这些建议通常通过不同的方法获得。

April 8, 2019 · 1 min · jiezi

达观数据:用好学习排序 (LTR) ,资讯信息流推荐效果翻倍

序言达观数据是一家基于文本语义理解为企业提供自动抽取、审核、纠错、推荐、搜索、写作等系统服务的人工智能企业,其中在推荐场景上我们也服务了很多客户企业,客户在要求推荐服务稳定、需求响应及时的基础上,对系统的效果也提出了越来越高的期望,这对算法团队也是一个挑战。本文将从资讯信息流这个场景入手,先简单介绍达观推荐引擎的架构演化,同时尽可能详细的介绍学习排序这个核心技术的实践和落地经验。达观推荐引擎架构达观推荐引擎采用在线-近线-离线三层系统架构,可以从性能和算法复杂度两个维度来进行区分。在线:实时响应客户http api推荐请求,一般需要严格控制在100ms以内,最好在50ms。该模块需要严格保证稳定性,综合考虑各个依赖模块的异常兼容、流量的超时控制等。近线:准实时捕捉用户实时行为并做出反馈,即近线模块的输出需要考虑用户的实时行为反馈。该模块一般处理延迟为秒级。离线:基于分布式平台离线挖掘,输出包括item-base协同过滤结果、基于标签的召回结果、各维度热门结果、用户画像等等。该模块的处理延迟一般为小时级或者天级。一个通用的资讯流推荐架构如下:图1:online-nearline-offline三层架构 hot rec模块负责生成各个维度的热门结果,如分类别热门、分地域热门;tagrec生成各个标签的召回结果,如 英超 -> (item1,item2,….);item rec生成每个资讯item的相关结果;user rec nearline根据用户实时行为和离线画像负责生成用户的推荐结果;reconline响应推荐请求;item cache返回资讯的信息;uhvreceiver负责接收用户对item的行为反馈。关于架构可参考更过之前达观数据发布的推荐技术文章。为什么需要学习排序学习排序(LTR:learning to rank)是信息检索领域的经典问题,也是互联网场景中ranking这个核心算法问题。推荐整个流程可以分为召回、排序、重排序这三个阶段,通俗来说,召回就是找到用户可能喜欢的几百条资讯,排序就是对这几百条资讯利用机器学习的方法预估用户对每条资讯的偏好程度,一般以点击率衡量,所以学习排序在很多情况下等同于点击率预估,都是将用户最可能点击的资讯优先推给用户;重排序更多考虑业务逻辑,如在推荐结果的多样性、时效性、新颖性等方面进行控制。在没有学习排序之前,也可以单纯使用协同过滤算法来进行推荐。列如使用用户最近点击的资讯信息召回这些item的相关结果和偏好类别热门结果组合后进行返回。但是这对于资讯类推荐需要考虑一下问题:资讯类信息流属于用户消费型场景,item时效性要求高,item base cf容易召回较旧的内容,而且容易导致推荐结果收敛。因此可以将item的相关结果保证时效性的基础上,融合类别、标签热门结果,对各个策略的召回结果按照线上总体反馈进行排序,就可以作为用户的推荐结果。但是这一融合过程比较复杂,一种简单的方式就是看哪种召回策略总体收益越高就扩大这个策略的曝光占比,对于个体而言却显得不是特别个性化,而且在规则调参上也比较困难。LTR架构我们迅速在资讯信息流推荐场景上实践ltr算法。Ltr一般分为point wise、pairwise、list wise,一般工程上使用pointwise较多,简单,成本低,收益也可靠。简单来说,Ltr即预测user对一个未消费item的预估点击率,即:即这个预估的点击率是和user、item、context相关的。我们使用逻辑回归(logistic regression,lr)模型来搭建我们第一版的学习排序架构,lr模型简单可解释,缺点在于需要对业务特征有较深理解,特征工程比较费力,但从应用角度出发,无论是lr、ffm亦或是较新的wide& deep等模型,特征挖掘都是极其重要的一环。因此在首先基于lr模型的基础上,核心工作就是基于业务理解并发掘特征。以下是排序模型的整体推荐架构。图2:ltr整体架构1 日志过滤推荐日志详细打印了每次推荐请求的参数信息和返回信息,如屏数、请求个数、设备信息、位置信息、返回的推荐结果。推荐日志需要尽可能的考虑后期可能使用到的特征,并做好充分的记录。将推荐日志与曝光日志进行第一次join,过滤掉未曝光即用户没有看到的推荐item,这部分样本没有参考意义,可以省略;第一个join后的结果与点击日志join,即可以得到每条样本的label(0/1:未点击/点击)。两次join需要根据请求时间、userid、itemid三者进行inner join,确保数据准确。日志过滤后生成的每条样本信息如下:[请求时间、曝光时间、点击时间(如果有)、userid、最近的点击item列表、最近曝光的item列表、itemid、召回策略、屏数、曝光顺序位置、地理位置、设备信息]–> 点击label。2 特征工程经过1)的样本缺少足够的特征,我们需要补充user和item端的特征。该部分特征需要离线挖掘并提前入库。总结后的可使用特征种类大致如下:特征种类User特征:手机型号、地域、图文曝光/点击总数、视频曝光/点击总数、图文点击率、视频点击率,最近1、2、3天图文视频点击数、最近点击时间、最近一次点击是图文还是视频、一二级类别点击率、标签偏好,类别偏好、最近16次点击的素材分布、最近16次点击item的平均标题向量、曝光时间、点击时间等;item特征:itemid、类别、总体点击率、最近一周点击率、图片个数、来源、类型(图文还是视频)、发布时间、标题向量、召回策略、点击反馈ctr等;context特征:屏数、曝光顺序位置、请求时间段等;交叉特征:用户对item类别的一二级类别点击率、用户对item标签的偏好、用户对item素材类型的曝光、点击次数和点击率、最近16个点击item与预测item标题向量的余弦相似度、相似度最大值等。交叉特征对于ranking特别重要,核心在于逻辑回归函数中,如果与预测item无关的特征不会对item的排序产生影响,只有item特征或者与item交叉的特征才会对排序有实质影响,因为其他特征对任何待预测item的打分贡献是一样的。我们没有使用bagof word模型来表示标题,因为这非常稀疏,而是采用标题中关键词的word2vec向量组合生成标题表示,使用词向量来表示标题极大减少了特征规模,实现上比较方便。标题向量同时需要归一化成单位向量,单位向量的余弦相似度即两个向量的内积,这个优化显著提高了ltr在线模块的性能。我们将所有特征按类型划分为离散型、连续型、向量型三种类型。如item类别就是一个离散型特征、item ctr就是一个连续性特征、标题向量就是一个向量型特征。对于每种特征,其处理方式都会不太一样,对于离散型一般直接根据离散值做feature name,对于连续值我们部分参考youtube wide & deep论文中的等频归一化方法,简单来说加入ctr特征需要等屏成10个特征,即将ctr值按照分布取其10等分点,这10等分点就定义了10个区间,每个区间的样本数都占10%。需要注意的是,ltr在线部分需要hardcode写死这10个区间来提高特征离散化的效率。由于离线和在线都会需要User和item端特征,我们在hive数仓和ssdb集群总中都存储一份,离线负责join hive表,在线负责读取ssdb。3 模型训练与评估经过特征工程后,训练数据按照libsvm格式进行打印。使用一天的训练数据的情况下,整个特征空间规模约为30万维左右。模型训练采用sklearn的logistic regression模型进行训练,方便dump和load模型,我们采用了lbfgs算法来进行训练,lbfgs是一种拟牛顿法,不同于随机梯度下降,lbfgs总是朝着最优化梯度方向进行迭代。简单起见,我们使用N-2天前的日志做训练,N-1天前的日志做评估,需保证两部分日志的用户群体是一致的,我们再做ab测试的过程中,不能训练数据用的是1号桶,评估数据用的是2号桶。实际过程中,我们采用1500万条样本做训练,300万条样本做评估,训练完成后离线auc为0.79-0.8区间内,在线auc为0.75-0.76区间内,存在一定差距。关于auc可以自行参考技术文章,简单来说auc就是衡量模型将正样本排在负样本前面的概率,即排序能力。4 在线服务于评估我们的最终目的是要在线上流程产生收益,我们采用rpc搭建了一个ltr在线服务,负责接收online的ltr请求。推荐online在召回各个策略的结果后,会将userid、预测的itemid列表、context等信息传给ltr online,ltr online打分后返回。我们对ltr online做了充足的优化,包括标题向量的单位化、ssdb性能优化、特征离散化的优化,显著提高了性能,对200-300个item打分的平均响应时间控制在100ms以内。模型不仅需要离线评估,还需要在线评估,在线评估即评估在线样本的auc,recommend log中记录了ltr score,因此可以方便的计算在线auc。计算在线auc的目的是为了验证离线效果提升和在线效果提升的同步性。5 业务效果的提升我们在测试组上线ltr逻辑后,在点击率指标上相比原算法取得了明显的提升。如下图所示:可以明显看出上线后,基于点击率目标的ltr对于天级点击率的提升是非常明显的。问题探讨1 单机训练大规模样本由于选取的样本数较大,1000-2000万的规模,简单增大样本数可以显著提高auc,在我们的场景上在往上增加auc就似乎增加不明显了。这么大的训练样本单机训练的话显然只能用稀疏矩阵的方式来存储样本。Scipy的cs_matrix就是非常好的选择,由于sklearn的转载cs_matrix时数组下表采用int,故最大空间只能到20亿,显然2000万样本* 每个样本的平均特征数远远大于20亿,因此我们探讨了cs_matrix如何加载大规模数据的方法,最终我们参考liblinner工具包中加载libsvm格式数据的代码,当然libliner加载方式也存在问题,经过修改调试后,成功的完成了训练数据的加载,具体问题和解决方式可以参考https://blog.csdn.net/wh_spri…。2 样本和特征的时间正交样本和特征数据的时间正交即两者在时间上不应该有交叉。举个例子,前期我们在join用户端特征时,用的是1号的训练样本数据,用户离线特征用的也是1号的数据,这样两者就会存在交叉,即user点击了一篇英超新闻,同时user 画像中也偏好英超标签(由1号的点击生成),这样就会导致auc偏高,当然这种偏高就是虚假偏高,模型的泛化能力是很差的。在实际过程中,遇到过几次auc突然偏高的情况,发现大部分都是由于没有保证数据正交性导致的。在整个流程中,数据的时间正交总是被不断强调。无论是user、item特征还是样本数据,比如训练样本中一个特定user的样本按照时间排序是(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10),使用s1-s8训练,s9,s10评估是合理的,而使用s3-s10训练,s1,s2则显然是不合理的。3 预估点击率和实际点击率的一致性点击率预估基本要求就是预估的点击率要精准,如果只考虑位置的ranking,可以不用过分关心预估的绝对值,但实际情况下还是需要尽量保证预估分数的合理性,往往预估精准的ctr具有很大的参考价值。前期我们预估的点击率一直偏高,平均打分甚至达到了0.5,经过排查在于训练模型的参数设置不合理,错误的将LogisticRegression的class_weight参数设置成balanced,导致损失函数中正样本预测错误的代价增大,导致模型偏向正样本,从而导致预估的点击率极度偏高,修复成默认值预估点击率下降明显,接近实际值。具体参考:https://scikitlearn.org/stabl…。同时为了保证训练数据和在线服务完全一致性,我们调整了推荐的整体架构,更多的直接在推荐online模块负责召回和排序,这样又可以进一步保证预估点击率和实际点击率的一致。4 重要特征和 case排查lr模型可以方便debug每个样本的各个特征和权重,权重高的特征显然更加重要。如果你觉得重要的特征权重过低了或者不重要的特征权重过高了,也许就要思考为什么了。以下是一个样本的debug信息。例如我们发现ctr特征权重特别高,假设一个新item曝光了一次点击了一次,点击率是1.0,乘上ctr的权重上这个item极易被排到最前面,因此我们考虑ctr的置信度,考虑对ctr类特征做了平滑。值根据实际情况设定。总结本文详细介绍了达观数据的推荐引擎架构和在资讯信息流推荐场景中利用ltr排序显著提高业务指标的实践和经验。由于篇幅有限,关于非线性的ffm、wide & deep没有做详细介绍,而这也是算法团队一直继续投入研究的重点。关于作者文辉:达观数据联合创始人,主要负责达观数据推荐系统、爬虫系统等主要系统的研究和开发。同济大学计算机应用技术专业硕士,曾就职于盛大文学数据中心部门,负责爬虫系统、推荐系统、数据挖掘和分析等大数据系统的研发工作,在爬虫系统、Hadoop/Hive、数据挖掘等方面具备充足的研发和实践经验。

March 5, 2019 · 1 min · jiezi

Odoo 模块推荐——Web Dialog Size

好久不见,我又回来了,带着新的内容板块再次和大家见面啦~这是你没有见过的全新板块(自动播放喳喳辉发音)在新的内容板块里,我将会为大家推荐一些实用的 Odoo 模块,并且通过简单的实例来说明这些模块的使用方法和适用场景(可能会在某些时候虚构一些业务场景),除此之外我还将对部分模块的实现和源码进行简单的讲解和分析,毕竟会用不是我们的目的,知晓其核心才更有意义。今天就先推荐一个小模块吧,虽然这个模块很简单,但是却能带来很实在的用户体验上的提升。 备注名称Web Dialog Size 功能让用户可以放大弹窗到全屏宽,并且让弹窗可以拖动 商店地址点击前往商店中最高版本为 11.0仓库地址前往 GitHub仓库中最高版本为 12.0使用体验本次体验使用的 Odoo 版本是 12.0,不同版本之间可能会有细微差异,请以实际使用情况为准。模块安装之后不需要任何配置,这个模块对 Odoo 中的弹窗做了一些优化,为了看到效果我们需要找一个弹窗出来。在打开「开发者模式」后点击菜单「Update Apps List」就有一个弹窗出现:把注意力放在上图弹窗右上角的高亮处,在安装该模块前,高亮位置是没有这样的扩展图标的。在点击该图标后,弹窗的宽度发生了变化:同时扩展图标也变成了收缩图标,除了缩放图标和弹窗宽度的变化外,这个模块还让原本不能拖动的弹窗变得可以随意拖动了:适用场景上面只是简单的试用,并不能体现出这个模块的优点,那我们打开另一个弹窗再看一下效果吧:这是个人选项(在右上角下拉菜单里的「Preferences」)的弹窗,就签名(Signature)来说,在纵向高度不是很够的时候,如果横向宽度也不够宽的话,我们在富文本框内输入时,很容易就会换行,然后需要滚动文本去查看上面的内容,而把窗口放大到全屏宽之后,文本框内每行就能多显示一些字符了。又或者说在弹窗内有列表需要显示,而且字段相对较多,弹窗宽度不够就需要横向滚动列表,稍微有些麻烦,这时候将弹窗放大到全屏宽就能显示更多列的内容了。其实我觉得最有用的还是窗口拖动这个功能。不妨设想一个场景,你正在编辑一个表单页面上的 x2many 字段,你创建了一些这个字段的记录,在你又一次创建新记录并且在填写了一半的内容之后,想要看一下现在正在创建的这条记录是不是在前面已经创建过了,可是列表前面的几条数据刚好被弹窗遮挡住了,这时为了避免创建重复的数据,你不得不关闭弹窗去查看列表前面的记录,如果并没有创建过,前面填写的这么多内容就都白费了!而窗口可以拖动的话,就可以轻松地查看到被挡住的内容,然后你可以继续填写剩下的字段,舒服呀!对于我这种金鱼记忆的人来说,这个功能再好用不过了。实现浅析上面看完了怎么用,现在我们来看看怎么写。因为这是个对前端展现内容做修改的模块,核心部分基本上都在其 JS 代码中,所以我们直奔主题,打开 static/src/js/ 目录下的 JS 文件,一般情况下这种类型的模块其 JS 命名是和模块名一样的,在这个模块里就是 web_dialog_size.js 了。先来看看 willStart() 这个方法:willStart: function () { var self = this; return this._super.apply(this, arguments).then(function () { self.$modal.find(’.dialog_button_extend’).on(‘click’, self.proxy(’_extending’)); self.$modal.find(’.dialog_button_restore’).on(‘click’, self.proxy(’_restore’)); return config.done(function(r) { if (r.default_maximize) { self._extending(); } else { self._restore(); } }); });},在执行完 _super() 之后,这里只是简单地做了三件事:为扩展按钮添加点击事件,绑定方法 _extending()为收缩按钮添加点击事件,绑定方法 _restore()查询系统参数,判断弹窗是否默认为放大状态,然后执行相应的方法其中第 3 点中用到了 RPC 请求去调用模型的方法查询数据:var config = rpc.query({ model: ‘ir.config_parameter’, method: ‘get_web_dialog_size_config’,});打开模块的 models/ir_config_parameter.py 可以看到只有一个模型方法:@api.modeldef get_web_dialog_size_config(self): get_param = self.sudo().get_param return { “default_maximize”: const_eval( get_param(“web_dialog_size.default_maximize”, “False”)) }这个方法所做的就是查找系统参数中弹窗默认是否最大化的值,默认值为 False。划重点!当我们编写的前端内容需要从后台获取返回值,例如上面的获取配置信息,就可以像这个模块这样做,最后返回得到的是一个 Promise,可以使用 .then() 和 .done() 等方法链。下面再看看 opened() 这个方法:opened: function(handler) { return this._super.apply(this, arguments).then(function(){ if (this.$modal) { this.$modal.draggable({ handle: ‘.modal-header’, helper: false }); } }.bind(this));},这个方法将会在弹窗打开(open())之后执行,这里只做了一件事,让窗口可以拖动。这里是利用 jQuery UI 的 Draggable) 实现的。重点来了,Odoo 的前端用到的一个基础框架就是 jQuery UI),也就是说里面的 Widgets 和各种效果以及工具方法我们都可以在自定义 Widget 或编写扩展的时候用上,在准备实现某些相关的功能前,不妨先看看官方文档,说不定就省了很多的功夫呢 XD ...

January 17, 2019 · 1 min · jiezi

推荐几个高质量图片网站,再也不怕没图装X了

这几个图片网站都是高质量的图片网站,建议收藏!找个高逼格的图片发票圈,不再难了。Unsplash网址:https://unsplash.comUnsplash是一个免费高质量照片的网站,照片都是真实的摄影,照片分辨率也很大,全是生活中的景象作品,清新的生活气息图片可以作为桌面壁纸,也可以应用于文章配图或设计项目。Unsplash的一些摄影作品:Pexels网址:https://unsplash.comPexels是一个提供免费图片的好地方,网站整体看上去很舒服。有摄影和剪贴画,也是一个较大的照片网站,所以里面的内容相对来说就比较丰富。Pexels支持英文搜索,而且图片分类清晰,方便查找。Pexels的一些图片:picjumbo网址:https://picjumbo.comPicJumbo提供免费个人和商业使用的图像,照片质量很不错,非常适合用在文章配图和其他项目上。网站搜索不支持中文,只支持英文。PicJumbo的一些图片:Life Of Pix网址:https://www.lifeofpix.comLife Of Pix提供免费高清图像素材,质量很高,并且无版权限制,可以直接下载。Life Of Pix的一些图片:以上网站均只支持英文搜索。地址给你了,赶紧找图装X去 THANDKSEnd -一个立志成大腿而每天努力奋斗的年轻人伴学习伴成长,成长之路你并不孤单!

January 9, 2019 · 1 min · jiezi