专访POWER 8编程挑战赛选手黄文超:非专科生的编程算法之路

9月23日,IBM和CSDN联合宣布“ 2014 POWER 8极限性能挑战赛 ”正式启动。此次大赛主要面向广大CSDN注册开发者,大赛以云计算的方式为开发者提供了POWER 8开发环境,开发者利用POWER 8的特性,基于不同场景进行应用开发。此次大赛,不仅使更多的开发者充分利用了POWER 8,也为开发者、技术达人提供一个展示自我的舞台。

正如大赛发布仪式上,IBM大中华区副总裁侯淼所言,之所以要支持这样一个大赛,目的就是希望吸引更多的开发者去开发一些新的算法,把整个POWER 8引擎的能力激活开来。

“U Can U Up”是这次挑战赛的口号,开发者可以通过登陆注册、申请资源、完成挑战,主办方最终根据各自的累积评分赢取礼品奖励。在比赛期间,主办方将定期公布挑战题目,采用月度赛制对参赛者进行排名评定。

第一期的挑战题目为“博客反垃圾”,具体任务为CSDN提供海量的博文数据,并按特定比率混入垃圾文章,参赛者需开发相应的系统将垃圾博文从中抽取出来。需要说明的是,大赛主要考察程序的是算法的正确率及处理速度,对开发语言、开发工具并不进行限定。

到目前为止,已经有数百名开发者报名并参加了此次大赛,为了让更多的开发者了解此次大赛的进展情况,日前,我们专访了其中一位参赛选手 逸云计算机科技有限公司 CEO/总裁黄文超 ,希望通过他的参赛经历,吸引更多的技术达人参与到大赛之中。

以下为采访内容:

1.可否介绍一下你的技术开发经历?目前,主要关注哪些技术领域?

黄文超:大学阶段: 我是 2009年于郑州大学电子科学与技术系毕业的,在校期间参加过数学建模竞赛(2007全国一等奖)、ACM/ICPC(2008合肥赛区铜奖)。

因为本身不是计算机专业,所以在大学里面除了算法、数据结构方面,对计算机语言仅限于初步的 C/C++ 和 MATLAB 使用。

工作阶段: 2009年毕业后进入银行工作,主要用 .NET系列技术进行一些内部系统的开发。 在银行进行一些编程以外的技术工作,包括网络管理、服务器维护等。

2012年开始自学转型使用PHP,同样完成一些银行内部系统的开发。 主要的项目包括独立完成的《绩效考核系统》、《自动化审批系统》等。

此后在工作期间接收一些企业网站开发之类的项目,基本上用 WordPress实现,熟悉通过深度定制 WordPress(模板、插件)进行网站建设。目前为止通过 WordPress 建设并维护的网站超过10个。

创业阶段: 2014年开始自己创业,技术转型 Python,主要使用Django框架进行开发,对前端、HTML5等技术有初步的理解和实践经验,并了解掌握基本的Linux服务器环境部署。

目前主要关注的技术领域为 Web开发相关主题,包括前端技术、以及Web开发全过程的相关内容。另外本人对算法设计有强烈的兴 趣,每年都会参加各大公司举办的算法比赛,并获得过不错的成绩(2009年进入百度之星决赛)(例如 Google Code Jam、百度之星、TopCoder Open 等等)

2. 区分垃圾ID数据和正常ID数据的核心关键是什么?可否借此展开描述一下所设计算法的基本思路?

黄文超: 现在判断垃圾数据主要有三种类型:

  1. 内容缺失或混乱:博客内容过度简短,没有实质性内容,或者是充斥无意义的文字堆砌;
  2. 具有大量有问题的输出外链:这个主要从目的上考虑,垃圾博客是通过这种手段进行外链的输出,以达到欺骗搜索引擎、违规推广等作弊效果的,因此从外链的数量、质量、相似性方面进行判别,可以识别此类垃圾博客;
  3. 主题无关:根据本次 CSDN的博客来看,正常博客和垃圾博客的主题是有较大差别的,主要通过词频 统计来进行识别。这一点是进行识别的主要算法,首先通过小批量的人工标注提取一部分的正常博客和垃圾博客,对所有的文章过滤、分词并计算关键词的“逆文本 频率指数(IDF)”,并通过标注的正常博客和垃圾博客提取特征向量,然后对于每篇博客,比较其关键词特征向量与这两个特征向量的余弦夹角,进而归到两类 当中的一类,这种算法对于内容部相关的博客具有相当好的识别度。

