Ir-2025-spring
信息检索综合实践
李正华
- 学生:计22计科图灵班 27人
- 助教:李星宇
- 时间:周二 6-9节(14:00-17:30)(1-17周)
- 地点:理工楼238
上课基本要求
- 不能做的事情:打游戏、看课程无关视频、刷网页
- 认真读作业要求,按时交作业。csteaching
- 不能抄袭别人或网上的,自己做;不要把自己的作业给别人
课程建议
- 每个作业,截止时间后,把成绩发给大家,并用ppt给大家讲一下批作业发现的问题,题目分析
- 上课期间:请大家积极提问。遇到大家都无法理解的公共问题,我会补充讲解
- 非上课时间提问
- 建议同学们在群里提问(包括但不限于代码的bug、不理解算法、作业资源和提交等),由其他同学帮助解答;
- 群里的提问如果其他同学也无法回答,可以私信助教(仅限xxx,如周三晚上7点到9点,星宇增加);
计算成绩的规则和说明
- 实验作业:70-80分
- 一系列作业,每个作业10-20分
- 必须按照规定时间,按照规定格式要求,将实验报告+源代码,提交到csteaching
- 期末面对面小测验:10分(待定)
- 考察课程相关的基础知识,看看作业是否是自己做的
- 平时成绩:10-20分
- 不能迟到、早退,特殊情况必须请假,并带辅导员签字的假条;
- 点名时,如果发现名单上没有你的名字,及时提出
提交作业说明
- 网址:csteaching
- 作业迟交了则最终成绩会按一定比例缩减
- 包含两部分
- 实验报告(pdf文件,请把word转为pdf)
- 请按照实验模版文件:ir-2022-spring-report.doc,认真填写个人信息、实验题目、实验内容等
- 不要大段粘贴代码,最多可以粘贴核心的一小段代码,粘贴大段代码会扣分
- 写清楚自己的解决思路,尤其是遇到的难点和如何解决
- 建议可以画流程图或者写伪代码。
- 解决思路的流程图中是以文字为主还是以代码为主?报告中不要直接放代码。文字为主,不在于写得长,而在于写清楚,表明你确实做了、想了。
- 问:流程图可以改成自然语言描述或者是伪代码吗?答:流程图也可以画的很high-level的。大家自由发挥。也可以画到纸上然后拍照截图。模块化思维 大问题分解小问题 。
- 将程序运行结果截图,没有运行结果会扣分,中间的输出结果/文件可以截图一部分
- 附件(.zip压缩包)
- 源代码:代码不要都团在一起,请用空行对代码进行分隔,并简单注释代码块的功能
- readme.txt文件:说明如何运行你的程序,需要什么环境,如windows或linux,python版本如python3.5
- 实验报告(pdf文件,请把word转为pdf)
- 提交前自我检查
- 是否有包含readme.txt文件解释如何编译执行你的程序。 如没有该文件,将减分。
- 是否认真完成实验报告
- 是否可以按照readme.txt正确编译和运行程序
- 是否包含别人的代码,抄袭和被抄袭的都是0分
- 期末可能会用软件做自动抄袭检查
- 等这学期最后几周,我们可能统一对所有的作业做自动查重,到时候也会查出一些问题。 请大家一定要自己做,编程能力差一点,就做得简单一点,能力强,就做得好一点。但是一定要自己做。
- 提交作业命名规则
- 实验报告(姓名学号.pdf)
- 附件(姓名学号.zip)
实验报告word模板
具体课程(含作业)
| 作业 | 成绩比例 | 评分要点 |
|---|---|---|
| 分字 | 5% | 按字节读取并判断高位 |
| 单词计数 | 5% | 无 |
| 最大匹配分词 | 10% | 算法和评价正确实现 |
| 网页正文抽取 | 10% | 按要求完成两个任务 |
| 倒排索引 | 10% | 高效创建倒排文件 |
| 布尔查询 | 10% | inter和union的复杂度为O(n),复杂查询用堆栈判断优先级 |
| 网页相关性排序 | 15% | 基于向量空间模型VSM、tf-idf权重 |
| 爬虫和某机构主页检索系统 | 15% | 实现爬虫,系统架构设计良好,说明文档详细,UI完整 |
| 基于深度学习的检索系统 | 20% | Contriever:重现部分实验结果;自己实现评价指标;在上一个作业中的爬虫和检索系统的基础上,自己设计、标注 10 个 query,对比向量空间模型VSM 和Contriever 的效果,给出评价结果。建议:VSM 给 100 个结果,然后 Contriever 重排序,然后人工标注,具体如何标注更合理,自己考虑好。 |
信息检索课程介绍
- PPT下载
- 2022春视频和图片:
- 低画质:课程介绍
- 高画质:课程介绍-part1、 课程介绍-part2
- 图片:图
- 和2022年课程的区别:增加了基于深度学习的检索的内容,删除词性标注相关内容
信息检索系统介绍
- 2022春视频:信息检索系统介绍
具体作业
作业1:分字(C++语言)
1字节 0xxxxxxx 2字节 110xxxxx 10xxxxxx 3字节 1110xxxx 10xxxxxx 10xxxxxx 4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
作业2:单词计数
作业3:最大匹配分词
- 作业提交时间截止时间:第5周3.25下课之前提交
- 课件:前向最大匹配 PDF文件--文件:Word-seg-max-match.pdf;PPT文件--文件:Word-seg-max-match.zip
- 2022春视频和图片:
- 数据下载:
- 字典:文件:Dict.txt
- 待分词:文件:Sentence.txt
- 正确答案(人工标注的,你的模型的预测结果要和这个文件进行对比,从而得到P/R/F值):文件:Answer.txt;
- 正向最大匹配分词模型的预测结果(如果你的程序写对了,那么应该和这个结果一模一样):文件:Out.txt
*正确实验结果 **正确识别的词数:20263 **识别出的总体个数:20397 **测试集中的总体个数:20454 **正确率:0.99343 **召回率:0.99066 **F值:0.99204
作业4:网页正文抽取
- 作业提交时间截止时间:x.x下课前提交
- 2022春视频: 作业4
- 课件(请严格按照课件要求完成作业):
- 数据
- 1.html和2.html 文件:ir-2022-spring-example-html.zip
- data-1k:1000个html文件 文件:ir-2022-spring-all-html.zip (如果文件出现乱码,请到qq群里下载)
作业5:倒排索引
- 作业提交时间截止时间:第8周4.15下课前提交
- 课件:
- 仅供参考,与本次作业要求无关:文件:ir-2022-spring-inverted-index-simplified.ppt
- 2022春视频和图片:
- 数据
作业6:布尔查询
- 作业提交时间截止时间:x.x下课前提交
- 2022春视频和图片:
- 作业提交说明:
- 附件中给出本次作业使用的倒排索引文件(可以在作业5的基础上进行优化),不需要提供构建倒排索引的代码,但在实验报告中给出倒排索引文件的说明,参考侯皓文同学
- 交集、并集操作用inter()、union()这两个函数单独封装
- 对4个语句 'A', 'B', 'A AND B', 'A OR B' (A、B为自定义的查询词) 分别进行一次查询,每次的查询结果单独保存到一个txt文件中,以查询语句作为文件名(如 'A AND B.txt'`)
- 结果展示部分,文件按名字字母序排序:指字符序(用内置的sort即可),先用pinyin包转成拼音再排序也可以,不要自行改变文件名(如 阿大.txt -> 34.txt)
- 实现更复杂的查询,如:'A AND B OR C' 可以加分
- 查询词的加重(用#标记)不做强制要求,但做了加分
作业7:基于向量空间模型(VSM)和tf-idf权重的网页相关性排序
- 作业提交时间截止时间:xx之前提交
- 作业要求:
- 如果无法理解向量空间模型,可以选择做tf-idf作业,但最多只给50分
- 实现基于向量空间模型的网页相关性排序
- 给定一个查询Q:可以是手动用空格分好词的"李正华 招收 学生";也可以是未分词的"李正华招收学生",之后用最大匹配分词分好词 -> "李正华 招收 学生"
- 注释:一个给定分词的查询Q实际上等价于布尔查询OR:"李正华 招收 学生" <=> "李正华 OR 招收 OR 学生"
- 作业提交说明:
- 附件中给出本任务所使用的倒排索引文件
- 在实验报告中说明对于余弦相似度计算中的:di[k]、q[k]、|di|、|q|是如何处理或存储的
- 附件中给出一个查询Q的结果,保存为文本文件"Q.txt"中,格式为:
文档名1(余弦相似度Sim) # Sim值可不除以|q|的值,一个例子: 阿鲁巴岛.txt(0.64) 句子1 句子2 ... 文档名2(余弦相似度Sim) 句子1 句子2 ... ......
作业8:爬虫和某机构主页检索系统(综合项目)
- 作业提交时间截止时间:xx之前提交
- 任务一:用爬虫模块尽量完整地爬下来一个机构对应的所有静态网页(html或htm后缀),保存到磁盘中:
- 苏大、苏大计算机学院(规模小一点)都可以
- orphan网页不用考虑
- 任务二:基于爬取的网页,做一个完整的检索系统(以后可以考虑不断完善、定时更新):
- 1. 网页正文提取模块(同作业4的实战部分一致)
- 2. 处理网页正文的分句、分词模块(可以用作业3的最大匹配分词,也可以用第三方的分词器,如jieba)
- 3. 倒排索引模块:基于处理好的网页正文,建立倒排索引文件(同作业5一致)
- 4. 网页排序模块:实现网页相关性排序(同作业7一致)
- 5. 查询模块:提供查询接口,用户输入查询词后显示网页名(暂定为网页的title),和包含查询词的句子,查询词进行highlight处理(如#查询词#)。查询接口可以用命令行实现,提供前端UI界面(Web或Application都可以)会获得加分。
注意:把网页源文件(html文件)保存好,避免重复爬。例如优化了网页正文提取模块、或突然想用一个更好的分词器
- 作业提交说明:
- 源代码:任务一和任务二的所有代码都要提交,每个模块(共6个,在上方已用红色标出)在readme中指明在哪个python文件中实现的
- 处理好的网页数据(可选):原始网页,提取出并分好句、分好词的网页正文,若网页数据特别大的话可以不要
- 在实验报告中将三项统计信息放到表格中:网页(文档)数、句子数、单词数
- 倒排索引文件(必备)
- 说明文档:(每个模块的)实现的功能,如何使用,接口等,内容不限
作业9:深度学习方法&检索结果的评价
- 要求
- 账号环境,跑推理代码,重现完成部分实验。
- 具体要跑哪些实验,请看文档最后的表格:具体文档
- 自己实现评价指标,自己的评价指标的结果,和contriever 的结果一致。
- VSM和 Contriever 的对比
- 账号环境,跑推理代码,重现完成部分实验。
针对自己实现的“苏大计算机官网搜索引擎”,去对比VSM和Contriever的效果。
自己设计10个难度不同的 query,然后 VSM 返回 50 个结果,把这 50 个结果随机打乱顺序(这一步很重要),然后人工做一个标注(给一个排序)【如果觉得 10 个 query 太多,5 个也行】
Contriever对 50 个结果重排序
比较两种方法的结果:NDCG@5 NDCG@10 NDCG@20等
如果有能力、有时间,可以分析下,什么样的query,VSM 做得好;什么样的 query,Contriever 做得好。
<nowiki>
** 实验报告体现出自己做了什么、遇到的困难及如何解决。
* 参考资料
** 上面的文档
** 微信公众号”语析LAGroup“中 contriever 论文解读
** contriever 原文
== 时间表 ==
<nowiki>
2.25 第1周
3.18 第4周
3.25 第5周
4.1 第6周
4.29 第10周
5.6 第11周
5.27 第14周
6.3 第15周
6.17 第17周
1 08:00-08:45
2 08:50-09:35
3 09:55-10:40
4 10:45-11:30
5 11:35-12:20
6 14:00-14:45
7 14:50-15:35 【休息5分钟,+15分钟】
8 15:55-16:40
9 16:45-17:30 【17:15】