信息检索作业_基于关键字的简易信息推荐系统

基于关键字的简易信息推荐系统

摘要

​ 关键字查询作为一种对用户友好的信息检索方式,在多种应用环境中均有很好的应用。在本次设计报告,使用爬虫获取中国知网中HTML显示的论文摘要为数据源,使用TF-IDF模型对获取的信息进行数据分析,对于用户输入的数据以改进的RR(Reciprocal Ranking)排序倒数方法与数据库信息进行信息匹配,成功设计出一个以关键字为基础的简易信息推荐系统。

1. 概要设计

本次课程报告取材于本人对已读论文的整理与信息检索,主要用于基于关键字的搜寻,以获得与关键字最相关的论文,从而进行知识点的复习。

在本次课程设计中,以知网中部分论文的知识库。与此同时,在每篇论文中,摘要作为对一篇论文的简要概述。以网络爬虫的技术对每篇论文的摘要部分进行信息的准确获取。

在信息预处理方面,首先对论文的摘要部分按照其不同的词性进行划分,对于划分后的词与干扰词库进行比对,去除干扰词,从而获得对论文摘要部分的关键词列表。对于获取的关键词,以TF-IDF模型进行处理,从而以模型处理之后的前十关键词列表代表其摘要部分的含义,即整篇论文的涉及的知识面。

在数据库存储方面,考虑到论文数据量太多,以论文的实际存储地址和其涉及的关键词组成的知识面组成知识库。

在人机交互方面,对于用户输入的语句进行输入进行词性划分,去除干扰字符,保留其所有的关键词信息。使用改进的RR排序倒数方法进行关键字匹配操作。对于知识库中的每篇论文的关键字进行相似度的计算,选取匹配度最高的论文数据,获取其存储地址。

本次课程报告设计总体设计如图1所示。

信息检索作业_基于关键字的简易信息推荐系统

图1 基于关键字的信息推荐系统概要设计图

​ 由上图可知,本次项目设计可以分成三个模块:数据源处理模块、数据库模块和人机交互模块。

​ 数据源处理模块:数据源处理模块主要负责从知网中如何获取数据,以及对数据的TF-IDF处理。

​ 数据库模块: 数据库模块主要负责对于处理之后的数据存储以及对数据的检索。

​ 人机交互模块:人机交互模块主要负责对于用户的检索信息进行预处理,使用匹配算法获取最匹配的信息显示给用户。

​ 在本文结构中,第2,3,4章均是对这三个模块的详细概述。

2. 数据源处理模块设计与实现

在数据源处理模块中,负责获取数据以及数据处理,可以详细划分为:爬虫获取信息,信息处理两部分。

2.1 爬虫获取

在Web服务中,浏览器向服务端发送http请求,服务端将信息以html的形式显示给浏览器,浏览器通过解析/渲染的方式将信息显示为我们常见的界面信息。爬虫程序模拟该过程,模拟浏览器向Web服务端发送http协议的request信息,接收来自服务器的response信息,即获取html信息。将html信息按照前端页面格式解析即可获得目标数据。在本次课程设计中,爬虫获取数据的过程如图2所示。

信息检索作业_基于关键字的简易信息推荐系统
图2 爬虫获取数据过程

2.2 数据处理

2.2.1数据预处理

(1) 词性划分

在自然语言中,词性作为词语基本的语法属性,是词语和语句的关键性特征。在本次数据处理的词性划分当中,以Python3中的jieba模块中的posseg.cut()方法进行划分成一个个具有独立词性的字符串。词性划分的原理如图3所示。

信息检索作业_基于关键字的简易信息推荐系统
图3 jieba模块的词性划分原理

(2) 去除干扰字符

针对获取的中文数据,存在一些干扰词和干扰字符,这些干扰项与正常语义没有直接联系,只是简介的表示语言中的强调,解释等作用。在本次课程设计中,将常用的干扰词和干扰字符合并在一个txt文件中。对于词性划分中之后的单个词与干扰词匹配,进而筛除干扰项。

2.2.2 TF-IDF模型训练

对于TF-IDF模型,其主要思想是:如果词w在一篇文档d中出现的频率高,并且在其他文档中很少出现,则认为词w具有很好的区分能力,适合用来把文章d和其他文章区分开来。该模型主要包含了两个因素:

l TF(Term Frequency),即词w在文档d中出现次数count(w,d)和文档d中总词数size(d)的比值:
tf(w,d) = count(w,d)/size(d)

l IDF(Inverse Document Frequency),即文档总数n与词w所出现文件数docs(w,D)比值的对数:
idf = log(n/docs(w,D))

(1) TF计算

对于TF的计算,只需要在获取的文档中统计关键字的频率即可。以一篇文档中关键词“信息检索”为例,其tf值的计算如图4所示:

信息检索作业_基于关键字的简易信息推荐系统

图4 关键字“信息检索”TF值的计算过程

(2) IDF计算

对于IDF的计算需要统计所有文档中某一个关键字出现的次数,使用一个文档计算IDF值显然是不够的。所以,对于IDF的值的取值需要进行训练。