3. 这一算法设计思路,主要用到了什么计算模型?有没有独特的创新亮点?

黄文超: 主要用到的计算模型包括“中文分词技术”、“词频 -逆文本频率指数(TF-IDF)”和“余弦定理文本分类方法”。

主要参考 Google吴军博士的《数学之美》里面介绍的算法,并参考了一些Google Scholar上面找到的关于splog的论文里面对垃圾博客特征的一些描述。

4. 相对于其他方式的设计,之所以选择这一模型,主要出于什么考虑?(参加比赛的考虑、基于 IBM Power 8的考虑、设计时间的考虑、迭代更新的考虑等)是否还有继续优化的可能?

黄文超: 主要还是出于问题的本身的考虑,由于是参加比赛,而且样本是 CSDN的技术博客,因此好的博客会具有很强的主题相关性,所以用余弦定理聚类的方法可以达到很好的效果。同时,只要将特征向量预处理好,在POWER 8上面可以用多进程的方式达到更好的效率。

5. 基于这一思路的算法设计,能否充分发挥 IBM POWER 8的并发计算优势?信心来自于哪里?

黄文超: 由于主要耗时的算法环节是互相独立的(网页解析、分词、向量夹角计算),完全可以进行多进程计算,从而充分利用 IBM POWER 8的性能优势。

6. 对于 IBM POWER 8,你最关注的技术要点是什么?能否谈谈对未来这一领域技术趋势的看法?

黄文超: 此前对 POWER 8架构并没有过多深入了解,但自这次比赛最初接触以来,它在计算性能方面还是有独到的优势,因此对于我的工作本身来说,希望POWER 8平台能在更多的云平台服务上提供服务,让我们这类Web开发者有更好的选择。

7. 对于多线程及并发编程技术的发展,你怎么看?你认为还有哪些可以改进的方面?

黄文超: 这当然是大势所趋,因为从主频上面感觉其实没有多大的空间可以挖掘了,为了提升计算的性能,唯有通过并行计算、分布式算法实现,而且近年兴起的大数据技术浪潮,也从另一方面支持了这一方向。在往后的计算机应用发展中,并行算法、分布式计算会变成主流中的主流。

8. 参加这次算法挑战赛的感受如何?对这一活动有什么好的建议?

黄文超: CSDN和 IBM的同事都很认真负责,耐心解答各种问题以及解决部署中产生的各种问题。

特别感谢 @欧阳,由于在我开始的算法中需要使用mongodb,而没有外网的状况下部署mongodb 出现不少问题,他还是花了很多下班时间帮我找了各种的包、文档,历尽艰辛终于把环境部署好,非常感谢。 也很感谢 @信仰,他为这个比赛的沟通、安排做了很多有意义的工作。

随着比赛的进行,原本一些不太完善的必要环节也逐步得到完善。非常感谢CSDN和IBM提供这个平台。

参赛指南

一、具体的参赛方式及流程如下:

  1. 按特定比率混合了垃圾博文和正常博文,参赛者需要编写算法将垃圾博客的ID分离出来;
  2. 参赛者可以使用任意开发语言完成挑战;
  3. 数据源存放位置:根目录下blog文件夹。

二、评选标准主要有四个方面:

  • 漏判率越低越好;
  • 错判率越低越好;
  • 正确率越高越好;
  • 程序运行时间。

三、参赛选手测试完成之后,需要提交:

  1. 垃圾博客的ID;
  2. 源代码;
  3. 程序运行时间截图。

大赛官网: http://reg.powerlinux.csdn.net/

立即报名: http://reg.powerlinux.csdn.net/cview/reg/?project_id=973&identy_id=1011

时间: 2024-08-01 10:31:48

专访POWER 8编程挑战赛选手黄文超:非专科生的编程算法之路的相关文章

《TensorFlow实战Google深度学习框架(第2版)》+《TensorFlow实战_黄文坚》

