• 中文人物关系知识图谱(含码源):中文人物关系图谱构建、数据回标、基于远程监督人物关系抽取、知识问答等应用.


    在这里插入图片描述

    项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自身的硬实力。

    在这里插入图片描述

    1. 专栏订阅:项目大全提升自身的硬实力

    2. [专栏详细介绍:项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域)

    中文人物关系知识图谱(含码源):中文人物关系图谱构建、数据回标、基于远程监督人物关系抽取、知识问答等应用.

    • 项目介绍
      知识抽取(实体关系抽取)是知识图谱构建中的核心环节,实体关系抽取作为一项基本技术在自然语言处理应用中扮演着重要作用.
      究其技术而言,主要分成两种三种主流方法:

    1, 基于规则的方法

    在工业界大多还是使用的规则模板的方法
    这个项目提供了一种基于VOB模式的顺承事件抽取方法,讲的是一种顺承关系
    基于规则的方法,升级版的话,就是Bootstrapping了,可以通过用户自定义种子模板,不断迭代,最终扩充模式,但置信度这个问题不是很好解决

    2, 基于学习的方法

    这个在学术界用的比较多,从机器学习一直演变了到现在的各种深度学习模型,而在这种方法中,通常实体关系抽取问题转换成一个实体关系分类任务去做,主要可以分成一下几种.

    1. 基于全监督的实体关系抽取
      这个全监督,也就是说,基于完全标注数据的一种学习方式,例如著名的实体关系评测Semeval系列,给出了19种关系分类任务,ACE给出了17类的实体关系分类任务.针对这些任务,模型经历了CNN,LSTM,ATTENTION等,这里就不再说明.
    2. 基于噪声数据的远程监督实体关系抽取
      全监督模型固然很好,但数据是一个很棘手的问题,因此就出现了远程监督的方法,所谓远程监督,个人理解就是已经存在的知识库进行数据回标,然后通过多实例学习进行一种容许噪声的监督方法.不过这种方法准确率不是很高,在NYT这个数据集上,PCNNS等工作都没有达到业业界可以使用的地步.当然,最新出现了联合训练的模型.
    3. 基于规则与学习模型融合的实体关系抽取
      这种方式,在业界或许是一种出路,例如,将实体关系抽取中的实体识别部分交给学习模型去做序列标注,最后针对实体之间的关系,结合依存句法等语义规则去做,这个在解决实体的多种关系问题,可以去尝试.

    3, 项目难点

    但就针对全监督的实体关系抽取任务而言,在英文数据集上已经在刷各种state-of-art,但就中文而言,感觉还是一片贫瘠.在网上搜了很久,最终指搜到COAE2016的一个评测任务,但是,评测集不公开.因此,就抛出了本项目构建的几个初衷:

    1. 中文实体关系抽取数据集很少,能不能构建一个准确率可接受的数据集?
    2. 能不能浅显易懂地把那些"高大上"的远程监督,bootstrapping经历一遍?
    3. 人物关系数据在百科等平台上都有放出,或许可以做为远程监督的先验知识库?
    4. 能否提供一个实时动态更新的人物关系图谱方法?

    4,项目任务

    • 本项目将尝试完成以下几个任务:
      1. 完成一定规模的人物关系知识库, 作为公开数据集开放出去
      2. 走一遍实体关系回标,形成一个准确性相对允许的人物关系抽取数据集
      3. 走一遍基于学习方式实体关系抽取,查看一下效果,熟悉一下这个技术流程
      4. 走一便基于Bootstrapping的实体关系抽取,熟悉一下这个技术流程
      5. 基于构建起来的人物关系图谱,完成一个面向人物关系图谱的知识问答

    5.项目架构图

    部分代码展示:

     '''采集主函数'''
        def spider_person(self, person):
            #系统默认返回关于该实体的三度人物关系
            data = self.get_html(person)
            if not data:
                return
            nodes = data['nodes']
            if not nodes:
                return
            else:
                item = {}
                item['nodes'] = nodes
                item['links'] = data['links']
                try:
                    self.conn['person_rel']['data2'].insert(item)
                except Exception as e:
                    print(e)
    
        '''收集人物名称'''
        def collect_names_star(self):
            f = open('korea_star_person_names.txt', 'w+')
            for page in range(1,11):
                # url = 'http://g.manmankan.com/dy2013/mingxing/fenlei/china/index_%s.shtml'%page
                url = 'http://g.manmankan.com/dy2013/mingxing/fenlei/hanguo/index_%s.shtml'%page
                req = request.Request(url)
                page = request.urlopen(req).read().decode('gbk')
                selector = etree.HTML(page)
                names = selector.xpath('//li/a/@title')
                f.write('\n'.join(list(names)) + '\n')
            f.close()
    
        '''收集历史人物'''
        def collect_names_history(self):
            f = open('history_person_names2.txt', 'w+')
            content = open('history_names2.html').read()
            selector = etree.HTML(content)
            names = [i.replace(' ','') for i in selector.xpath('//li/a/text()')]
            f.write('\n'.join(names) + '\n')
            f.close()
    
        '''采集函数'''
        def spider_main(self):
            history_names = [i.strip() for i in open('history_person_names.txt') if len(i.strip()) > 1]
            star_names = [i.strip() for i in open('star_person_names.txt') if len(i.strip()) > 1]
            name_dict = {
                'star': star_names,
                'history': history_names,
                }
            for label, names in name_dict.items():
                for name in names:
                    data = self.spider_person(name)
    
        '''读取人物名称'''
        def update_data(self):
            names_all_has = []
            names_all_add = []
            for item in self.conn['person_rel']['data'].find():
                nodes =item['nodes']
                links = item['links']
                names = [node['name'] for node in nodes]
                names_all_has += names
    
            for item in self.conn['person_rel']['data2'].find():
                nodes =item['nodes']
                links = item['links']
                names = [node['name'] for node in nodes]
                names_all_add += names
    
            for name in set(names_all_add).difference(set(names_all_has)):
                self.spider_person(name)
            return
    
        '''统计有多少人物'''
        def read_persons(self):
            f = open('person.txt', 'w+')
            names_all = []
            links_all = []
            for item in self.conn['person_rel']['data2'].find():
                nodes = item['nodes']
                links = item['links']
                link_names = [link['name'] for link in links]
                links_all += link_names
                names = [node['name'] for node in nodes]
                names_all += names
            print(len(set(names_all)), len(names_all))
            print(len(set(links_all)), len(links_all))
            f.write('\n'.join(list(set(names_all))))
            f.close()
    
        '''整理人物数据'''
        def modify_data(self):
            f_rel = open('rel_data.txt', 'w+')
            f_reltype = open('rel_type.txt', 'w+')
            f_person = open('person2id.txt', 'w+')
            person_dict = {}
            rel_dict = {}
            rel_list = set()
            rel_types = []
    
            for item in self.conn['person_rel']['data2'].find():
                nodes = item['nodes']
                for node in nodes:
                    id = node['id']
                    name = node['name']
                    person_dict[id] = name
    
            for item in self.conn['person_rel']['data2'].find():
                links = item['links']
                for link in links:
                    from_person = person_dict.get(link['from'], '')
                    to_person = person_dict.get(link['to'], '')
                    if not from_person or not to_person:
                        continue
                    rel_name = link['name']
                    rel_type = link['type']
    
                    rel_dict[rel_name] = rel_type
                    data = [from_person, to_person, rel_name, str(rel_type)]
                    rel_list.add('###'.join(data))
    
            rels_num = len(rel_list)
            persons_num = len(person_dict.keys())
    
            for rel in rel_list:
                if len(rel.split('###')) != 4:
                    continue
                rel_name = rel.split('###')[2]
                rel_types.append(rel_name)
    
    
            for id, name in person_dict.items():
                f_person.write(str(id) + '\t' + name + '\n')
    
            reltype_dict = Counter(rel_types).most_common()
    
            sum = 0.0
            for i in reltype_dict:
                rel_name = i[0]
                rel_freq = i[1]
                rel_percent = rel_freq/rels_num
                sum += rel_percent
    
                f_reltype.write(rel_name + '\t' + str(rel_freq) + '\t' + str(rel_percent) + '\t' + str(sum) + '\n')
    
            f_rel.write('\n'.join(list(rel_list)))
            f_person.close()
            f_rel.close()
            f_reltype.close()
    
            print('rels_num', rels_num)
            print('persons_num', persons_num)
            return
    
    
    if __name__ == '__main__':
        handler = PersonSpider()
        handler.spider_main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157

    6.人物关系基础知识库

    1,收集人名词典

    2,基于人名词典,采集搜狗人物关系图谱数据库

    • 刘备人物关系网

    • 韩寒人物关系网

    3,人物关系数据库规模

    项目数量
    人物11024
    关系对35995
    关系类型1144

    4,人物关系60%

    关系类型频次频率累加频率
    搭档46920.13034781642404710.1303478164240471
    好友37710.104761640182242470.23510945660628957
    队友17580.048838759862206910.2839482164684965
    朋友16810.046699633292588060.3306478497610846
    丈夫14310.039754417157461940.3704022669185465
    妻子11980.033281475719524390.4036837426380709
    师傅9860.027391932436937440.4310756750750083
    儿子9720.0270030003333703760.4580786754083787
    母亲9220.025613957106345150.4836926325147239
    同学6980.019391043449272140.5030836759639961
    弟弟6780.018835426158462050.5219191021224581
    女儿6090.016918546505167240.5388376486276253
    前女友5940.0165018335370596750.555339482164685
    哥哥5800.016112901433492610.5714523835981776
    合作5730.015918435381709080.5873708189798867
    前男友5730.015918435381709080.6032892543615959

    7.回标语料构建

    目录地址:EventMonitor
    运行方式:cd EventMonitor , scrapy crawl eventspider
    回标语料举例:

      <霍英东, 霍震宇, 三子>	据此间媒体11日报道,霍英东长房三子霍震宇再度入禀法院,要求法官颁令兄长霍震霆交出记录霍英东所有资产及财务资料的记事本1.0
      <朴宝英, 金秀贤, 绯闻>	【组图】最爱人妻全智贤“初恋”秀智一再插足 朴宝英韩佳人T-ara恩静已成往事 金秀贤绯闻女友大盘点1.0
      <辰亦儒, 炎亚纶, 飞轮海组合>	飞轮海曾是火遍亚洲的偶像组合,飞轮海四名成员吴尊、汪东城、辰亦儒炎亚纶四人也曾是不少人心目中的偶像,象征着我们的一代人的青春1.0
      <唐贝欣, 唐贝诗, 姐姐>	唐贝欣在伦敦大学毕业姐姐唐贝诗当然捧场1.0
      <刘琳, 刘孜, 同学>	刘孜是徐静蕾、刘琳的同学,最初是主持综艺节目,后投入影视剧的拍摄1.0
      <高晓松, 沈欢, 第一任妻子>	高晓松老婆沈欢相识过程:关于高晓松和第一任妻子沈欢的相识,颇具戏剧性1.0
      <高崚, 张军, 搭档>	高崚是国羽历史上的又一位女子兼项英雄,2000年8月,高崚搭档张军参加悉尼奥运会羽毛球混双比赛中爆冷为中国队夺得了奥运会历史上第一枚混双金牌1.0
      <李行亮, 黄雅莉, 好友>	陈俊彤自出道以来收获了不少圈内好友,李行亮黄雅莉等也纷纷为陈俊彤新专辑的推出送上了祝福,他们对于音乐同样的执着和热爱令友谊长存,也令现场火速升温1.0
      <谢坤达, 黄鸿升, 好友>	修杰楷和好友黄鸿升谢坤达2017年上《小燕有约》,在小燕姐的追问下侃侃而谈,回忆两人相恋,感性说:“我一直说静雯比我勇敢,她其实要付出的事情,是比我更多1.0
      <张君秋, 王婉华, 弟子>	演出结束后,董雪平、万晓慧拜京剧名家张君秋先生弟子王婉华、薛亚萍为师1.0
      <霍英东, 霍启山, 孙子>	霍启山,1983年5月生,广州人,是霍英东的孙子,父亲霍震霆为霍英东长子,母亲是港姐冠军朱玲玲,哥哥是霍启刚,弟弟是霍启仁1.0
      <苗侨伟, 苗彤, 女儿>	4.苗侨伟女儿苗彤1.0
      <万方, 曹禺, 父亲>	知名作家、曹禺三女儿万方在会后接受专访时表示,自己曾因为父亲在话剧方面的成就而感到压力,直到五十岁才写出第一部话剧作品1.0
      <姜文, 姜一郎, 女儿>	近日,姜文女儿姜一郎和外国朋友的合影在网络曝光,合影中姜一郎长发红唇,很有大腕风范1.0
      <陈建斌, 曹卫宇, 同学>	曹卫宇在剧中饰演吴昆才,和大学同学也是多年好兄弟的陈建斌有大量对手戏,两人在片场配合十分默契,曹卫宇更是大呼和兄弟演戏很过瘾1.0
      <曹敏莉, 曹蕙兰, 妹妹>	曹敏莉的妹妹曹蕙兰(前名曹敏宝)通过电话访问,激赞未来姐夫爱屋及乌,问她姐姐是否有喜,曹蕙兰说:“一定不是,反而大姐姐七月就生了1.0
      <付笛声, 付豪, 儿子>	1992年,任静和付笛声的儿子付豪出生了,让这个家庭更添了许多的欢乐1.0
      <王洪礼, 王亮, 儿子>	而王洪礼的儿子王亮也从事了足球职业,并且取得了不错的成绩1.0
      <韩庚, 银赫, sj成员>	出道当时的成员有利特、希澈、韩庚、艺声、强仁、神童、晟敏、银赫、东海、始源、厉旭和起范1.0
      <刘少奇, 刘允斌, 儿子>	1955年,在俄罗斯已经扎根立足的刘允斌接到了父亲的来信,刘少奇希望儿子能回到祖国,加入到新中国第1.0
      <丁俊晖, 蔡剑忠, 恩师>	他拥有出众的台球能力,而且很懂事,性格比较开朗,深得教练喜爱,丁俊晖昔日恩师蔡剑忠[微博]就曾公开表示,“如果袁思俊发展好,未来极有可能追上甚至超越丁俊晖的成就1.0
      <郁可唯, 黄英, 同是快女>	搜狐娱乐讯“快女”三强正式出炉!与传闻相符,最后一位离开的选手在同是成都赛区的黄英郁可唯之间进行抉择,唱功备受肯定的郁可唯最终止步三强,成为今年“快女”第四名1.0
      <王皓, 闫博雅, 妻子>	腾讯体育9月29日讯近日,乒乓名将王皓在综艺节目中因与妻子闫博雅意见不合而愤然离场,这件事引起不小的轰动1.0
      <蔡康永, 刘坤龙, 同志男友>	蔡康永泣诉心酸路感动金星 蔡康永男友刘坤龙个人资料曝光(图)1.0
      <张晨, 卢卫中, 教练>	多年来,江苏队先后为国家队培养和输送了袁伟民、邹志华、邸安和、曹平、薛永业、张友生、卢卫中、陆飞、张晓东、施海荣、陈平、张晨等一大批优秀国手和教练,为我国排球事业做出卓越的贡献1.0
      <叶莉, 苗立杰, 好友>	陈楠与苗立杰均为姚夫人叶莉在女篮国家队中的好友,因此她们与姚明夫妇的关系极佳1.0
      <于震, 辛月, 妻子>	演员于震的妻子辛月貌美如花【图】1.0
      <马唯中, 周美青, 母亲>	马英九夫人周美青几次出境,据了解,马唯中趁同行机会,要蔡沛然向她母亲请安1.0
      <康希, 何耀珊, 妻子>	新加坡康希等牧者失信案二审 其妻子何耀珊被指募资1.0
      <卢燕, 李桂芬, 母亲>	卢燕的母亲是京剧名伶李桂芬,曾拜梅兰芳为义父,而京剧大师梅兰芳正是第一位将京剧介绍到海外的文化使者,并使京剧跻身于世界戏剧之林1.0
      <李健, 沈梦辰, 经纪人>	记者了解到包括沈梦辰在内的《歌手3》(在线观看)芒果经纪人也将加盟《好好学吧》,至于沈梦辰会否带着清华哥李健一起上节目,备受期待1.0
      <林志玲, 吴慈美, 母亲>	林志玲母亲吴慈美表示,“她每年都要缴很多税款,应该不会(漏税)吧1.0
      <钱三强, 钱民协, 女儿>	钱三强女儿钱民协:三钱中两钱曾是邻居1.0
      <杨元龙, 杨敏德, 女儿>	1978年由杨元龙创立的香港溢达集团,早在20年前就交班到女儿杨敏德的手中1.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    码源链接见文章顶部or文末

    https://download.csdn.net/download/sinat_39620217/88000676

  • 相关阅读:
    java面试题之 int和Integer的区别
    【Rust 笔记】14-集合(下)
    牛客小白月赛60-D-游戏购买!
    Asp.net core 少走弯路系列教程(cnblogs 博客园首发)
    快速排序
    iNFTnews|Web3走进FIFA世界杯
    重点用能单位能耗在线监测接入端系统
    鸿蒙ArkTS Api9 AES CBC 加密
    三网话费余额查询的API系统 基于thinkphp6.0框架
    第二部分—C语言提高篇_11. 预处理
  • 原文地址:https://blog.csdn.net/sinat_39620217/article/details/131933055