常用服务器构架C

来公司的第一个练习项目就是做服务器,做的是性能优化,然后做了个spider,再之后做了个智能账户优化,中间有做一些零散的项目,switch什么的,也都算做C服务器吧,整理了一下,一个服务器应该具有以下功能:

1.  服务器:端口监听,收发mcpack,通用idl接口,

2. 系统架构: as 分发业务, bs 查询基础服务,一般的业务一层就可以,扛不住就两层

3. KV查询:支持文件reload,格式简单

4. 支持插件开发,保持可扩展性;

今天花了n久来替换gcc版本,其实很简单,我就是自己蛋疼,yum不行,就不知道怎么用了;
1. 从ftp://ftp.gnu.org/gnu/gcc/gcc-3.4.5/ 下载gcc版本
2. 解压缩,然后./configure –prefix=/root/local/gcc –mandir=/usr/share/man –infodir=/usr/share/info –enable-shared –enable-threads=posix –disable-checking –with-system-zlib –enable-__cxa_atexit –disable-libunwind-exceptions –enable-java-awt=gtk –host=x86_64-redhat-linux
3. make, make install
4. 设置软链接去指向新地址

2015/02/28

股票:

今天降息了,尼玛!那是毛个十字星,就是大阳线上去了哇,我在想想吧,明日思考清楚,看看图形,上周的爆拉应该就是这个原因了;

思考后得出的结论:正所谓熊市降息跌,牛市降息涨,降息和市场关系不大(继续保持这个观点);明天预计平开或者高开0.5%,冲高回落,大盘有调整的需求,从周线看,下跌放量,上涨缩量,继续保持之前观点,本周有中阴级别的调整,本周会调整超过8个点,预计明天下跌1个点,说不定会创出新高;预测图如下:

2015.3.2预测股价,日线

 

期货:

1. 中间的状态不要操作,趋势交易就做趋势交易,反趋势就做反趋势交易,不要混合搞,策略要一致;

2. 一定要有空仓期,一年只要赚几次就可以了,不需要一直满仓的,如果一直满仓,需要有几倍的利润;

3.1次1手,按k线操作,止损100刀,止盈1000刀

预测性别

一个新的用户来到网站,我们需要了解他是男是女,这是一个最简单的二分类问题,给出一个方案:
第一步是建体系,男、女:
第二步是获取样本,找10000个人,我们事先确定好他们的性别(passport或者其他,务必要准确减少噪点)作为标注结果,我们将他们过去一个月在百度上搜索的query拿出来作为样本;(选取时男女比例保证1:1,选取的query不超过5000个,避免网吧或共用电脑等情况)
第三步是获取训练集:对这些query进行切词获取特征(切成短语),去掉stopwords,然后按权重(检索量)每个人选取3000个短语作为特征生成训练集;
第四步是用不同的方法进行训练,不管svm/boost/adaboost,还是用两种方法的结合也好;

最重要的是第二步和第三步,在于选取特征,这些特征不仅仅是网民搜索过的query,还可以是他们浏览过的网页,还有一些操作行为,如访问各个频道的频次,关注吧名,是分类中最重要的,在所有的策略过程中,选特征是一条漫漫长路,也是所有分类问题中最重要的;

在写这篇文章的时候,看了看过去的总结,发现4年匆匆而过,确实是变化蛮大,我们做事情,不仅是要做的没有问题,还要讲的没有问题,让别人都听得懂,听得清楚;

2015/02/27

股票

今日大盘如昨日所料,收出小阳线0.36%,从月线上看,形态还不错,周线上个人觉得未来两周会开始跌,下周一如果没有消息出来,下周至少3235是会去的

 

预计下周一: 十字星,倾向于跌;

 

期货:

白天随便操作了一下,就亏了400刀,得出的结论是白天不允许操作;

行业推荐&行业分类

客观的说,在这个topic里面,我只参与了行业推荐这部分的事情,接下来我会先介绍推荐这部分的业务和工程,然后再讲讲具体的分类策略是怎么样做的,真实的系统不一定是按照这个来做的,因为随着时间的增长,我觉得以前的有些东西是可以不断的改进的:

