我的大创回顾

前言

从2019.12月到2021.4月,我完成了大学生涯中第一个应该也是最后一个大创,不得不说,我真的在此过程中学习到了很多!好像不写点什么记录一下就浑身不舒服。所以,就有了这篇博文

一切从学习开始 —— NLP和Python爬虫

这大创刚开始是打算做一个什么来着?文本自动生成算法?

Anyway,“理论上理论和实际是一致的,实际上它们并不是”,我愿称之为项目执行第一原理

不过起码在一开始,我想我还是沿着既定的方向学习着

于是,在2020年初这个特殊的时期,我开始了对于自然语言处理领域和爬虫技术的初次探索

一向习惯看书胜过网课的我,选择了 O’Reilly 出版的《Python自然语言处理》《Python网络爬虫权威指南》作为参考书。非常凑巧的是,前者也是我半年后选修的自然语言处理课程的教材。期间,还收集了一些文本生成相关文献阅读,在此向女神 Alexandra Elbakyan 致敬!

书籍为我很好的构建了知识的来龙去脉(虽然我阅读的部分并不多哈哈哈),了解到了一些最基础的原理以及推动我开始关注前沿技术的发展。基础知识的学习也帮助我思考这个项目的执行方向,顺带还玩了玩 GPT-2 这样相对先进的语言生成模型,感谢清华的大佬们为我等普通人提供了可以直接执行的 Colab 代码

爬虫真难

进入新学期后,就得为项目做一些实际的工作了。就像所有的语言生成任务一样,首先得有语料库。鉴于我们选定的主题是讲座预告,一些学校官网和官方公众号成了主要信息源。根据组员们收集的网页爬取文本数据,这是我的第一次爬虫实践

在此过程中,我深刻体会了爬虫,尤其是爬带有严格反爬机制网页的不易。有像微信这样一直打补丁导致陈旧方法全失效的狡猾大厂,谁能想到我在0202年还翻出安卓4.0旧手机就为了抓包拿数据呢,在因为一时激动忘记设置爬虫间隔而被微信冻结账号的那一刻

也有需要加载 js 且会识别爬虫并封 ip 的校方网站,在我一顿学习 Selenium 和各种研究请求头之后,倒也越过了几个小网站

不过,归根结底,还是菜罢了……那会儿我把自己常用的爬虫方法总结了一个博文,主要是为了自己以后查着方便

好吧,人工标注最难

数据有了,但都是内容混在一起的 txt ,为了分离出时间、地点、人物、主题等等等等,我们组选用了最原始的手工提取方法(废话,都能自动提取了那必然分分钟就去发论文、就去结项了!)

啊,那年四月,杏花微雨,可我却只记得来回两台显示器从 txt 往 excel 里一行一行、一格一格粘贴文字!想想我就两眼发酸,一面埋怨显示器分辨率太低残害我的眼睛、一面又埋怨前阵子手贱爬了这么多数据

就文本数据而言,数据收集难,比数据收集更难的是数据清洗

​ —— JJYDXFS

仰望概率图模型

转眼到了暑假。眼看着生成算法搞不出来,也是,可控文本生成本来就是有待突破的领域,就算哪位大能窥得天机那也是不传之秘,我等学水是不指望创造奇迹了。导师给指了路,说就整个公众号,先手动收集信息写文章整合发布吧,也许做着做着就有思路了

马上写!马上学!上B站搜了 CS228 的公开课视频我就开始看起来,那段时间还做了几篇笔记放在公众号上。截至到开发网站前,大约看了四分之一的样子,只有英文字幕真的很痛苦。要说我对 PGM 还记得些啥,那大概就……英语真的蛮难的,真的

小作坊的全栈开发

终于要准备结项了,得做东西了。计划是做一个网站结项,总归是能有现成可参考的东西了。我严格按照我当时对于软件工程学浅薄的理解,先收集项目需求,并向组长建议出个网页设计图云云……

我们决定写一个将收集到的讲座数据呈现出来的网页,或者说也可以理解成一个讲座信息 RSS,当然时效性和全面性是差了点,咳咳

LAMP

