NKUCS.ICU
NKUCS.ICU copied to clipboard
COSC0032 信息检索系统原理
https://nkucs.icu/#/courses/grade-3/COSC0032
NKUCS,一个充满了「神仙」和「神仙」课程的专业,本网站旨在记录 NKUCS 的信息以及历届学生的评价
龙哥yyds
知识点:我觉得这门课的知识点算是比较有意思的了,一点都不枯燥,龙哥在课堂上提出的问题都挺有趣的,对思维能力的提升帮助很大。
作业:基本2-3周一个实验作业,总共7次左右。平均每个作业量python代码200-300行,跟着龙哥的讲解一一做下来并不困难。做完所有作业能给人一种”我有拿得出手的东西了“的感觉。
考试:期末考试的复习需要从头过一遍知识点,有很多考题与教材相互对应,建议跟着那本教材过一遍。
没有期末考试,有4次平常作业,一个大作业
- 第一次作业:用的stanford信息检索第一次作业的代码框架,实现一个带压缩的倒排索引,用BSBI算法。初上手挺麻烦的,因此第一次作业后退的人挺多的。
- 第二次作业:研读一篇论文,录10分钟左右视频讲解。
- 第三次作业:自己实现向量检索,python两三百行完事。
- 第四次作业:关于信息检索的调研,3000到5000字。
- 大作业:实现一个简易的搜索引擎,实现的好的话应该可以写进简历。
个人感想:我当初抢不上区块链和网络技术,没办法为了学分选择了这门课。优点是老师讲的好。缺点也是显而易见的,事情比其他专选课多,写大作业要用的时间多,老师和助教对大作业帮助少,只能自己查文档,调包,很累。
一些建议:
- 关于爬虫:了解下html结构,这个爬虫的时候会用的,推荐用beautifulsoup包。复习下http协议,计网讲过,看看就行,因为爬虫时候需要get请求和处理异常的状态码。推荐用requests包。搜索引擎的爬虫简单来说是一个数据规模庞大的宽度优先搜索,实现请参考下面第二个仓库
- 关于分词:由于爬取的网站不止中文,还有其他语言,分词会很困难。处理方式参考下面第二个仓库。中文分词用jieba,一个cut_for_search函数搞定
- 关于链接分析:需要实现pagerank算法,我没有实现链接分析。给不了大家建议了
- 关于索引构建:作业文档里推荐调用elasticsearch包,但我建议自己实现一个倒排索引就好,再多一个包的学习成本太累了,实现的时候简单能用就行,不用考虑性能,一两百行就能实现。
- 构建的索引和文件如何存储: 存储构建好的倒排索引图省事直接用pickle的dump函数,要加载构建好的倒排索引直接调用load函数就行。爬取到的文件我用json格式存的,加载和存储都很方便。
- 关于检索模型: 我用向量检索模型实现的,这个因为第三次作业实现过了。下面第一个仓库实现的是概率模型中的bm25模型,他有专门的写文章说明他的搜索引擎是怎么实现的,推荐大家康康。
- 关于推荐系统: 看第一个仓库作者写的文章就行,代码都贴出来了
- 关于前端后端: 前端简单写写html就行,css和js就不用整了,能做到信息和后端get和post就行。后端推荐用flask包。
这里贴两个仓库,我写大作业时候参考了很多,没有他们我就写不出来这个搞人心态的作业:
第一个仓库代码好懂易学,而且有写专门的文章,帮助很大 https://github.com/01joy/news-search-engine
第二个实现后的效果很棒,但是代码全是拿中文写的,学起来太费劲 https://github.com/RimoChan/sese-engine
没有期末考试,有4次平常作业,一个大作业
- 第一次作业:用的stanford信息检索第一次作业的代码框架,实现一个带压缩的倒排索引,用BSBI算法。初上手挺麻烦的,因此第一次作业后退的人挺多的。
- 第二次作业:研读一篇论文,录10分钟左右视频讲解。
- 第三次作业:自己实现向量检索,python两三百行完事。
- 第四次作业:关于信息检索的调研,3000到5000字。
- 大作业:实现一个简易的搜索引擎,实现的好的话应该可以写进简历。
个人感想:我当初抢不上区块链和网络技术,没办法为了学分选择了这门课。优点是老师讲的好。缺点也是显而易见的,事情比其他专选课多,写大作业要用的时间多,老师和助教对大作业帮助少,只能自己查文档,调包,很累。
一些建议:
- 关于爬虫:了解下html结构,这个爬虫的时候会用的,推荐用beautifulsoup包。复习下http协议,计网讲过,看看就行,因为爬虫时候需要get请求和处理异常的状态码。推荐用requests包。搜索引擎的爬虫简单来说是一个数据规模庞大的宽度优先搜索,实现请参考下面第二个仓库
- 关于分词:由于爬取的网站不止中文,还有其他语言,分词会很困难。处理方式参考下面第二个仓库。中文分词用jieba,一个cut_for_search函数搞定
- 关于链接分析:需要实现pagerank算法,我没有实现链接分析。给不了大家建议了
- 关于索引构建:作业文档里推荐调用elasticsearch包,但我建议自己实现一个倒排索引就好,再多一个包的学习成本太累了,实现的时候简单能用就行,不用考虑性能,一两百行就能实现。
- 构建的索引和文件如何存储: 存储构建好的倒排索引图省事直接用pickle的dump函数,要加载构建好的倒排索引直接调用load函数就行。爬取到的文件我用json格式存的,加载和存储都很方便。
- 关于检索模型: 我用向量检索模型实现的,这个因为第三次作业实现过了。下面第一个仓库实现的是概率模型中的bm25模型,他有专门的写文章说明他的搜索引擎是怎么实现的,推荐大家康康。
- 关于推荐系统: 看第一个仓库作者写的文章就行,代码都贴出来了
- 关于前端后端: 前端简单写写html就行,css和js就不用整了,能做到信息和后端get和post就行。后端推荐用flask包。
这里贴两个仓库,我写大作业时候参考了很多,没有他们我就写不出来这个搞人心态的作业:
第一个仓库代码好懂易学,而且有写专门的文章,帮助很大 https://github.com/01joy/news-search-engine 第二个实现后的效果很棒,但是代码全是拿中文写的,学起来太费劲 https://github.com/RimoChan/sese-engine
实在是太详细了,感谢贡献!
选课时间:2023Fall
授课教师:温延龙
老师很好,无期末考试,并且这个课现在的作业量真没有以前说的那么吓人了,体验很好,强烈推荐,有码量的只有三次(hw1,hw6和大作业):
- hw1:祖传实验,填斯坦福大学BSBI的框架,已经有很多的资料了。但还是要吐槽一些,这个框架给的测试太玄学了,即使过了也不代表能对,后面可能还会出问题,debug极其困难,希望这个祖传作业能添加更全更详细的测试,否则仅凭自己写出来的难度实在太大(并且只给两周时间),不要求报告
- hw2:读最近的IR方面顶会论文,写论文笔记并录15min之内的视频讲解,每个人的论文都不一样
- hw3&hw4:非常非常水,就是玩一下服务器打广告,然后把结果截图就行了,这两个居然给了五周的时间
- hw5:大作业,实现搜索引擎,并录制15min之内的讲解视频,提交报告
- hw6:非常自由的一个实验,对前沿方向进行调研,然后随便找一个方向简单实现,不要求效果一定比现有的东西好(就是为了凑本学期的代码量),录制五分钟之内的讲解视频,提交报告
这门课是真的挺有意思的,但奈何本学期的硬课实在太多,估计也没多少人上课认真听,龙哥上课比较喜欢提问,但直接说没想好老师也不会为难你。关于搜索引擎,前面的学长or学姐已经给了很详细的建议了,我做一点补充:
- 关于链接分析:可以调用
networkx
库的函数,计算pageRank非常简便 - 关于检索模型:本学年为了减轻代码量,去年的向量空间模型实现没有做,但大作业还是使用这个比较简单,可参考的资料也很多
- 关于Web框架:不需要太复杂,也不算分,建议用最简单的Flask
关于期末成绩:本学期只有hw1的额外编码方式和大作业的个性化推荐是计网经典加分项,如果作业全都按时交了,加分项也做了90+问题不大,也不存在隔壁卫老师本年度机器学习的迷惑压分操作(感觉这门课90+的人数并不算少,我是万万没想到IR比机器学习的分还要高,并且卫老师的机器学习作业量比IR还要大)
所以别都去抢卫老师的机器学习了,IR作业量又少分又高选的人还不多!