实验二报告

一、题目要求

在Experiment1的基础上实现最基本的Ranked retrieval model

  • Input:a query (like Ron Weasley birthday)
  •Output: Return the top K (e.g., K = 100) relevant tweets.

Use SMART notation: lnc.ltn

  • Document: logarithmic tf (l as first character), no idf and cosine normalization
  • Query: logarithmic tf (l in leftmost column), idf (t in second column),
no normalization

改进Inverted index

  • 在Dictionary中存储每个term的DF
  • 在posting list中存储term在每个doc中的TF with pairs (docID, tf)

选做

  • 支持所有的SMART Notations

二、实验原理与数据结构

原理:

  采用的的权重计算机制是Inc.Itn,即文档向量采用了对数tf的计算方法,没有采用idf因子(同时基于效率和效果的考虑)及余弦归一化方法,而此时查询向量采用了对数tf计算方法,id权重因子及归一化方法
在这里插入图片描述

数据结构

  1. 首先设置共同需要的全局变量,postings(id,tf)、document_frequency(词出现的文档总数)、docunment_numbers(文档总数)、
    document_lengths(每个id对应的文档长度)、avdl(文档平均长度)
  2. 预处理
      首先是对数据集tweets的预处理,与实验一预处理类似,首先将我们需要的tweetid text三部分主要信息,对这三部分信息进行去除无用词、词干还原等操作返回更新后的doc
      对询问数据集queries进行预处理,将需要的queries提取出来,并将处理后的数据集存入queries字典,方便提取查询,对处理后的query统计词频、总文档数、词出现的query数、query的长度等信息,读入每一行时记录每一个query的长度,存入query_lengths,在遍历不同的词时统计词频存入postings1(id,tf),此处的id人为设定,从0开始标号,再输出到文件中q-Invertedtf.txt,遍历完所有的prequeries行后,对postings1进行遍历,统计每个词出现的文档数存入query_frequency,再输出到文件中q-Inverteddtf.txt,处理后的数据如图所示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  对文档进行统计词频、总文档数、词出现的文档数、文档的长度等信息,读入每一行时记录每一篇文档的长度,存入document_lengths,在遍历不同的词时统计词频存入postings(id,tf),再输出到文件中Invertedtf.txt,遍历完所有的tweets行后,对postings进行遍历,统计每个词出现的文档数存入document_frequency,再输出到文件中Inverteddtf.txt,处理后的数据如图所示
在这里插入图片描述
在这里插入图片描述

  1. 权重计算
      对输入的query进行上述的预处理过程,更新query总数query_numbers,对于query采用公式ltn,对于document,更新query总数query_numbers,采用公式lnc
    在这里插入图片描述

l(logarithm) = 1 + log ⁡ ( t f t , d ) \log(tf_{t,d}) log(tft,d)
t(idf) = l o g ( N d f t ) log(\frac{N}{df_t}) log(dftN)
n(none) = 1
c(cosine) = 1 w 1 2 + w 2 2 + . . . + w n 2 \frac{1}{\sqrt{w_1^2+w_2^2+...+w_n^2}} w12+w22+...+wn2 1
代码实现
在这里插入图片描述

  1. 查找函数
    首先对输入的query进行分词去重词干还原等操作,为了避免遍历所有的tweet,先提取出有相关性的tweetid,tweet中包含查询的关键词之一便可认为相关,之后对权重计算返回的相似性结果进行降序排序,输出前10个最有相关性的结果
    代码实现
    在这里插入图片描述

三、实验结果

  首先是对预处理后的queries进行排序输出前10个最相关的文档之后就可以手动输入自己想要查询的内容,结果如下

对预处理后的queries结果

在这里插入图片描述

对自己输入查询结果

例如输入:Ron Weasley birthday
在这里插入图片描述

从结果中可以看到有多少条是与我们输入的查询是相关的,并且可以看到最相关的10个的tweetid

四、反思与总结

  1. 进行查询权重机制时,发现返回的结果中有负值,这是不正确的,经过排查检错,发现只是定义了文档总数,但是在处理完tweets数据集后没有对其进行更新,导致错误。
  2. 在返回的查询相似度结果排序中,我们应该选择降序排序,输出相似度最大的前10个,所以在调用函数sort后应该将sort后的结果reverse后再输出
  3. 经过这次实验对文档权重和查询权重机制有了更深的了解,还要继续学习,减少错误
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值