资源链接:https://pan.baidu.com/s/1n-ydbsnvKag4jWgpHRGIUA<TensorFlow实战Google深度学习框架(第2版)>中文版PDF和源代码带目录标签,文字可以复制,363页.配套源代码:<TensorFlow实战_黄文坚>中文版PDF和源代码带目录标签,文字可以复制,313页.配套源代码:两本都是经典书籍,讲解详细:如下: 原文地址:http://blog.51cto.com/14063572/2320200

C# 托管和非托管混合编程

在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难. 最直接的实现托管与非托管编程的方法就是使用C++/CLI 介绍 项目存档一直是企业的采用的做法,而是事实证明他们也是对的!对于一个程序员,这是几千men-days的工作量.为什么不开发一小段代码去重新利用那段代码,项目. 现在提供了一个渐渐的转向C#的新技术: 使用托管与非托管的混合编程.这是一个可行的方案在top-down issue(f

20145239杜文超 《信息安全系统设计基础》课程总结

20145239杜文超 <信息安全系统设计基础>课程总结 每周作业链接汇总 第0周作业: 简要内容:安装VirtualBox,安装Ubuntu,预习Linux基础入门. 二维码: 第一周作业: 简要内容:了解Linux操作系统,掌握核心的linux命令. 二维码: 第二周作业: 简要内容:熟悉Linux系统的开发环境.vi的基本操作.gcc编译器的基本原理.gcc编译器的常用选项.如何使用gdb调试技术. 二维码: 第三周作业: 简要内容:理解"信息=位+上下文". 二维码

浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程【转】

本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程",主要涉及到浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程方面的内容,对于浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程感兴趣的同学可以参考一下. 简介: 本文试图完整地描述 Linux 系统中 C 语言编程中的时间问

POCO库中文编程参考指南(8)丰富的Socket编程

POCO库中文编程参考指南(8)丰富的Socket编程 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.com (# -> @) 日期:April 16th, 2012 1 POCO 中的 Socket POCO 中有 丰富的 Socket 封装.其继承关系如下: 本文暂且只介绍 StreamSocket.ServerSocket.DatagramSocket 2 Poco::Net::ServerSocket S

15个热门的编程趋势及15个逐步走向衰落的编程方向

Peter Wayner是InfoWorld的一名特约编辑,也是一个多产的作家.除了InfoWorld之外,他还经常为纽约时报和连线杂志撰写文章.近日,Peter撰写了一篇文章,谈到了未来15个热门的编程趋势以及15个逐步走向衰落的技术方向,该文发表之后在技术社区中引起了较大的反响,也希望文中的观点能给各位读者带来一些启示. 程序员们普遍对时尚界嗤之以鼻,因为这个圈子中的趋势就像风一样变幻不定.裙子忽长忽短.颜色变来变去.领结时大时小.不过在技术界,精确.科学与数学却统治着一切.然而,这并不是说

Java IO编程全解(三)——伪异步IO编程

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7723174.html 前面讲到:Java IO编程全解(二)--传统的BIO编程 为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远远大于N,通过线程池可以灵活的调配线程资源,设置线程的最大值,防止由于海量并发接入导致线程耗尽. 下面,我们结合连接模型图和源

Java网络编程和NIO详解开篇:Java网络编程基础

Java网络编程和NIO详解开篇:Java网络编程基础 计算机网络编程基础 转自:https://mp.weixin.qq.com/s/XXMz5uAFSsPdg38bth2jAA 我们是幸运的,因为我们拥有网络.网络是一个神奇的东西,它改变了你和我的生活方式,改变了整个世界. 然而,网络的无标度和小世界特性使得它又是复杂的,无所不在,无所不能,以致于我们无法区分甚至无法描述. 对于一个码农而言,了解网络的基础知识可能还是从了解定义开始,认识OSI的七层协议模型,深入Socket内部,进而熟练地

20145239 杜文超 实验四 Android开发基础

20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理机制 Android Studio安装 实验步骤 安装 JDK 并配置 JDK 环境变量 依次使用计算机->系统属性->高级系统设置->高级->环境变量,然后新建一个JAVA_HOME变量,令它为计算机中安装JDK的位置: 安装Andriod Studio并配置 1.双击运行Andri