您的位置:首页 > 其它

基于规则嵌入的论文比对系统——创新实训记录13(个人工作总结)

2020-07-13 06:11 281 查看

6-29 个人工作总结

创新实训记录13——个人工作总结

  • 二、 数据可视化
  • 三、 规则之关键词相似度
  • 四、总结
  •         在本次项目实训中,我的工作主要分为三个部分,分别是数据补充整理、数据可视化、规则之关键词相似度。下面简要总结概括一下这三方面的工作。

    一、 数据补充整理

            最初的ACM论文数据集中,包含的数据有论文的ID、标题、摘要、关键字、引用关系、CCS分类,以及论文摘要中句子级别的子空间标记(研究背景、研究问题、贡献、方法、实验)。但是没有论文的year,venue,quote属性,即论文发表的年份、发表的期刊或会议、论文的被引用量这些信息。我们的网页是让用户选择论文的年份和会议,然后筛选出一个集合,在这个集合的基础上计算每两个论文对之间再不同子空间上的相似度,所以需要再去爬取或者直接搜集数据。

    第一种思路

            直接搜集下载现有的论文数据集,然后找到论文数据集和ACM数据集之间的论文匹配关系。我们选择https://www.aminer.cn/oag2019作为数据来源(数据格式如下图)。对于ACM数据集的处理,我们读取ACM数据集中的node。对于OAG数据集的处理,把每一篇论文对应的title、year、venue取出来形成一个新的json数据,title数据要全部处理成小写。对于ACM中的每一篇论文,用论文题目去OAG数据集中找到对应的论文,提取出year、venue、quote信息。但是发现OAG提供的论文数据量太大,针对每一篇论文去查找速度有些慢。

    第二种思路

            使用论文检索工具,搜索每一篇论文的题目,然后网址上就会展示论文的各种信息。这里使用的是google scholar国内镜像版,论文信息如下图:

            我们可以先爬取一篇指定论文的对应数据(year、venue、quote),定义一个获取信息的函数。然后观察url链接形式,根据论文题目自动生成链接,然后根据链接爬取所有论文对应的数据。

    二、 数据可视化

            我们需要有对数据集的描述并且围绕实训项目进行一些数据统计,丰富网页界面,让用户对我们的数据集有更直观清晰的认识。

    可视化形式

            主要的数据可视化形式如下(共6种图表形式,都已实现但有些未在网页界面上展示):
            1.论文集合层面:
            ① 不同年份形成不同的论文集合,平均引用量与被引用量统计(柱状图、盒须图、折线图)
            ② 不同年份形成不同的论文集合,统计某一年的论文总数(柱状图)
            ③ 不同会议形成不同的论文集合,统计来自某一会议的论文总数(饼状图)
            ④ 不同会议形成不同的论文集合,统计某会议中论文的平均被引用量(饼状图)
            ⑤ 不同的会议、年份形成不同的集合,关键词词频统计(词云图)
            2.单篇论文层面:
            ① 摘要在每个子空间上(0-4)句子的数量(柱状图)
            ② 论文引用了哪些论文(关系图)
            ③ 论文被哪些论文所引用(关系图)

    可视化效果展示

            可视化的过程大都一样,先对数据进行预处理,处理成pyecharts图表所需要的数据格式,然后利用pyecharts实现可视化效果。数据预处理就不多赘述了,可视化效果如下:










    三、 规则之关键词相似度

            我们的数据集中有两组关键词,第一个是全局意义上的每篇论文的关键词,第二个是论文摘要在每个子空间上的关键词。最开始我们是求关键词集合的杰卡德相似度,但是发现这种方式overlap的数据非常少,仅考虑单词的有无,而忽略了单词的语义信息。两个不同的单词可能具有相似的语义,比如media与medium,technology与technique,求杰卡德相似度的话他们就被忽略,所以我们转换思路,求关键词语义上的相似度。

    思路

           首先进行word embedding,将单词转换为向量。然后定义求两组关键词相似度的函数。假设我们有两个关键词集合,分别是{a1,a2,…,an},{b1,b2,…,bm}(假设n>m),将a1与b1,…,bm分别求余弦相似度,取max,同理,a2,…,an也进行同样的操作,最后得到n个max值,再将这些max值取平均得到一个实数,用它来代表两个关键词集合的相似度。

    具体实施

    1. 数据预处理
      主要针对子空间上的关键词进行处理。因为最初我们只有论文的摘要和摘要中每个句子的子空间标记,并没有句子对应的关键词。所以首先我们需要从句子中提取关键词,然后将数据存储起来备用。
      根据队友找的模型(这里只采用了一个无监督SingleRank模型,没有进行模型的融合,想要优化的话可以从关键词的提取这入手,最后好采用的是BERT模型),处理sentence_textcnn_deal2.json中每个子空间上的句子,提取某篇论文出在该子空间上的关键词。处理结果是生成五个npy文件,对应五个子空间,每个文件的内容是字典。字典的key是论文id,字典的value是集合,包含论文在该子空间上的所有关键词。
    2. 训练词向量
      对于全局的关键词,语料库选择keywords.txt。对于子空间上的关键词,语料库选择abstracts.txt。因为子空间上的关键词都是在摘要中提取的,所以这些词肯定在abstracts中,并且有了完整的语句,训练效果会比上一个只有关键词的好。
    3. 定义求关键词相似度的函数
      全局上的关键词:参数是两篇论文的id,输出一个实数代表两篇论文全局关键词的相似度。如果某篇论文没有关键词信息,那么相似度为0。
    # 定义相似度函数
    def getKeySimi(id1,id2):
    simi = 0
    id1 = str(id1)
    id2 = str(id2)
    keywords1 = word_dic[id1]
    keywords2 = word_dic[id2]
    len1 = len(keywords1)
    len2 = len(keywords2)
    max_dis = []
    if len1>len2>0:
    for key1 in keywords1:
    # 每一个关键词与另一组关键词求cosine distance
    dis_list = []
    for key2 in keywords2:
    v1 = model[key1]
    v2 = model[key2]
    s = np.dot(v1, v2) / (norm(v1) * norm(v2))
    dis_list.append(s)
    maxc = max(dis_list)
    max_dis.append(maxc)
    simi = mean(max_dis)
    elif len1>0:
    for key2 in keywords2:
    # 每一个关键词与另一组关键词求cosine distance
    dis_list = []
    for key1 in keywords1:
    v1 = model[key1]
    v2 = model[key2]
    s = np.dot(v1, v2) / (norm(v1) * norm(v2))
    dis_list.append(s)
    maxc = max(dis_list)
    max_dis.append(maxc)
    simi = mean(max_dis)
    
    return simi

            子空间上的关键词:参数是两篇论文的id和子空间id,输出一个实数代表两篇论文在某子空间上关键词的相似度。如果某篇论文在该子空间上没有关键词,那么相似度为0。(函数定义类似,就不贴代码了)

    四、总结

            在本次项目实训中,我前期主要是负责数据处理方面的工作,后期开始协助做核心算法的队友完成任务。在这次项目中,我重新熟悉了一下爬虫、数据可视化的相关知识,加深了对文本关键词提取、文本相似度等知识的学习。很感谢老师和学姐的指导和帮助,很感谢队友的鼓励和支持,希望以后可以接触学习更多机器学习方面的知识,提升自己的代码/论文复现能力。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: