Categories
读书有感

papers I read in eBay

只是罗列一些这一两年比较关注的具体领域。

  • 自然语言处理与分词:看了很多分词类的算法,从字符匹配、MMSeg、HMM,到条件随机场之类。主要是为了提取关键词作为regressors。当然做这个一方面是好玩(周围很多朋友都在玩),另一方面也是不想被专家忽悠...嗯。另外就是TD-IDF、余弦相似度这些纯粹是为了不被忽悠。
  • 稀疏矩阵:稀疏矩阵完全是从上面继承而来的,往往分词之后搞来一个很大很稀疏的矩阵,为了降低computational cost或者干脆就是考虑到computational capacity,这个不得不做,然后就可以开始奇异值分解了。后面恍然发现,这丫不就是adjancy list和matrix的区别么...顿时为自己的智商隐隐担忧。
  • 近似计算方法:主要是binning methods,起因是觉得teradata算variance比较慢,所以看了一下能不能先binning再算variance以节省计算时间(说白了就是在teradata现有的map-reduce上想个更好的办法)。实用主义嘛。最后的感想就是,其实对于variance这种linear method,分布式已经蛮成熟了,在每一个map步能降低的computational time还是有限的...
  • 异常点识别:这个主要是有段时间在研究怎么可以有效的去掉outlier,不让这些点干扰计算(尤其是涉及均值的)。当然基本的就是基于ranking,后面发现这东西水还蛮深的,牵扯到distance measurement,stratified sampling等等。
  • 分布式计算:有段时间想了解一下Hadoop map reduce,所以去看了一些基本的分布式计算的东西。好吧,其实我还是觉得hadoop接口不够那么人性化,基于java的东西我还一时半会儿搞不定(从伪代码到代码到命令调度及debug还有好长的路要走...)。
  • 实验设计:这个貌似一直都在断断续续的看一些文章,从基本的随机试验的思想到后面各种具体环节的实现,以及不理想状况下的一些修正(比如连续实验、网络中实验、spillover effects等)。最近在试图利用RDD来改善一些现有实验设计和评估,此外不时瞅一下有没有好玩的网络实验的机会。(对eBay 3.0无限期待中...)
  • 贝叶斯网络:从MCMC开始的吧,陆陆续续看了好多马尔可夫网络和贝叶斯网络的东西,什么Belief Propagation。当然这里面也包括了Conditional Random Field这些语音识别、图像识别的基本原理和常用方法什么的。这也有种不被专家忽悠的想法,毕竟看来看去也就是这几种常见的算法的不同应用嘛。(修PGM那门课真的可以列作年度噩梦之一了...)
  • 拍卖设计:这个完全是由于随便搜搜eBay基本上都牵扯到auction design,所以顺带看一下...总的大趋势还是排名在向一口价转变,多少也有种一手市场快速增长的感觉。哎,consumer theory大爱的东西啊。
  • 社群识别:最近遇到一些这方面的挑战...一方面是clustering,另一方面是sparcification。总的感觉是,无论是稀疏矩阵还是矩阵稀疏化,都是去除噪音找到有用信号的过程...
  • 协同过滤:其实collaborative filtering是很久以前看的了,当时工作需要(印象最深的就是IBM的三篇笔记)...现在感觉看过这类方法的好处就是,很多问题越来越能和后面接触到的直觉相契合,感觉很多具体的算法和想法实践都是在这个框架之下或简或繁的变化,万变难离其宗嗯。

总而言之,我觉得我越来越不像一个学经济学的孩子...可怜。好吧,这些最多算是紧跟潮流吧,很多东西回头看看也没觉得多有意思。

被一份工作逼到如此程度也算是奇葩了...哎。最近的感觉就是,我还是去关注一下business side的一些趋势吧,多看一些new business models,毕竟这才是真正创造出来价值的。

Categories
日常应用

从词频统计到词频矩阵(善用sparse matrix)

今天在下手写一个算text similarity的程序时,万般痛恨tm包不争气,而lijian哥的tmcn包又还木有完工,所以只能自己从头开始写了...

一切正常,基本的清洗啊,全角换半角啊,分词啊,去stop words啊几行代码顺利搞定,结果统计完了每行的词频却找不到一个有效的办法来算词频矩阵!数据也就是那么几万行嘛...reshape2怎么一下子就挂了呢?研究了一番,想到就算搞出来一个几万乘几万的词频矩阵,后面的distance之类也算不出来...悲哀的感觉充斥。没办法,只能祭出sparse matrix这面大旗了!

Google之,R里面可以调用Matrix或者SparseM。鉴于前者看起来比较简单的样子,我就没有去折腾后者。Matrix里面Sparse Matrix的定义比较简单,就是记录一下值不为0的行和列编号,以及他们对应的值就可以了。等等,这个东西怎么听起来这么熟悉?!好像在network analysis里面整天写这样的程序嘛!对嘛,不就是一个edgelist格式的network(记录相互连接的边)转换为一个matrix格式的网络(边边矩阵)嘛!瞬间有种打通任督二脉的感觉....

这样,只要我数出来每篇文章中的词频就足够了! 形如:
Post_id word count
1.           A.       1
1.           B.       2

这样,然后

sparseMatrix(as.factor(data$Post_id),
as.factor(data$word),
data$count)

就ok啦。超级高效!瞬间秒杀。根本不用去算真正的词频矩阵。

附这个函数的用法:

sparseMatrix(i = ep, j = ep, p, x, dims, dimnames,
             symmetric = FALSE, index1 = TRUE,
             giveCsparse = TRUE, check = TRUE)

同样的,dim()还是可以用来看维度,一般没错的。

再后面就是考验大家具真学得好不好的时候啦。比如方差这种东西,不就是 XX'嘛(当然要先减一下均值....),这里Matrix这个包有tcrossprod()可直接算XX',colsum这些也都还有...正常的矩阵乘法也都还可以用。关键是,QR分解什么的也有!

于是乎我可以深深满足的继续码下面的分析去了...

--------------------吐槽分割线------------------
作为一个经济学出身的孩子,我做梦也没想到有一日我居然会去碰稀疏矩阵这种东西...没办法,生活所迫呀!自己动手,丰衣足食.... T_T