加载中…
个人资料
梁斌
梁斌
  • 博客等级:
  • 博客积分:0
  • 博客访问:436,851
  • 关注人气:1,097
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

pullword

(2014-06-30 20:50:42)
标签:

it

       昨天,也就是周日,我发布了pullword,当天收到分词请求8000多条,大约1000人体验了这个产品。在这里,我简要从,产品需求,设计原理,苦逼过程,和未来打算进行介绍。

       首先从需求出发,我们都知道分词这个领域,有两种需求,一种叫做切词,另一种叫做抽词。前者为精确语法分析,句子理解出发的。而后者多用于,搜索引擎,舆情监控等领域。举个例子,比如“清华大学好”。从切词的角度,切分成 #清华# #大学# #好# 或者 #清华大学# #好#,这两种切法都对。但切词只会选择一种切分方案。假定我们选择了 #清华大学# #好# 。 这不影响句子理解和后续语法分析。但在搜索引擎眼里,这样就有问题了,如果有用户搜索 #清华#,就找不到这个句子,都是切词的错阿。

      因此,我们迫切需要一种方法能够满足,把一个句子中所有有价值的词汇都pull出来,这就是抽词。但传统简单的做法,抽词,就是把一个长词,抽出有价值的短词,比如清华大学,抽出清华补充到分词结果中。或者反过来,如果分太细,就看能不能前后相继的短词组成长词,这一切的base都需要一个已经很出色的分词系统,但是我没有,我看过一些分词系统的代码。里面充斥了各种rule-based的东西。比如 if( str.find("phrash",“的”) >0 ){} 等等。一看就是被多种bad case折腾够呛的代码。

     那么有没有一种,不需要基于一个优秀的分词基础上,直接做呢? 显然应该有,pullword就是这样的产品,里面没有一句诡异的if else这种代码,那么他的原理是什么呢?我们都知道深度学习,多层学习结构,通过多层auto encoder后,每个层于层之间的edges保留了该层的hidden layer重放出原始输入的能力,最终重放出的原始输入都是结构清晰的部分,而噪音和输入传感器采集到偶然的误差则消失在这些一层层的重放中。 回到pullword,就是全部可能的词push进去,高概率重放出来的就是好词,低概率的就是烂词。原理并不复杂,实现起来也不复杂,但训练起来就需要高超的技巧,调参的方式,快速得到结果的途径,其中有很多关隘。就不在本文中一一展开了。

    从考虑这个方向到最后推出耗费了1年多,期间很多次失败,最后我决定放弃了,跟老婆说,不搞了,太杀时间了,而且以目前的算力,除非求助大公司,否则根本算不到头(后来也证明,一个model要想能用起码要训练4个礼拜。。)但有一天晚上和家里人发生了点矛盾,突然来了灵感,找到了一个神奇的训练方法,很快这个最关键的关口就打通了,后来就非常简单,这个方法和bengio论文中的trick恰好相反,但对微小算力的这个应用来说,反而大大加快。

     后来和陈利人等同志说了目前的进展,很快pullword的model就训练完毕了,快速上线,这个本身也没有指望赚钱,就是做一个公益项目,因为机器需要比较大流量和算力,第一个月由冯厂长(冯大辉)赞助了。未来只要有老板支持,就持续公益下去,如果确实用得人少,也没有老板支持,我自己也养不动这么多算力,也就关闭了。但C程序会尽快完成,提交给身边真正有需求得朋友免费使用,这就是未来得一些打算。当然如果有单位想邀请报告,也没问题,当然也是收费得,用来养活这些算力。 最后这个事情还有一个每日2万条新闻的分享计划,总之就是服务社会,服务大家,尽可能我自己少贴钱的模式。

     希望大家都来用,都来提出改进意见,网址是pullword.com.  大量访问,请使用API(http://api.pullword.com/),每个月6TB流量,可以满足绝大多数创业公司的需求,速度也不慢,每秒单线程分3MB语料。

     最后,说一句心里话,有时候能做一点为社会做贡献的事情,是很快乐的。这和技术水平无关,虽然我一直承认自己的技术水平很烂很烂。。但我一颗为人民群众服务的心,天地可鉴。

    



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有