精华内容
下载资源
问答
  • 今日头条算法及技术架构分析

    万次阅读 多人点赞 2018-11-25 16:10:13
    今日头条算法及技术架构分析 ​ ​  由于好奇,所以在网上搜索了大量的今日头条算法及技术架构文章,最后想进行一个总结。 ​  下面主要介绍今日头条推荐系统概览以及内容分析、用户标签、评估分析,内容安全等...

    ​  由于好奇,所以在网上搜索了大量的今日头条算法及技术架构文章,最后想进行一个总结。

    ​  下面主要介绍今日头条推荐系统概览以及内容分析、用户标签、评估分析,内容安全等原理。

    今日头条推荐算法原理及详解

    在这里插入图片描述

    1.系统概念

    ​  推荐系统,如果用形式化的方式去描述实际上是拟合一个用户对内容满意度的函数,这个函数需要输入三个维度的变量。

    在这里插入图片描述

    ​  推荐系统,如果用形式化的方式去描述实际上是拟合一个用户对内容满意度的函数,这个函数需要输入三个维度的变量。第一个维度是内容。头条现在已经是一个综合内容平台,图文、视频、UGC小视频、问答、微头条,每种内容有很多自己的特征,需要考虑怎样提取不同内容类型的特征做好推荐。第二个维度是用户特征。包括各种兴趣标签,职业、年龄、性别等,还有很多模型刻划出的隐式用户兴趣等。第三个维度是环境特征。这是移动互联网时代推荐的特点,用户随时随地移动,在工作场合、通勤、旅游等不同的场景,信息偏好有所偏移。结合三方面的维度,模型会给出一个预估,即推测推荐内容在这一场景下对这一用户是否合适。

    ​  对上面这段话进行一个【解析】:
    ​  (1)内容特征,好理解,既是对各类文章、视频提取关键要素,比如可以通过对文本进行语义识别,识别出文章的主要关键字,视频标题关键字如何,这个工作主要目的是对文章进行画像,方便以后对客户推荐。至于能否做到视频内容的关键字提取,比如虽然标题是周杰伦相关视频,但视频内容全部是方文山的帅气身影,能否将视频中方文山这个关键字提取出来,则暂不可知,这个工作需要耗费巨大服务器资源,估计头条暂时还没有做吧。
      (2)用户特征,同上面内容特征一样,提取你的有效数据,比如经常浏览哪种类型文字、你经常搜索的关键字、你注册时登记信息的内容、还有原文提到的用什么手机之类,你是iphone我便显示这个游戏只能iphone玩,你是安卓我便显示这个游戏只能安卓玩、甚至精细的话可以将每个人的留言呀、评论呀等进行关键字提取,比如你经常评论历史内容文章,即使你浏览此类文章比较少,但是也可以作为一个关键指标进行使用,通过以上各类方式最终形成用户画像,方便后面对你进行文章视频推送。举个例子,比如在通信行业,我们经常会受到短信,推荐什么什么套餐、购买流量包之类,这就是通信公司通过客户分群、客户画像来实现的定向推送,以保证推送效果、节省推送成本,通信行业对一个人的画像会多达上千个关键指标,用户特征的提取对推荐的准确度、有效度会起到相当大的作用;
    注:画像是指对一篇文章或一个人的关键点分析,通过这些关键点则可大体了解一篇文章或者一个人的具体形象。
      (3)环境特征,比如获取你当前所在位置是否在旅游区呀,这个可以通过获取你实时位置来实现,然后与你之前经常出现的所在地进行对比等方式确认当前状态,是在家还是在旅游。如果系统检测到你在泰山游玩,则可能会相应推送泰山的类似文章资料等等,让你感觉:哇,头条好智能!
    通过上面三个方面可以作为数据基础,分析当前你处于什么环境下,结合你的用户画像以及文章的画像来推荐,尽量做到推送给你的内容都是你感兴趣的。

      这里还有一个问题,如何引入无法直接衡量的目标?

    ​  推荐模型中,点击率、阅读时间、点赞、评论、转发包括点赞都是可以量化的目标,能够用模型直接拟合做预估,看线上提升情况可以知道做的好不好。但一个大体量的推荐系统,服务用户众多,不能完全由指标评估,引入数据指标以外的要素也很重要。

    在这里插入图片描述

    ​  推荐模型中,点击率、阅读时间、点赞、评论、转发包括点赞都是可以量化的目标,能够用模型直接拟合做预估,看线上提升情况可以知道做的好不好。但一个大体量的推荐系统,服务用户众多,不能完全由指标评估,引入数据指标以外的要素也很重要。

    ​  对上面一段进行【解析】:可以量化的指标可以体现一些具体信息,但是完全靠这个并不全面,比如刷评论、转发等情况,可能就会迷惑后台计算机的分析,纯粹靠这些数据进行推荐是有问题,里面提到的【数据以外的要素】,比如当前社会热点,虽然你的文章很热,但是热点已过,也不会因为文章的点击率大而继续给你推送;还有国家政策形势呀,国家政策如有调整,你的文章内容方向已不符合则也不会再次推荐,例如房产方面文章等;上述这些数据并不存在于推荐算法数据里,所以算法无法自动完成,所以需要人工对这些数据内容进行维护设置,以完善推荐机制。

    ​  比如广告和特型内容频控。像问答卡片就是比较特殊的内容形式,其推荐的目标不完全是让用户浏览,还要考虑吸 引用户回答为社区贡献内容。这些内容和普通内容如何混排,怎样控制频控都需要考虑。

    ​  此外,平台出于内容生态和社会责任的考量,像低俗内容的打压,标题党、低质内容的打压,重要新闻的置顶、加权、强插,低级别账号内容降权都是算法本身无法完成,需要进一步对内容进行干预。

    ​  下面我将简单介绍在上述算法目标的基础上如何对其实现。

    在这里插入图片描述

    ​  前面提到的公式y = F(Xi ,Xu ,Xc),是一个很经典的监督学习问题。可实现的方法有很多,比如传统的协同过滤模型,监督学习算法Logistic Regression模型,基于深度学习的模型,Factorization Machine和GBDT等。

    ​  一个优秀的工业级推荐系统需要非常灵活的算法实验平台,可以支持多种算法组合,包括模型结构调整。因为很难有一套通用的模型架构适用于所有的推荐场景。现在很流行将LR和DNN结合,前几年Facebook也将LR和GBDT算法做结合。今日头条旗下几款产品都在沿用同一套强大的算法推荐系统,但根据业务场景不同,模型架构会有所调整。

    ​  模型之后再看一下典型的推荐特征,主要有四类特征会对推荐起到比较重要的作用。

    在这里插入图片描述

      模型之后再看一下典型的推荐特征,主要有四类特征会对推荐起到比较重要的作用。

    • 第一类是相关性特征,就是评估内容的属性和与用户是否匹配。显性的匹配包括关键词匹配、分类匹配、来源匹配、主题匹配等。像FM模型中也有一些隐性匹配,从用户向量与内容向量的距离可以得出。

    • 第二类是环境特征,包括地理位置、时间。这些既是bias特征,也能以此构建一些匹配特征。

    • 第三类是热度特征。包括全局热度、分类热度,主题热度,以及关键词热度等。内容热度信息在大的推荐系统特别在用户冷启动的时候非常有效。

    • 第四类是协同特征,它可以在部分程度上帮助解决所谓算法越推越窄的问题。协同特征并非考虑用户已有历史。而是通过用户行为分析不同用户间相似性,比如点击相似、兴趣分类相似、主题相似、兴趣词相似,甚至向量相似,从而扩展模型的探索能力。

    ​  协同特征,后面解释了,为了解决算法越推越窄的问题,比如通过你的行为、画像、环境等各类指标进行模型分析后,适合推荐给你的文章太少,应该怎么办呢,这时候就可以寻找跟你特征相同的用户,比如跟你同一个年龄段、同一个性别、同一个地区等相似用户的兴趣给你进行推荐,可以作为一个推荐的补充,以实现比较好的推荐效果。

    在这里插入图片描述

    ​  模型的训练上,头条系大部分推荐产品采用实时训练。实时训练省资源并且反馈快,这对信息流产品非常重要。用户需要行为信息可以被模型快速捕捉并反馈至下一刷的推荐效果。我们线上目前基于storm集群实时处理样本数据,包括点击、展现、收藏、分享等动作类型。模型参数服务器是内部开发的一套高性能的系统,因为头条数据规模增长太快,类似的开源系统稳定性和性能无法满足,而我们自研的系统底层做了很多针对性的优化,提供了完善运维工具,更适配现有的业务场景。

    ​  目前,头条的推荐算法模型在世界范围内也是比较大的,包含几百亿原始特征和数十亿向量特征。整体的训练过程是线上服务器记录实时特征,导入到Kafka文件队列中,然后进一步导入Storm集群消费Kafka数据,客户端回传推荐的label构造训练样本,随后根据最新样本进行在线训练更新模型参数,最终线上模型得到更新。这个过程中主要的延迟在用户的动作反馈延时,因为文章推荐后用户不一定马上看,不考虑这部分时间,整个系统是几乎实时的。

    在这里插入图片描述

    ​  但因为头条目前的内容量非常大,加上小视频内容有千万级别,推荐系统不可能所有内容全部由模型预估。所以需要设计一些召回策略,每次推荐时从海量内容中筛选出千级别的内容库。召回策略最重要的要求是性能要极致,一般超时不能超过50毫秒

    ​  名词解释:召回,说直接点,就是对符合条件的结果进行排序,以决定给你推荐文章的顺序。在业界对推荐算法是否有效进行评价的时候,需要用到召回率这个指标,举例:所有可供推荐的文章库里共有40篇文章与你的用户画像相关,实际通过推荐算法推荐给你了20篇,但实际上有10篇是你真正喜欢的文章,则召回率就是10/40=0.25,精度是10/20=0.5。整句话意思就是根据推荐算法尽量缩小推荐内容库,减少计算推荐成本。

    在这里插入图片描述

    ​  召回策略种类有很多,我们主要用的是倒排的思路。离线维护一个倒排,这个倒排的key可以是分类,topic,实体,来源等,排序考虑热度、新鲜度、动作等。线上召回可以迅速从倒排中根据用户兴趣标签对内容做截断,高效的从很大的内容库中筛选比较靠谱的一小部分内容。

    在这里插入图片描述

    2. 内容分析

    ​  内容分析包括文本分析,图片分析和视频分析。头条一开始主要做资讯,今天我们主要讲一下文本分析。文本分析在推荐系统中一个很重要的作用是用户兴趣建模。没有内容及文本标签,无法得到用户兴趣标签。举个例子,只有知道文章标签是互联网,用户看了互联网标签的文章,才能知道用户有互联网标签,其他关键词也一样。

    在这里插入图片描述

    ​  另一方面,文本内容的标签可以直接帮助推荐特征,比如魅族的内容可以推荐给关注魅族的用户,这是用户标签的匹配。如果某段时间推荐主频道效果不理想,出现推荐窄化,用户会发现到具体的频道推荐(如科技、体育、娱乐、军事等)中阅读后,再回主feed,推荐效果会更好。因为整个模型是打通的,子频道探索空间较小,更容易满足用户需求。只通过单一信道反馈提高推荐准确率难度会比较大,子频道做的好很重要。而这也需要好的内容分析。

    在这里插入图片描述

    ​  上图是今日头条的一个实际文本case。可以看到,这篇文章有分类、关键词、topic、实体词等文本特征。当然不是没有文本特征,推荐系统就不能工作,推荐系统最早期应用在Amazon,甚至沃尔玛时代就有,包括Netfilx做视频推荐也没有文本特征直接协同过滤推荐。但对资讯类产品而言,大部分是消费当天内容,没有文本特征新内容冷启动非常困难,协同类特征无法解决文章冷启动问题。

    在这里插入图片描述

    ​  今日头条推荐系统主要抽取的文本特征包括以下几类。首先是语义标签类特征,显式为文章打上语义标签。这部分标签是由人定义的特征,每个标签有明确的意义,标签体系是预定义的。此外还有隐式语义特征,主要是topic特征和关键词特征,其中topic特征是对于词概率分布的描述,无明确意义;而关键词特征会基于一些统一特征描述,无明确集合。

    在这里插入图片描述

    ​  另外文本相似度特征也非常重要。在头条,曾经用户反馈最大的问题之一就是为什么总推荐重复的内容。这个问题的难点在于,每个人对重复的定义不一样。举个例子,有人觉得这篇讲皇马和巴萨的文章,昨天已经看过类似内容,今天还说这两个队那就是重复。但对于一个重度球迷而言,尤其是巴萨的球迷,恨不得所有报道都看一遍。解决这个,实际上需要精确抽取文本特征,比如哪些文章说的是一个事儿,哪些文章基本一样等等。文本特征对于推荐的独特价值在于,没有文本特征,推荐引擎无法工作,同时,文本特征颗粒度越细,冷启动能力越强。

    ​  冷启动的意思上篇大体说过,就是在没有用户信息的时候如何进行内容推荐,比如新注册的用户或者游客,比如腾讯公司统一用QQ号作为一个用户主索引,你玩过什么游戏,听过什么歌曲,都可以作为用户画像特征应用到腾讯新闻的对你推荐文章的算法里,头条当然也可以用sina微博账号、微信账号登录时的授权,分析你曾经关注的微博账号、微信公账号信息等,作为冷启动时的用户画像数据。

    ​  同样,还有时空特征,分析内容的发生地点以及时效性。比如武汉限行的事情推给北京用户可能就没有意义。最后还要考虑质量相关特征,判断内容是否低俗,色情,是否是软文,鸡汤?

    在这里插入图片描述

    ​  上图是头条语义标签的特征和使用场景。他们之间层级不同,要求不同。

    在这里插入图片描述

    ​  分类的目标是覆盖全面,希望每篇内容每段视频都有分类;而实体体系要求精准,相同名字或内容要能明确区分究竟指代哪一个人或物,但不用覆盖很全。概念体系则负责解决比较精确又属于抽象概念的语义。这是我们最初的分类,实践中发现分类和概念在技术上能互用,后来统一用了一套技术架构。

    在这里插入图片描述

    ​  目前,隐式语义特征已经可以很好的帮助推荐,而语义标签需要持续标注,新名词新概念不断出现,标注也要不断迭代。其做好的难度和资源投入要远大于隐式语义特征,那为什么还需要语义标签?有一些产品上的需要,比如频道需要有明确定义的分类内容和容易理解的文本标签体系。语义标签的效果是检查一个公司NLP技术水平的试金石。

    ​  何为隐式语义特征呢?简单说明一下,当两个词或一组词出现在同一个文档中时,这些词之间可以被认为是语义相关的。机器并不知道某个词究竟代表什么,不知道某个词是什么意思,但是通过大量文章的学习,机器就能学习出这些词语是语义相关,比如apple跟苹果、电脑和计算机,通过这些相关性就可以对你搜索的内容、或者对你的用户画像进行匹配来推荐文章,你搜电脑,则文章特征包含计算机的文章也会推荐给你。语义标签则是明确指定词语的语义、相关性作为推荐算法的基础数据来使用,也就是让机器明确明白词语的相关性,当然后面这种算法需要耗费相当大的人力物力,但是这个工作做好之后,就保证了数据的准确性,减少了依赖于机器学习的不可控制性,当然这个功能也是一个公司自然语言处理最能展示实力的一环。

    在这里插入图片描述

    ​  今日头条推荐系统的线上分类采用典型的层次化文本分类算法。最上面Root,下面第一层的分类是像科技、体育、财经、娱乐,体育这样的大类,再下面细分足球、篮球、乒乓球、网球、田径、游泳…,足球再细分国际足球、中国足球,中国足球又细分中甲、中超、国家队…,相比单独的分类器,利用层次化文本分类算法能更好地解决数据倾斜的问题。有一些例外是,如果要提高召回,可以看到我们连接了一些飞线。这套架构通用,但根据不同的问题难度,每个元分类器可以异构,像有些分类SVM效果很好,有些要结合CNN,有些要结合RNN再处理一下。

    在这里插入图片描述

    ​  上图是一个实体词识别算法的case。基于分词结果和词性标注选取候选,期间可能需要根据知识库做一些拼接,有些实体是几个词的组合,要确定哪几个词结合在一起能映射实体的描述。如果结果映射多个实体还要通过词向量、topic分布甚至词频本身等去歧,最后计算一个相关性模型。

    3. 用户标签

    ​  内容分析和用户标签是推荐系统的两大基石。内容分析涉及到机器学习的内容多一些,相比而言,用户标签工程挑战更大。

    在这里插入图片描述

    ​  今日头条常用的用户标签包括用户感兴趣的类别和主题、关键词、来源、基于兴趣的用户聚类以及各种垂直兴趣特征(车型,体育球队,股票等)。还有性别、年龄、地点等信息。性别信息通过用户第三方社交账号登录得到。年龄信息通常由模型预测,通过机型、阅读时间分布等预估。常驻地点来自用户授权访问位置信息,在位置信息的基础上通过传统聚类的方法拿到常驻点。常驻点结合其他信息,可以推测用户的工作地点、出差地点、旅游地点。这些用户标签非常有助于推荐。

    在这里插入图片描述

    ​  ​当然最简单的用户标签是浏览过的内容标签。但这里涉及到一些数据处理策略。主要包括:

    ​ (1) 过滤噪声。通过停留时间短的点击,过滤标题党。

    ​ (2) 热点惩罚。对用户在一些热门文章(如前段时间PG One的新闻)上的动作做降权处理。理论上,传播范围较大的内容,置信度会下降。

    ​ (3) 时间衰减。用户兴趣会发生偏移,因此策略更偏向新的用户行为。因此,随着用户动作的增加,老的特征权重会随时间衰减,新动作贡献的特征权重会更大。

    ​ (4) 惩罚展现。如果一篇推荐给用户的文章没有被点击,相关特征(类别,关键词,来源)权重会被惩罚。当然同时,也要考虑全局背景,是不是相关内容推送比较多,以及相关的关闭和dislike信号等。

    在这里插入图片描述

    ​​  户标签挖掘总体比较简单,主要还是刚刚提到的工程挑战。头条用户标签第一版是批量计算框架,流程比较简单,每天抽取昨天的日活用户过去两个月的动作数据,在Hadoop集群上批量计算结果。

    在这里插入图片描述

    ​​  但问题在于,随着用户高速增长,兴趣模型种类和其他批量处理任务都在增加,涉及到的计算量太大。2014年,批量处理任务几百万用户标签更新的Hadoop任务,当天完成已经开始勉强。集群计算资源紧张很容易影响其它工作,集中写入分布式存储系统的压力也开始增大,并且用户兴趣标签更新延迟越来越高。

    在这里插入图片描述

    ​​  面对这些挑战。2014年底今日头条上线了用户标签Storm集群流式计算系统。改成流式之后,只要有用户动作更新就更新标签,CPU代价比较小,可以节省80%的CPU时间,大大降低了计算资源开销。同时,只需几十台机器就可以支撑每天数千万用户的兴趣模型更新,99%的用户可以实现发生动作后10分钟模型更新,基本可以做到准实时。这套系统从上线一直使用至今。

    在这里插入图片描述

    ​​  当然,我们也发现并非所有用户标签都需要流式系统。像用户的性别、年龄、常驻地点这些信息,不需要实时重复计算,就仍然保留daily更新。

    4. 评估分析

    ​​  上面介绍了推荐系统的整体架构,那么如何评估推荐效果好不好?

    ​​  有一句我认为非常有智慧的话,“一个事情没法评估就没法优化”。对推荐系统也是一样。

    在这里插入图片描述

    ​​  事实上,很多因素都会影响推荐效果。比如侯选集合变化,召回模块的改进或增加,推荐特征的增加,模型架构的改进在,算法参数的优化等等,不一一举例。评估的意义就在于,很多优化最终可能是负向效果,并不是优化上线后效果就会改进。

    在这里插入图片描述

    ​​  全面的评估推荐系统,需要完备的评估体系、强大的实验平台以及易用的经验分析工具。所谓完备的体系就是并非单一指标衡量,不能只看点击率或者停留时长等,需要综合评估。过去几年我们一直在尝试,能不能综合尽可能多的指标合成唯一的评估指标,但仍在探索中。目前,我们上线还是要由各业务比较资深的同学组成评审委员会深入讨论后决定。

    ​​  很多公司算法做的不好,并非是工程师能力不够,而是需要一个强大的实验平台,还有便捷的实验分析工具,可以智能分析数据指标的置信度。

    在这里插入图片描述

    ​​  一个良好的评估体系建立需要遵循几个原则,首先是兼顾短期指标与长期指标。我在之前公司负责电商方向的时候观察到,很多策略调整短期内用户觉得新鲜,但是长期看其实没有任何助益。

    ​​  其次,要兼顾用户指标和生态指标。今日头条作为内容分创作平台,既要为内容创作者提供价值,让他更有尊严的创作,也有义务满足用户,这两者要平衡。还有广告主利益也要考虑,这是多方博弈和平衡的过程。

    ​​  另外,要注意协同效应的影响。实验中严格的流量隔离很难做到,要注意外部效应。

    在这里插入图片描述

    ​​  强大的实验平台非常直接的优点是,当同时在线的实验比较多时,可以由平台自动分配流量,无需人工沟通,并且实验结束流量立即回收,提高管理效率。这能帮助公司降低分析成本,加快算法迭代效应,使整个系统的算法优化工作能够快速往前推进。

    在这里插入图片描述

    ​​  这是头条A/B Test实验系统的基本原理。首先我们会做在离线状态下做好用户分桶,然后线上分配实验流量,将桶里用户打上标签,分给实验组。举个例子,开一个10%流量的实验,两个实验组各5%,一个5%是基线,策略和线上大盘一样,另外一个是新的策略。

    在这里插入图片描述

    ​​  实验过程中用户动作会被搜集,基本上是准实时,每小时都可以看到。但因为小时数据有波动,通常是以天为时间节点来看。动作搜集后会有日志处理、分布式统计、写入数据库,非常便捷。

    ​

    ​​  在这个系统下工程师只需要设置流量需求、实验时间、定义特殊过滤条件,自定义实验组ID。系统可以自动生成:实验数据对比、实验数据置信度、实验结论总结以及实验优化建议。

    在这里插入图片描述

    ​​  当然,只有实验平台是远远不够的。线上实验平台只能通过数据指标变化推测用户体验的变化,但数据指标和用户体验存在差异,很多指标不能完全量化。很多改进仍然要通过人工分析,重大改进需要人工评估二次确认。

    5. 内容安全

    在这里插入图片描述

    ​​  最后要介绍今日头条在内容安全上的一些举措。头条现在已经是国内最大的内容创作与分发凭条,必须越来越重视社会责任和行业领导者的责任。如果1%的推荐内容出现问题,就会产生较大的影响。

    ​​  因此头条从创立伊始就把内容安全放在公司最高优先级队列。成立之初,已经专门设有审核团队负责内容安全。当时研发所有客户端、后端、算法的同学一共才不到40人,头条非常重视内容审核。

    在这里插入图片描述

    ​​  现在,今日头条的内容主要来源于两部分,一是具有成熟内容生产能力的PGC平台,一是UGC用户内容,如问答、用户评论、微头条。这两部分内容需要通过统一的审核机制。如果是数量相对少的PGC内容,会直接进行风险审核,没有问题会大范围推荐。UGC内容需要经过一个风险模型的过滤,有问题的会进入二次风险审核。审核通过后,内容会被真正进行推荐。这时如果收到一定量以上的评论或者举报负向反馈,还会再回到复审环节,有问题直接下架。整个机制相对而言比较健全,作为行业领先者,在内容安全上,今日头条一直用最高的标准要求自己。

    在这里插入图片描述

    ​​  分享内容识别技术主要鉴黄模型,谩骂模型以及低俗模型。今日头条的低俗模型通过深度学习算法训练,样本库非常大,图片、文本同时分析。这部分模型更注重召回率,准确率甚至可以牺牲一些。谩骂模型的样本库同样超过百万,召回率高达95%+,准确率80%+。如果用户经常出言不讳或者不当的评论,我们有一些惩罚机制。

    在这里插入图片描述

    ​​  泛低质识别涉及的情况非常多,像假新闻、黑稿、题文不符、标题党、内容质量低等等,这部分内容由机器理解是非常难的,需要大量反馈信息,包括其他样本信息比对。目前低质模型的准确率和召回率都不是特别高,还需要结合人工复审,将阈值提高。目前最终的召回已达到95%,这部分其实还有非常多的工作可以做。头条人工智能实验室李航老师目前也在和密歇根大学共建科研项目,设立谣言识别平台。

    今日头条算法原理文章的思维导图

    在这里插入图片描述

    参考资料:今日头条推荐算法原理及详解

    ​​  ​  ​ 全解今日头条大数据算法原理(附PPT&视频)

    ​​  ​  ​ 今日头条算法原理笔记和思考

    ​​  ​  ​ 今日头条的推荐算法原理分析

      收集资料,码字,整理,最后排版都不容易,如果觉得对你有用的话,凑个奶茶钱(非强制啊,只是想犒劳自己一下)~

     微信         支付宝
    微信收款码支付宝收款码

    展开全文
  • 无人驾驶关键技术分析

    千次阅读 2018-03-29 15:25:57
    无人驾驶关键技术分析 ...(1)环境感知技术环境感知模块相当于无人驾驶汽车的眼和耳,无人驾驶汽车通过环境感知模块来辨别自身周围的环境信息。为其行为决策提供信息支持。环境感知包括无人驾驶汽车自身位姿感知...

    无人驾驶关键技术分析

     

    无人驾驶技术是传感器、计算机、人工智能、通信、导航定位、模式识别、机器视觉、智能控制等多门前沿学科的综合体。按照无人驾驶汽车的职能模块,无人驾驶汽车的关键技术包括环境感知、导航定位、路径规划、决策控制等。

    (1)环境感知技术

    环境感知模块相当于无人驾驶汽车的眼和耳,无人驾驶汽车通过环境感知模块来辨别自身周围的环境信息。为其行为决策提供信息支持。环境感知包括无人驾驶汽车自身位姿感知和周围环境感知两部分。单一传感器只能对被测对象的某个方面或者某个特征进行测量,无法满足测量的需要。因而,必需采用多个传感器同时对某一个被测对象的一个或者几个特征量进行测量,将所测得的数据经过数据融合处理后。提取出可信度较高的有用信号。按照环境感知系统测量对象的不同,我们采用两种方法进行检测:无人驾驶汽车自身位姿信息主要包括车辆自身的速度、加速度、倾角、位置等信息。这类信息测量方便,主要用驱动电机、电子罗盘、倾角传感器、陀螺仪等传感器进行测量。

    无人驾驶汽车周围环境感知以雷达等主动型测距传感器为主,被动型测距传感器为辅,采用信息融合的方法实现。因为激光、雷达、超声波等主动型测距传感器相结合更能满足复杂、恶劣条件下,执行任务的需要,最重要的是处理数据量小,实时性好。同时进行路径规划时可以直接利用激光返回的数据进行计算,无需知道障碍物的具体信息。

    而视觉作为环境感知的一个重要手段,虽然目前在恶劣环境感知中存在一定问题。但是在目标识别、道路跟踪、地图创建等方面具有其他传感器所无法取代的重要性,而在野外环境中的植物分类、水域和泥泞检测等方面,视觉也是必不可少的手段。

    (2)导航定位技术

    无人驾驶汽车的导航模块用于确定无人驾驶汽车其自身的地理位置,是无人驾驶汽车的路径规划和任务规划的之支撑。导航可分为自主导航和网络导航两种。

    自主导航技术是指除了定位辅助之外,不需要外界其他的协助,即可独立完成导航任务。自主导航技术在本地存储地理空间数据,所有的计算在终端完成,在任何情况下均可实现定位,但是自主导航设备的计算资源有限,导致计算能力差,有时不能提供准确、实时的导航服务。现有自主导航技术可分为三类:

    相对定位:主要依靠里程计、陀螺仪等内部感受传感器,通过测量无人车相对于初始位置的位移来确定无人车的当前位置。

    绝对定位:主要采用导航信标.主动或被动标讽地图匹配或全球定位系统进行定位。

    组合定位:综合采用相对定位和绝对定位的方法,扬长避短,弥补单一定位方法的不足。组合定位方案一般有GPs+地图匹配、GPs+航迹推算、GPs+航迹推算+地图匹配、GPs+GLONAss+惯性导航+地图匹配等。

    网络导航能随时随地通过无线通信网络、交通信息中心进行信息交互。移动设备通过移动通信网与直接连接于Internet的web GIs服务器相连,在服务器执行地图存储和复杂计算等功能,用户可以从服务器端下载地图数据。

    网络导航的优点在于不存在存储容量的限制、计算能力强。能够存储任意精细地图,而且地图数据始终是最新的。

    (3)路径规划技术

    路径规划是无人驾驶汽车信息感知和智能控制的桥梁,是实现自主驾驶的基础。路径规划的任务就是在具有障碍物的环境内按照一定的评价标准,寻找一条从起始状态包括位置和姿态到达目标状态的无碰路径。

    路径规划技术可分为全局路径规划和局部路径规划两种。全局路径规划是在已知地图的情况下,利用已知局部信息如障碍物位置和道路边界,确定可行和最优的路径,它把优化和反馈机制很好的结合起来。局部路径规划是在全局路径规划生成的可行驶区域指导下,依据传感器感知到的局部环境信息来决策无人平台当前前方路段所要行驶的轨迹。全局路径规划针对周围环境已知的情况,局部路径规划适用于环境未知的情况。

    路径规划算法包括可视图法、栅格法、人工势场法、概率路标法、随机搜索树算法、粒子群算法等。

    (4)决策控制技术

    决策控制模块相当于无人驾驶汽车的大脑,其主要功能是依据感知系统获取的信息来进行决策判断,进而对下一步的行为进行决策,然后对车辆进行控制。决策技术主要包括模糊推理、强化学习、神经网络和贝叶斯网络等技术。

    决策控制系统的行为分为反应式、反射式和综合式三种方案:反应式控制是一个反馈控制的过程,根据车辆当前位姿与期望路径的偏差,不断地调节方向盘转角和车速,直到到达目的地。

     

    展开全文
  • Spring5.x源码分析——从踩坑到放弃之环境搭建 前言 自从Spring发行4.x后,很久没去好好看过Spring源码了,加上最近半年工作都是偏管理和参与设计为主,在技术细节上或多或少有点疏忽,最近心血来潮想重新...

    Spring5.x源码分析——从踩坑到放弃之环境搭建


    前言

    自从Spring发行4.x后,很久没去好好看过Spring源码了,加上最近半年工作都是偏管理和参与设计为主,在技术细节上或多或少有点疏忽,最近心血来潮想重新看下Spring源码,对以往Spring知识点做下回顾,但是在构建环境的过程中出现了各种问题,经过把一个个坑修复后,最终还是成功把单测运行起来,没有报编译错误或者其他异常,总结了以下一些环境搭建步骤,希望大家搭建过程都顺顺利利,踏上Spring源码分析之旅!


    Spring5.x整体架构回顾

    这里写图片描述

    第一、前期运行环境与工具准备

    • JDK版本:1.8.0_161
      • 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    • GRADLE版本:4.9
      • 下载地址:https://gradle.org/releases/
      • 配置教程:https://www.cnblogs.com/linkstar/p/7899191.html
    • Spring源码版本:v5.0.8.RELEASE
      • 下载地址:https://github.com/spring-projects/spring-framework/releases
    • IntelliJ IDEA版本:IntelliJ IDEA 2018.2.1 (Ultimate Edition)
      • 下载地址:https://www.jetbrains.com/idea/download/
    • 系统:WINDOWS 10

    第二、下载源码

    下载源码可以直接到Spring源码仓库 下载v5.0.8.RELEASE版本的zip包在本地解压,也可以通过fork方式把它fork到自己仓库,方便后续更新维护。
    我已经配置好了,如果不想麻烦的同学可以直接到我的github拉取Spring源码https://github.com/Evan43789596/eshare-spring-framework,记得切换到 ftr_spring_learning分支
    这里写图片描述

    下载到本地解压如下:
    这里写图片描述
    上图用红框圈出来的几个文件要重点关注下:-

    • build.gradle 放了一些依赖配置,有点像maven的pom文件
    • gradle.properties 存放当前Spring的版本,可以对比下看看是不是5.0.8版本
    • gradlew.bat 放的是项目的构建脚本,不过在本章用不上,本章是使用IDEA去构建
    • import-into-idea.md 这个是Spring导入IDEA的说明文件,可以根据里面的步骤去导入

    第三、导入IDEA

    1.点击File->Open打开项目

    这里写图片描述
    下载的jar包会存放在上图配置的路径:
    这里写图片描述


    2.修改docs.gradle文件

    如果是在我的github仓库下载的源代码包,可以忽略这一步,我已经配置好了。

    打开docs.gradle文件
    这里写图片描述


    3.注释掉dokka和asciidoctor两个配置项

    这里写图片描述

    为什么要注释掉这两项配置?
    因为这个版本的源代码在我本地构建过程中执行这两个任务时会导致构建失败,这两个任务主要是用来生成文档使用,对主流程并没有任何影响,可以直接忽略,当然如果大家本地没有这个问题,也可以不注释。


    4.替换docs.gradle文件中的task schemaZip配置

    在gradle的构建脚本,只针对Linux系统做了适配,需要把task schemaZip替换成下面代码,因为原有代码的路径符号“/”是针对Linux的,windows使用会有问题,在windows环境需要替换成"\\",否则会出现如下异常:

    * What went wrong:
    Failed to capture snapshot of input files for task ':distZip' property 'rootSpec$1$3' during up-to-date check.
    > Failed to create MD5 hash for file 'D:\repository\spring-framework-5.0.8.RELEASE\build\distributions\spring-framework-5.0.8.RELEASE-schema.zip'.
    
    * Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Get more help at https://help.gradle.org
    
    BUILD FAILED in 1m 43s
    254 actionable tasks: 3 executed, 251 up-to-date
    

    参考如下代码,注释部分是原有的代码:

    //task schemaZip(type: Zip) {
    //	group = "Distribution"
    //	baseName = "spring-framework"
    //	classifier = "schema"
    //	description = "Builds -${classifier} archive containing all " +
    //			"XSDs for deployment at http://springframework.org/schema."
    //	duplicatesStrategy 'exclude'
    //	moduleProjects.each { subproject ->
    //		def Properties schemas = new Properties();
    //
    //		subproject.sourceSets.main.resources.find {
    //			it.path.endsWith("META-INF/spring.schemas")
    //		}?.withInputStream { schemas.load(it) }
    //
    //		for (def key : schemas.keySet()) {
    //			def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
    //			assert shortName != key
    //			File xsdFile = subproject.sourceSets.main.resources.find {
    //				it.path.endsWith(schemas.get(key))
    //			}
    //			assert xsdFile != null
    //			into (shortName) {
    //				from xsdFile.path
    //			}
    //		}
    //	}
    //}
    task schemaZip(type: Zip) {
    	group = "Distribution"
    	baseName = "spring-framework"
    	classifier = "schema"
    	description = "Builds -${classifier} archive containing all " +
    			"XSDs for deployment at http://springframework.org/schema."
    	duplicatesStrategy 'exclude'
    	moduleProjects.each { subproject ->
    		def Properties schemas = new Properties();
    
    		subproject.sourceSets.main.resources.find {
    			it.path.endsWith("META-INF\\spring.schemas")
    		}?.withInputStream { schemas.load(it) }
    
    		for (def key : schemas.keySet()) {
    			def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
    			assert shortName != key
    			File xsdFile = subproject.sourceSets.main.resources.find {
    				it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\'))
    			}
    			assert xsdFile != null
    			into (shortName) {
    				from xsdFile.path
    			}
    		}
    	}
    }
    

    5.根据import-into-idea.md文档步骤去构建

    根据import-into-idea.md文档里面介绍,我们需要对spring-core和spring-oxm做预编译,可以通过以下命令./gradlew :spring-oxm:compileTestJava,在IDEA比较简单,对这两个包分别按下图操作即可:
    这里写图片描述


    6.终极构建Spring项目

    最后一步,对整个Spring项目构建,这个时候它会自动下载依赖包,如果有异常,会在控制台抛出并停止操作。
    这里写图片描述

    构建成功在控制台可以看到下图提示
    这里写图片描述


    第四、执行单元测试

    即使整个项目没有error或者红点,也不代表项目已经成功构建好了,我们还需要执行个单元测试试下,如果能顺利执行单元测试,那证明该项目已经构建成功,这里我用到的是DispatcherServletTests这个类,直接运行查看结果:
    这里写图片描述
    很明显,上面单元测试类的所有单测执行成功,证明该项目已经构建完毕,可以开始开启Spring源码分析旅程啦!!!


    第五、可能遇到的坑点回顾

    • 构建成功没报错,但运行单元测试有异常 ,提示类找不到
      • **方案1:**尝试点击右边菜单栏projects刷新项目,然后对Spring(Root)模块先clean再build一次
      • **方案2:**针对找不到类的模块重新build一次
      • **方案3:**点击Spring(root)模块下的Tasks->other->compileTestJava 执行一遍,针对test类编译一次即可
    • 构建失败,缺少依赖包
      • **方案1:**对Spring(Root)模块先clean再build一次(建议打开VPN,有可能存在某些包下载不成功导致)
      • **方案2:**尝试针对当前模块执行buildDependents
    • 构建失败,执行gradle task失败
      • **方案1:**可能是当前运行环境版本不支持问题,如果不重要的问题,可以注释掉,保证构建正常
    • 构建失败,编码异常
      • **方案1:**可以通过idea工具设置:Editor-File encodings 全部设置为UTF-8

    可以参考我另一篇文章:
    https://blog.csdn.net/Evan_Leung/article/details/95903083

    展开全文
  • 当前,用python做数据分析已经成为了一个趋势,所以,作为一个技术白痴的大学生,我也决定入坑了。 但是入坑之前,有件事我要确定好,用python该如何去做数据分析?我该选择什么样的IDE?要用的库有哪些? 收集这些...

    python数据分析笔记(1):搭建python的数据分析环境(Mac系统下)

    笔者是一个技术小白,也是第一次写博客,所以如果有什么问题还请看到博客的各位多多指教。
    当前,用python做数据分析已经成为了一个趋势,所以,作为一个技术白痴的大学生,我也决定入坑了。
    但是入坑之前,有件事我要确定好,用python该如何去做数据分析?我该选择什么样的IDE?要用的库有哪些?
    收集这些资料和搭建开发环境确实用了我很多时间,为了避免以后让我或者让其他想学习python做数据分析的朋友节省时间,我想把我的经验写到这里。(这里打个备注哈,因为我的电脑是MacOSX系统的,所以我的开发环境是在这个系统下搭建的,如果用别的系统搭建的,还请查看其它博客。
    

    一、安装python的IDE

    首先,要选择python的IDE,在这里,我认为对于我这种小白来说,pycharm真的是再好不过的选择了。那我们该如何下载pycharm?笔者用的是pycharmedu,作为学习已经够用了,点击下面的链接可以进入到pycharmedu的下载页面:
    pycharmedu下载
    下载之后就是安装了,安装特别简单,如下图所示,直接拖图标就好了。
    这里写图片描述

    二、搭建数据分析环境

    在这一步进行之前,我要说明一点的就是,pycharm本身并没有集成像numpy,matplotlib,pandas等等这些常见的数据分析包,所以我们还需要通过其它的方式把这些包安装到我们的电脑上。但是传统的方式繁琐又麻烦,所以我们选择直接下载anaconda。
    anaconda下载
    这里面可以选择python2.7或者python3.5,笔者选用的是python2.7,所以点击蓝色图标,就可以一键下载了。
    这里写图片描述
    anaconda的安装也非常简单,根据步骤走就可以了。这里面有个小建议,当安装到如下这步时,建议将anaconda安装到应用程序下,方便管理。
    这里写图片描述

    这里写图片描述

    三、在pycharm下配置anaconda路径

    点击pycharmedu图标
    这里写图片描述
    点击create new project
    这里写图片描述
    点击小齿轮的图标,选择add local找到下图所示路径,点击ok,就配置好了。
    这里写图片描述
    现在我们来测试一下:
    这里写图片描述
    运行出来没有报错,表明安装成功。

    展开全文
  • 云计算技术简述及发展分析

    千次阅读 2020-08-31 17:30:46
    如今,云计算服务是企业最先进的技术,市场还将继续加速变化,各个云计算提供商之间的竞争继续升温。云计算后端具有非常庞大、可靠的云计算中心,对于云计算使用者来说,在付出少量成本的前提下,即可获得较高的用户...
  • 数据传输加密技术分析

    万次阅读 2015-12-23 21:03:46
    信息技术的不断发展使得互联网的双刃剑效应日渐显现。许多不法分子、不法组织或间谍机构也充分利用网络隐蔽资源的“暗房”,将罪恶的触角伸向他人、别国的个人隐私、战略秘密,肆意窃取或非法传播这些信息,以达到...
  • OFDM系统的关键技术分析

    万次阅读 热门讨论 2017-01-02 17:31:14
    OFDM系统的关键技术分析 【摘要】正交频分复用(OFDM)技术以其频谱利用率高、抗多径和脉冲噪声、在高效带宽利用率情况下的高速传输能力、根据信道条件对子载波进行灵活调制及功率分配的能力,己在数字音频广播、...
  • 网络安全第五讲 网络攻击技术分析

    万次阅读 多人点赞 2020-10-24 17:06:30
    网络信息安全第五讲 网络攻击技术分析 按照攻击目的,可将攻击分为破坏型和入侵型两种类型。 破坏型攻击以破坏目标为目的,但攻击者不能随意控制目标的系统资源。 入侵型攻击以控制目标为目的,比破坏型攻击威胁更...
  • 大数据分析与应用技术创新平台

    万次阅读 2018-11-15 16:54:48
    大数据分析与应用技术创新平台   张平文, 鄂维南, 袁晓如, 傅毅明 北京大学数学科学学院,北京 100871  北京大学大数据科学研究中心,北京 100871   北京大学信息科学技术学院,北京 100871   北京...
  • 天龙八部技术分析报告

    千次阅读 2010-05-07 21:58:00
    刘洋通过一段时间对天龙八部这款游戏进行分析研究,主要从客户端入手,从技术角度学习天龙八部游戏中各种实现机制。最终写成此文,献给搜狐游戏,以表敬意。本文主要分为三个部分,分别是1 天龙八部基本技术实现技术...
  • 主流分布式存储技术的对比分析与应用

    万次阅读 多人点赞 2019-06-03 17:03:01
    摘 要: 随着数字化转型的深入,海量数据对存储提出了新的要求。传统存储虽然有技术成熟、性能良好、可用性高等优点,但面对海量数据,其缺点也越来越明显:如扩展性差、...当前,分布式存储有多种实现技术,如HD...
  • 网络流量分析技术 科普

    千次阅读 2013-03-12 13:20:37
    随着IT、网络技术的迅猛发展和企业信息...企业需要有相应的技术手段,明确了解网络上各种应用的带宽占用情况,分析用户流量行为,以便合理的规划和分配网络带宽,有效地保障关键业务应用的正常运行。 与此相适应,网
  • 对于以技术为核心的技术博客来说,人们是冲着他们需要的内容去的,绝大多数情况下都不是在闲逛。如果你的网站里没有他想要的东西的话,他便会离开,人们是出于目的去搜索,基于动机,而不是无聊的在闲逛。无聊的话,...
  • TD—LTE小区切换技术分析和建议

    千次阅读 2017-09-22 13:32:24
    TD—LTE小区切换技术分析和建议   作者: 张长青       【摘要】小区切换是TD-LTE系统的重要技术之一,小区切换的成功与否直接决定用户感知感受。首先简述了无线蜂窝通信系统小区切换的类型...
  • 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 正文 概述 HDFS ...
  • 一、环境感知 通过融合激光雷达(Lidar)、相机(camera)、毫米波雷达(millimeter wave Radar)等多种传感器的数据获取周围环境的大量信息(包括:障碍物的位置、速度及可能的行为,可行驶的区域,交通规则等) ...
  • OLAP(在线分析处理)技术

    千次阅读 2005-11-30 14:59:00
    OLAP(在线分析处理)技术 一、 发展背景 60年代,关系数据库之父E.F.Cdd提出了关系模型,促进了联机事务处理(OLTP)的发展(数据以表格的形式而非文件方式存储)。1993年,E.F.Cdd提出了OLAP(联机分析处理)概念,...
  • 区块链技术与应用行业分析报告

    万次阅读 2018-02-27 13:02:30
    (3)区块链+日益深入,场景化技术成为新趋势;(4)中国区块链技术专利申请数量全球第一(550份) (5)加密货币价格创下250亿美元的历史新高;(6)ICO的异军突起,持续占领创投圈;(7)国内叫停ICO,封杀比特币...
  • 导出当前域内所有用户hash的技术整理 三好学生 · 2015/07/03 15:06 0x00目标: 导出当前域内所有用户的hash 0x01测试环境: 域控:server2008 r2 杀毒软件:已安装* 域控权限:可使用net use远程登陆...
  • Tomcat可以从两个方面去分析:本身的设置(本身的模式,各种的连接数,最大连接数),运行环境的性能(java虚拟机) Tomcat运行需要jre,jre最核心的是:jvm(java虚拟机) jvm:既然是虚拟机,也涉及cpu,内存 ...
  • 首先环境的对于经济的发展是重要的物质基础,我们今天所说的要在发展经济的同时保护好环境不受破坏,在发展经济的同时如果破坏了环境,那么自然也会给我们带来一些惩罚,如:重大的洪灾、干旱、地震等,自然的规律...
  • 接下来,本文阐释了大数据分析技术,对大数据在信息安全领域尤其是安全管理平台领域的应用做了深入分析,并给出了基于大数据安全分析技术的安全管理平台的基本特征。最后,针对启明星辰推出的基
  • 技术架构分析:攻克Dota2的OpenAI-Five

    千次阅读 2018-06-28 00:24:54
    本文主要对其模型技术架构做一些分析总结。 一、 模型输入与输出 模型的输入是使用RAM(内存信息),如位置坐标,技能血量数值状态等,而不是图像像素信息。 模型输入主要分为两个部分: 直接观测的信息:场面其他英雄...
  • Eclipse平台架构技术分析及基于RCP的应用研究摘 要 由于Eclipse提供了一个开放灵活的框架,Eclipse技术现在广为流行,基于Eclipse构架的应用越来越多。本文先对Eclipse的结构进行了剖析,分析了Eclipse使用的技术...
  • 由于存在不同的网络和不同的终端,客户对于视频编码的可伸缩性方面的要求也越来越迫切,因此SVC技术应运而生,成为当前网络视频监控的热门话题,势必将引领下一代网络视频技术的发展方向。   SVC,即Scalable ...
  • 最全的区块链技术分析和总结(附知识图谱)

    万次阅读 多人点赞 2018-07-27 06:14:03
    区块链是加密货币背后的技术,与基础语言或平台等差别较大,它本身不是新技术,类似Ajax,可以说它是一种技术架构,所以我们从架构设计的角度谈谈区块链的技术实现。 无论你擅长什么编程语言,都能够参考这种设计去...
  • 自动驾驶整体技术实现层级 自动驾驶系统可分为感知层、决策层、执行层 L4级自动驾驶系统实现在特定区域内对车辆操作的完全接管...基于当前技术发展情况,我们在本部分主要讨论车辆内部所采用的一些传感器和计算单元...
  • 多源异构环境下数据同步复制技术的研究 电子技术应用 2016-02-21 13:44 摘 要: 针对多源异构环境下数据的特点,提出一种数据同步复制新方案。该方案解决了多源异构环境下数据库的访问,数据的获取与复制,动态...
  • “白加黑”是民间对一种DLL劫持技术的通俗称呼,现在很多恶意程序利用这种劫持技术来绕过安全软件的主动防御以达到加载自身的目的,是目前很火的一种免杀手段。本文将针对此类病毒做了一个简单技术介绍和案例演示。 ...
  • 关于当前若干主流网络仿真软件的综述及实例应用分析撰文:周翔摘要:网络仿真是进行网络技术研究的一种基本手段。在新技术的研究过程中,由于各种原因,实际网络系统的实现往往是代价较高或是不现实的。在这种情况下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,896
精华内容 115,958
关键字:

当前技术环境分析