第1次IR项目纪实+Jupyter代码合并指南

项目评测结束1周我才发现没注册项目考试....差点变成我硕士的第0个项目....做白工...
因为第一学期就碰到了疫情,所以没啥学习的激情,基本能坐在书桌前的时间就都用来搞这个项目了,最后看着完工的项目还是感慨良多丫!就记录一下,代表了第一学期学期总结啦~
除了team project,我们专业还有3个单开的配套课程的小project,其他的都是课程里面教授布置的Mini project,因为没单独算学分就忽略不计8~
当时选课的时候,我选了2门project,有一门把我直接拒了,一门排队排了一周终于入选了,可见这个Project都比较热门丫~
我选Project主要原因是我热爱写代码,写代码简直是我在陆地上的第一生命丫!当然我本体是属于大海的~hiahia
其次就是,真的,如果想真正学好一门课,就是做项目实践写代码没别的捷径。

课程名是Information Retrieval Project,配套的授课内容是Information Retrieval and Web Search

项目介绍

IR项目描述

大白话描述一下就是~
我们手里有几百万条amazon的产品评论
我们需要人为的把一部分评论的评分设为未知
我们需要用TF-IDF和word embedding2中方法计算每对评论间的相似度
生成相似度图
最后用HITS和Pagerank的原理实现通过已知评分的评论推导出未知评分的评论的评分
哈哈哈哈哈哈哈写完感觉特别像绕口令

就这个项目描述...我第一眼看的时候都没整明白....感觉啥玩意啊

presentation slides

这个课件完全是我自己做的,只有2页Implement让队友自己填了下内容,从slides科员比较清晰的知道这个项目我们干了啥....所以放在最前面。值得一提的是....这个封面是我画的,虽然看起来比较简单....但是我真的画了2小时....因为一直在调整构图内容啥的....但是后面因为时间太紧张了就只能放evaluation图片了...


IR slides

我的队友

一个小组3个同学,每个同学都要对项目有明确的贡献,最后教授会根据各自贡献和答疑情况分别打分
我们组另外2同学一个是台湾妹子,一个是德国妹子
台湾妹子是第二学期了,做项目比较有经验,写的各种list特别清晰
代码写的一般偏上,对项目特别有追求!因为我们这个项目一共有4组做,教授明确表示了,相同项目组间对比会影响对方得分,然后这妹子认识另外2组的人,于是导致我们做了一倍的bonus work
德国妹子还挺有自己的想法的,还特别坚持自己的想法,之前是学社会学的,所以代码写的.....让人挺感动的。就是不会写也坚持下来了,如果一个函数用Package30秒运行完,这个妹子写的code就要运行24小时....
我最开始看她code初稿的时候,就发现她整个思路都不对,最可怕的是1个嵌套for可以解决的,她居然写了8个嵌套for循环,最可怕的是其中一个调用了另一个嵌套for.....我看她思路已经没救了,就告诉她效率太低了,希望她可以尝试减少for,结果妹子告诉我她不觉得效率是考核点....只要写出来就行了....于是我.....嗯就这8
至于我自己.....我当然觉得自己特别牛逼啦哈哈哈哈哈哈哈木得办法~我写code真的是强

项目难点

最主要的就是项目需要用的只是没学过。。。我们这学期IR这门课有11课,但是项目时间段和授课时间段是一样的,我们这个项目需要用到课件里面的4/8/10/11课,就是我们一开始就要在教授讲课之前自学了课程内容来做项目....
第二个难点对于我来说,我是那种必须完完全全想明白这个做的原理才能这样做的人,我一开始真的搞不明白原理,我一开始特别怀疑这个项目!!!
我看我web search的课件发现pagerank hits就是2网页排名算法,则会搞来做label propagetion呐?
为此我想了好多好多方案.....能多复杂就多复杂,当然这2算法单独实现还是很简单的,我就是想不明白和这个项目的结合点在哪....
而且在这个项目里,因为matrix是个对称矩阵,我就觉得HITS在这个项目里面可以简化实现,在coach的时候我尝试和教授argue这个问题,结果.....因为我的破烂英语最后放弃了argue,决定就按原版复杂的做
好在最后的最后我也想明白了HITS在这个项目里的原理,就做的比较“心悦诚服”了

最后是,我的垃圾英语对上第一次写Report。。。。哎。。。。
还有每个人要说自己做的part和答疑,因为是网上share screen的pre,所以没办法发挥我的肢体语言......只能纯靠听说.....叹气+10086

我的part

本来这个项目选择1个dataset,实现2个similarity method,2个label propagation方法就可以了,但是我们各种加加加最后搞了4dataset+5similarity+3*label propagation......
我负责的是dataset selection+filtered TF-IDF package version+ HITS
同时负责最后的代码拼接+slides

Dataset Selection