在总结的过程中,看到很多以前的分享,发现前几年还能静下心来总结总结,很多有意思的事情也是慢慢积累下来的,在相同的条件下,我们为什么会比别人快,比别人聪明努力是自然的,更重要的是比别人总结的更多,我们不会重复的造轮子,所以大房子就这样一步一步慢慢的造起来了;

 

行业推荐:

行业推荐主要分为两个部分,一个部分是行业词表的生成,一个部分是行业推荐的业务情况:

行业词表的生成:

要做实时系统基本上大部分的工作都是在线下做的,线上留存的一般来说只是个KV系统(除非做实时推荐,会引入实时的排序机制),这么做的好处就是快,线上最重要的就是性能快(个人觉得)。。行业词表也是这么做的,把和业务相关的尽可能放在线下做;

主要分为两步:第一步是基础行业词表,设定候选集,这个候选集可以是搜索高的query,可以是消费高的关键词,不管是哪个,只要我们认为价值高就可以了,过行业分类工具,会获取每个词的分类和词性,将所有词按照分类进行聚类,就会得到一张表,这张表的Key是行业id,Value是该行业下对应的词,按照消费或者按照PV来排序都可以;tips一般行业分类的其他类都是不准的,所以务必在推荐时要进行删除;

第二步是根据用户来进行推荐,到这里其实是算作个性化了,因为行业分类的准确度和宽阔度和标注的体系以及标注同学的准确性有很强的关系,而在整个行业体系中,如五金类的子体系就非常非常乱,钉子、螺丝、铁丝、锁、合叶、插销、弹簧每个也许都可以作为一个子类目出去,但是实际上确没办法分的如此之细,所以在第一步的基础上,我们加了一个相似性计算,好处是什么了,当行业分的太大的时候,我们可以保证和客户相关的词排在前面;不过说白了,其实也很简单,每个推荐的词和客户的词(网页切词、已有的词)做一个相关性排序(plsa或者wordsim或者clicksim)都可以,然后对阈值较低的词进行过滤就ok了,最后生成的是一个用户+行业+词表的表,支持实时查询;

 

行业推荐的业务:

这一块的逻辑是客户进来,通过三个渠道去描述他属于哪个行业,这个渠道包括他自己的网页、他的历史已购词、他自己提供的词,去判断他所属的行业,提供几个候选项给他进行选取,选取后,用userid+行业id去获取推荐词,然后再进行一些简单的筛选就可以了;(行业也是较好的管理工具,可以按照行业来进行管理词表)

 

行业分类:

讲两种行业分类的方法:

基于种子词和二部图:先标注一部分种子词,然后词和客户相互投票,确定类别,最后收敛;

基于模型的分类:svm,adaboost,最大熵,标完再训练,就是个苦力活,取决于标注同学的知识背景和行业体系的合理性

一般来说,召回率差不多80+,准确率也差不多80+,更高就需要做更多的工作了;

 

顺带说一下聚类:

聚类就在二级行业的基础上,对行业下的客户按照特征进行聚类,得到的结果就是竞争对手;

 

分类的问题在于新的分类不容易找出,聚类的问题在于有一些聚类不明白为啥会聚在一起;

 

 

2015/02/26

股票

本日大盘先抑后扬,收盘时权重股大幅拉动指数,收盘大涨2个点,且期货大涨3.66个点,成交量明显放大,鉴于明天是二月的最后一个交易日,预计上证深证的月k线都还不错,但是仍然保持之前看法;

 

预估明日大盘:收小阳线,上涨0.5%

 

期货

已入金10w

NLP相关知识(切词/plsa)

切词:

切词可以是说是所有分析中最核心的模块,能否切出合适的词语,是所有做策略分析的关键,具体的方法我也没有去研究,基本也就是查找trie树,同时在性能上做优化,核心其实还是词表;

plsa:

plsa的英文含义是概率潜在语义分析,主要是计算两个文本的语义相关度,是根据统计学的,需要事先有词典,相关的文章可以网上查,工程上来说一般用来识别两个长文本的相似度;

wordsim:

对短文本进行特征扩展,用于计算两个 query 相似度;说简单点,就是两个词拿过来分别取抓百度或者其他搜索引擎搜索结果概要,然后切词后,计算两个的相关性;这个是依靠百度或者其他搜索引擎的相关性来判断是否相关