在本次课程设计当中,以一个大概120个的随意选取文档进行IDF值的训练,然后将训练所得的关键字的IDF值与目标文档中的关键字进行比对,即可得到目标关键字的IDF值。对于IDF的计算过程如图5所示。

信息检索作业_基于关键字的简易信息推荐系统
图5 IDF的计算过程

有图可知,对于IDF的计算可以分为训练部分和计算部分。在训练部分,将以超过100个文档作为训练量,将这些的文档的分别进行词性划分以及关键字提取。将这些关键字存入set集合(Set集合可以存储不重复的元素)。对Set集合中的每个关键字统计其出现的文档数。按照IDF的计算公式:

信息检索作业_基于关键字的简易信息推荐系统

计算出每个关键字的IDF值。在上式中,为了避免关键字的IDF过大造成与测试示例的过拟合现象,分母采用加1的措施缓解此症状。最后以{“word”,“float”}字典的方式存储每个关键词的IDF值。另外对于未出现在字典中的关键字,其IDF值设置默认值——只需将上式中“关键字w出现的文档数”设置为0即可。

在测试部分,将数据预处理之后的关键字列表依次与字典中的key值相匹配,以训练的IDF值代替目标文档中的实际IDF值,载入上一小节计算的TF值,从而计算目标文档的每个关键字的tfidf值。对于目标文档中的每个关键字,按照tfidf的大小降序排列,选取排序前十的关键字代表目标文档的所覆盖的知识面,将这些关键字存入数据库,以供后续的数据检索。

3. 数据库设计模块设计与实现

在本次数据库设计中,以Mysql数据库为实际应用,在表单设计方面,考虑的两种方式:

(1) 将知识库文档以字符串的形式存储在表单的一个表项中;

(2) 将知识库文档在磁盘中的存储地址以字符串的形式存储在表项中。

考虑到在数据库结构中,知识库文档篇幅不一,且数据库的内部设计本身是为了防止存储数据之间的独立性,每一个数据都是按照特定的存储大小分块而得,不适于存储大量的大小差异巨大的数据,所以在本次课程设计中,知识库的文档在数据库中均只在数据库中存储其地址信息。

表单设计如表1所示:

表1 数据库表单的设计

id str1 str2 …… str10 address
int varchar varchar varchar varchar varchar

4. 人机交互模块设计与实现

人机交互模块主要用于对用户输入的数据进行处理,并返回合适的结果。在本次课程设计中,直观的体现为,用户输入对特定信息的搜索,后台处理检索信息,并输出知识库中认为最符合用户期望的信息。本人机交互模块主要可以分为两部分:输入数据的预处理和数据匹配。

​ 输入数据的预处理可以分为词性划分、去除干扰词两部分,这两项负责对用户输入的语句转换为其对应的关键字信息。这两部分与数据源处理模块中的词性划分、去除干扰项一样,此处不在复述。

​ 在数据匹配,采用改进的RR(Reciprocal Ranking)排序倒数方法进行相似度的计算。RR的原本是用来评价一个搜索引擎是否准确可靠。RR是指搜索结果中相关文档出现位置的倒数——1/r。在本次课程设计当中,将评价文档降维为关键字,其计算过程转变为第一个出现相关关键字的倒数。数据相关度的计算公式如下:

已知:对于用户输入的检索语句划分为n个关键字序列:S1,S2,S3……Sn;对于知识库中的m个文档存储情况,其关键字存储为ki1,ki2,……ki10(0<i<m);设R(S1,kij)(0<j<=10)表示用户输入的关键字S1与第i个文档的第j个关键字相关。

则其用户输入与第i个文档相关度的计算公式为:
信息检索作业_基于关键字的简易信息推荐系统

简单介绍上述公式:对于用户输入的所有关键字,以此与全部文档中的关键字进行匹配,若用户有一个与该文档的关键字相关,则相关度加上文档关键字在改文档当中出现位置的倒数。

数据匹配的详细过程如图6所示:

信息检索作业_基于关键字的简易信息推荐系统

图6 数据匹配算法过程

5. 实现结果与总结

5.1 实验结果显示:

ennnnn,可以实现,但是贼丑,我就不发了。

6.系统分析与改进:

在本次信息推荐系统当中,对于关键字是以TF-IDF模型进行关键字相关度的计算,以改进的RR匹配算法进行相关度的匹配。虽然理论上可以得出与用户查询最相关的论文,但是依然存在一些值得改善的地方。

  1. 对于TF-IDF模型,其优点是简单快速,结果比较符合实际情况。缺点是,单纯以“词频”衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。对于一篇论文摘要来说,一般偏向于最后的关键字其重要性会更加重要一些,应给予较大的权重值。

  2. 在本次课程设计当中用户输入输出流程太过于简陋,可以适当的建立Web服务,在数据库地址改为其URL地址,是用户具有更好的查询体验。

对于个人来说,本次课程设计只输出一个与查询最相关的文档,一方面是为了保持论文的准确性,另一方面是因为知识库的论文太少。在后续系统开发中,可以增加其知识库的论文数量。