Ir-2025-spring

来自SUDA-HLT
跳到导航 跳到搜索

信息检索综合实践

李正华

  • 学生:计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
  • 提交前自我检查
    • 是否有包含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 重排序,然后人工标注,具体如何标注更合理,自己考虑好。

信息检索课程介绍

  • 和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:最大匹配分词

  • 数据下载:
    • 字典:文件:Dict.txt
    • 待分词:文件:Sentence.txt
    • 正确答案(人工标注的,你的模型的预测结果要和这个文件进行对比,从而得到P/R/F值):文件:Answer.txt
    • 正向最大匹配分词模型的预测结果(如果你的程序写对了,那么应该和这个结果一模一样):文件:Out.txt
*正确实验结果
**正确识别的词数:20263
**识别出的总体个数:20397
**测试集中的总体个数:20454
**正确率:0.99343
**召回率:0.99066
**F值:0.99204 

作业4:网页正文抽取

作业5:倒排索引

作业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 的结果一致。
    • 实验报告体现出自己做了什么、遇到的困难及如何解决。
  • 参考资料
    • 上面的文档
    • 微信公众号”语析LAGroup“中 contriever 论文解读
    • contriever 原文

时间表

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】