相关工具有,但是比较庞大,实时查询版是:获得query后,根据query拼url抓网页,截取核心区域或者title,切词后过滤stopwords(的&你&呢 等),只是一般查询的操作比较慢,所以一般会线下先做一遍查询,然后存到库里去,到时候实时查询就是查库,这个又转到一个kv系统的设计上去了,之后会讲

词性标注:postag

主要是对词语标注词性,对词语来说,词性对于判断并进行筛选是重要的选择项,但是越短的词语,准确性越差,只能作为基本参考;

中文转拼音:

常用的直接baidu就可以了;

推荐(simplesug)

这里的推荐不是相关性推荐,而是输入a把所有以a开头的中文或者因为现实出来,更好的含义应该是suggestion

clicksim

基于点击的相似性吧,word2vector 可以查这个,如果将来要用的话,虽然我没有整明白这个事情

关键词推荐

关键词推荐是来公司的第一个项目,虽然时间不长,但是时隔四年回头看看,有很多东西还是历历在目,作为总结的第一篇文章,写到这里就能想起海波、幼乐对我的指导,感慨万千;

主要从三个方面来讲,背景、业务还有架构来说:

背景:

为什么要有关键词推荐?首先需要解释关键字是什么?举个例子:小明(网民)要买鲜花送个自己的女朋友作为情人节礼物,但是他上班没办法去选花,所以他上了百度,搜索“张江鲜花快递”(关键字),找到一家合适的鲜花店(广告主),买了花送给了女朋友,在这个过程中,小明足不出户满足了自己的需求,获取了便利性;鲜花店获得了小明这个用户,卖出了一束鲜花,获取了利润;同时支付一定的报酬给百度,百度作为平台来说,方便了大家也获取了利润,这是一个三方共赢的系统,而在这个系统中,关键字作为桥梁,发挥了重要的作用;

因为网民和广告主的背景差异巨大,网民的述求成千上万,而广告主不可能也没有必要了解网民的所有述求,所以需要一个系统帮助广告主能够快速方便有效的找到他所需要的关键词,这个系统就是关键词推荐;

业务:

从业务逻辑来看,关键词推荐分为主动推荐和被动推荐;

被动推荐是什么?

被动推荐表示推荐方式不是和这个广告主相关,是通用的推荐策略,主要的策略可以分为:字面推荐和网页推荐,说简单的前者就是输入一个词然后给一堆推荐词,后者就是输入一个url给一堆的推荐词;

字面推荐

字面推荐主要是根据词来进行推荐,既有包含关系的推荐也有语义关系的推荐,举个例子:从字面来看,张江鲜花快递和鲜花快递是字面相关的,因为这是个包含关系,从语义来看:丈夫和老公是语义相关的,这些都是通用的,因为不管在哪种情况下,这些都是可以成立的,字面推荐是基础模块,主要是算两个词的相关性,是所有推荐策略中最基础和最核心的;

协同推荐

协同推荐主要是通过搜索关系来进行推荐,就是最著名的哪个啤酒和尿布的故事,搜了啤酒的人往往也会搜索尿布,通过算关键词的网民相似性,将相似性较强的关键词进行聚类,从而得到相关性词表,同时还得到了权重;

网页推荐

网页推荐的方式类似,只是不是纯粹根据字面来进行分析,会把网页抓取下来,获取核心区域,切词再根据权重获取最重要的词来进行推荐,(dom树解析、切词等以后再讲),其实目标还是根据广告主的网页来获取词,然后直接推荐这些词,因为网页上代表的信息往往是最能代表客户需要的,只要去掉高频词留下的一般都是还不错的词语;

其他一些被动推荐

其他还有一些,比如:词群,词群有很多种聚类方法,举个例子,所有网民都有一个搜索序列,比如小明搜索了“鲜花”,在搜索“鲜花快递”,再搜索“张江鲜花快递”,我们将搜索序列进行聚类,搜索的位置就是优先级,最后就会得到一个最简单的词包,搜索了鲜花的人,下一步最有可能搜索哪些词语,这就是一种推荐方式;

