项目评测结束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
网友评论