服务器被分配给我负责运维,之前有用过云服务器的一点经验(当然大部分还是现学现用、自娱自乐,拿不上台面),安排个 LAMP 服务器倒也还算游刃有余。之前只用过 Apache 服务器和 php 链接数据库,所以开始时的网页 demo 也还是这个技术路线

尝试加一点Vue2……Boom

之后听说 Vue 非常好用,所以心生向往想学习学习,无奈 Web 基础太差,入门无法。中期检查迫在眉睫,到头来只用 Vue2 进行了一些简单的 DOM 操作,并不能全套使用 Vue 进行开发,但也足以体会 Vue 的高效和优雅

Flask真香

因为对 Python 语言比较熟悉,之后在导师的建议下使用了 Flask 服务器。Flask 对于动态路由十分友好,也能以较易理解且简单的方式满足网页根据不同路由渲染模板的需求,还可以方便的连数据库、处理数据、写接口

考虑到Flask模板语法的 双花括号 和 Vue 的 双花括号 冲突,如果混写需要加其他标记隔离,颇为麻烦。后期我就干脆只用 JQuery 操纵 DOM ,虽然目前看来 JQuery 已不如主流前端框架那么先进,但就本项目的进展情况和技术水平看,JQuery 可以满足需求也是最优解(才不想承认是为了快点结项)

最后网站的整体架构就是 Apache+Flask+MySQL 了,主页这样的不需要一模板多页面且可能需要频繁改动的固定页放在 Apache 上(不是为了偷懒!);学科和搜索等由统一模板渲染不同结果的页面交给 Flask ,接口也交给 Flask 。我有时还会想,这算不算一种负载均衡哈哈

结项前一周连肝了好几天之后,终于出了网站的 v1.0 、 v2.0 和 v3.0(最终版)。那会儿一天上线一版的激动,现在想想还是余韵犹存hhh,犹记得我体测排队的时候还拿着手机让朋友内测有无bug

要说我个人在写这个网站时印象比较深刻的几个点(受众和开发者的角度毕竟不同。在朋友指着网站问我 v3.0 相对 v2.0 有啥变化?为啥她没看出来时 我就懂得了)

  1. 首先是和技术没啥太大关系的小点——首页滚动图片。为了把公众号头图制作成和原版banner的演示图尺寸一样的图片,我打开了许久不用的Photoshop,内容识别填充还是那么让人满意的丝滑。唯一遗憾的一点是当时没有关注图片大小的问题,服务器这么垃圾,不压缩一下加载很慢,很影响用户体验!这也是我之后做可视化作业时注意到的问题
  2. 搜索结果页点击后的页内刷新。我在刚开始设想这个网站的时候就希望能做像 Feedly 一样的感觉( Feedly 一直是我个人很喜欢的RSS阅读器),做一个点一下换一个内容的单页面应用。很高兴最后能成功实现这个想法(谢谢JQuery,您很好用),无论它看上去多么平凡普通,我个人是十分满意的
  3. 没有搜索/日期结果的页面是另外的模板!也许永远不会有人注意到,也许看到也觉得理所应当。但我认为这值得一提,严谨!
  4. 学科页上会随滚动吸附顶部的推荐栏。这可让我折腾了好久,成功实现的那一刻我一个人傻乐了挺久。而且这个框的角是有弧度的,现在似乎很流行圆角框
  5. 最后说一说 关于我们 吧,部分设计上致敬了豆瓣

似乎也应该说说自己觉得不足的地方

  1. 图片没压缩,前面提过了
  2. 学科页其实是可以再美化一下的,但是我想象力不够了哈哈
  3. 推荐栏原来是打算做热搜,但是没有热搜算法,也就成了随机推荐
  4. 设备自适应性不好,这其实是水平所限,自己遗憾也无解

开发过程中已经记不清踩过多少坑了,总之 StackOverFlow 永远的神

最后的最后

居然就这样结项了,真是让人有如梦初醒的感觉,毕竟是伴随了我将近一年半的人生、四舍五入就是一半的大学生活、四舍五入就是……

放一下网站成品链接吧 : 今日人文社科,还有源码

平心而论,如果真的能有及时的数据填充进来,或许这个网站真的会有用也说不定。学术界的 RSS !


我的大创回顾
https://jjydxfs.github.io/2021/04/30/我的大创回顾/
作者
JJYDXFS
发布于
2021年4月30日
许可协议