主动推荐做些啥?

主动推荐不需要输入关键词,也不需要输入url,因为这些系统都是系统里面有的,主动推荐根据广告主来自动推荐:

按竞争激烈程度来进行推荐:

主要是为了解决资源利用不足的情况,因为广告主的知识面是有限的,所以他们的选词策略会导致热门资源利用率特别高,但是大部分的词都是利用率不高,通过计算不同关键词的出广告条数长度,将出广告条数少的关键词优先推荐给广告主,会保证平均的出广告条数增加,从而提升整体的利用效率,这个是根据广告主的自身条件来出的,如果广告主自身的预算不足,那么可以将钱都花在刀刃上,用于这些词上;

交叉推荐:

这里主要是指按购买关系来推荐,我们假设广告主的知识背景不一样,某些广告主的能力很强,大部分广告主的能力都是中等偏下,这个时候能力强的同学总能很快很好的找到想要的关键词,我们也不能不帮助后进的同学吧,怎么做了?在历史经验上,我们去分析两个广告主的小四度,包括搜索词,包括账户结构,我们认为具有较高相似性的两个账户或者计划或者单元,在新的行为上也是类似的,如果一个账户买了一些新的词,这些新的词,对他类似的账户也有很好的借鉴性,这个就是交叉推荐;算相似性最简单的办法,用plsa来计算就好了;

行业推荐

行业推荐和一般的主动推荐不一样,算是一个组合推荐策略,主要分为行业识别、行业推荐、相关性排序:行业识别主要是根据广告主的历史信息包括一些已购词、广告主的网页信息、广告主的主动输入来判断广告主的细分行业,中间包括网页解析、切词、行业识别等一些基础服务;行业推荐主要是推荐策略,一般是构建体系表、标注数据、多分类训练生成模型、对有价值词表(高pv,高消费或者一些其他的属性)跑模型,生成推荐词表(以后文章会具体讲行业相关的);过滤筛选主要是考虑到行业细分的不够细,所以通过语义相关性分析(如plsa),对推荐的词和广告主的历史词进行相似性排序,并根据阈值进行截断,从而得到一些相关性较好的关键词;

业务还要讲两个,一个是初始的策略,一个是结束的策略,初始的策略主要是指如何将检索的行为如何进行分拆或者抽象,结束的策略主要指的是如何将结果按照最好的效果返回:

初始策略:

初始策略主要是指将长的检索词进行切词以提取更多特征,获取地域信息、时间信息,出广告策略(精确、短语、广泛),这些是用来做推荐的前提条件,是基础;

过滤策略:

在所有词获取之后,要通过一些常用的过滤策略,将不好的词过滤掉,较常见的过滤包括:黄反毒、PV、消费、地域过滤等;

 

系统架构:

这是第一个系统,系统的常用设计策略基本都展现在里面,分层,分模块:

最上面是一个switch,可以将请求进行转发,通过这个可以自由的扩展系统同时还可以设置小流量实验;

然后是主程序:包括上面说的初始策略、推荐策略、过滤策略,多线程,然后是串行结构,不同的初始策略、过滤策略、推荐策略通过adpater的方式实现,通过配置来实现不同adpter的开关;

下面是各个模块,每个模块单独部署,如果性能不够就部署多台;

 

总结:

主要的问题当时觉得性能优化,因为各种策略很多,而且是个串行的结构,依赖的外部模块太多,导致整体的逻辑比较长,会导致一次访问比较慢,中间还做了一次主动推荐优化,就是将实时的查询变成静态的数据查询来提升性能,总的来说,学到了挺多东西,来百度之前,面试最常见的问题就是大规模数据查询,我的答案就是分而治之,这个项目做完,基本上能够明白具体分而治之是怎么做了,也了解和明白了大部分的策略是怎么做的,算上打了一个还不错的基础;

 

技术文章列表

最近要开始做一些技术整理,总结这几年的技术成长和学习,先列个提纲出来:

  1. 推荐
  2. 常用服务器构架C
  3.  spider
  4. 分析平台
  5. 前端系统架构
    • 可扩展
    • 性能保证
  6. 通用网站架构
  7. 业务相关
  8. 通用技术架构