我之前真的是没想到还要选个dataset,真的是对搞数据分析没经验....这个是我们比较后面快结项了才搞的一步,因为accuracy一直持续在20%左右....真的是太太太低了,我们做了各种努力都提高甚微,我才突然发现会不会是dataset本身质量的问题啊,于是我把amazon上所有的dataset都用naive bayes对产品特定和所有数据进行了classify+cross_validate,才发现原来不同dataset真的差好多!好多的accuracy只有30%,有一个vedio games的accuracy居然超过了80%!呵呵看来大家对游戏是真爱啊
这个部分真的搞了2天....因为我的电脑真的跑不动.....数据太大了...

Filtered TF-IDF

这个就是我用现成的tfidfvectorizer得到每个评论的tf-idf向量之后,直接从1-5分5个分类里面,分别取top_k个单词,组成新的vocabulary,然后用新的simi计算cosine_similarity,生成simi matrix,这个的麻烦的地方是要根据HITS运行结果选择合适的top_k,实际证明这个会比raw tf-idf提高20%的精度

HITS

这个真的是我觉得最简单的part了,配套的评估我本来是用的kfold,后来她们又把test dataset按原构成取,train dataset balance了,所以我就放弃了kfold,我们这个项目是不看accuracy的,只看pearson/mean absolute error/root mean squerd error这3评估指标

拼接代码

这个真的要吐槽.....按理说我们3的code量应该是差不多的,结果拼接完搞了130屏....而且她们也没写markdown,我又重新整理了代码,写了markdown,搞了个TOC,最麻烦的是,教授要求所有代码必须写在一个文件里面,附上执行说明,就是我们的code必须是可以复现的.....我都无力吐槽了....我要是教授,看到一个3学分的项目被你们搞出了130屏code都醉了....
比较麻烦的就是写执行说明......
下面图1是拼完的代码目录,图2是我自己的code部分,她俩的我就不粘了.....多的都不想看....
我觉得拼接代码值得学习的有2点

  • 使用nbmerge包合并多个jupyter notebook
    但是我在实际合并中一直报错,not save as utf8, UnicodeDecodeError('utf-8',这个报错我几经google,后来发现全网只有一个可行方案....这个问题是中文特有的,虽然我和台湾妹子也没在我们的jupyter里面写中文,但是还是有编码问题,德国妹子的就可以正常合并,但是130屏代码如果不用包合并,就要重新生成Output,解决方案是:
nbmerge file_1.ipynb file_2.ipynb file_3.ipynb -o _merged.ipynb

把命令里面的>改成-o居然就可以了....好神奇啊

  • Jupyter做目录
    正常情况下我是不会给代码写目录的,但是这个130屏....我不写也不行啊,而且run tip的时候,也是加个跳转,方便教授运行。这个做目录的tip是运用了HTML<a>
    在你想要跳转的地方前写<a>标签,设置不同的id
<a class="anchor" id="section11"></a>

之后写目录

## TOC
* [Section 1: Dataset](#section1)
    * [Section 1.1: Dataset Selection & Characteristics](#section11) 
    * [Section 1.2: Dataset Train&Test Split](#section12)
* [Section 2: Similarity Matrix](#section2)
    * [Section 2.1: TF-IDF own implement version](#section21) 
    * [Section 2.2: Filtered TF-IDF package version](#section22) 
    * [Section 2.3: SIF](#section23) 
    * [Section 2.4: Sentence BERT](#section24) 
    * [Section 2.5: Classification BERT](#section25) 
* [Section 3: Label Propagation](#section3)
    * [Section 3.1: Pagerank](#section31) 
    * [Section 3.2: HITS](#section32) 
    * [Section 3.3: Harmonic function](#section33) 
    * [Section 3.4: Graph of Performance](#section34) 
toc of code

结项前24小时

哎....这个项目搞了2周居然最后24小时还是在拼搏....
我们这嘛兢兢业业还是搞到最后
前一天晚上11点我才拼完code,凌晨2点基本做完ppt,早上12:20最终定稿所有,12:30是上传的deadline
然后2点写完讲稿,2:30唯一一次彩排
3:00就是我们组Presentation
这个讲稿...我早上洗澡的时候,试着脱口直接说我做了啥...结果也挺顺畅的,我就发现我对这个项目真的是已经了如指掌到了出口成稿的状态了....
教授最后问了我们组4个问题,我2个,台湾妹子2个
因为我的辣鸡英语....我将不太明白,但是因为我已经对这个项目了如指掌L ...所以我也不慌,最后教授还帮我完善了我的答案...哈哈哈哈总之还是比较圆满
撒花。code我从第一版到最终版改了无数次,dataset selection的好多code在我选完dataset就直接删了,final版和结项前一周的code版本都改了70%之多...

最后我要感谢我的队友和教授,没有队友的监督支持....我们是搞不到这种地步的,教授人也超级nice,认认真真回答了我们邮件里面每一条问题,简直保姆式解答!

最后附上我的code部分和Report
啊....Report光格式规定教授就给了8页.....我们这个Report也是8页,只放了前2页的内容


HITS my code part
IR report
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351