IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 基于GPLinker的事件抽取代码解读。(预测部分) -> 正文阅读

[游戏开发]基于GPLinker的事件抽取代码解读。(预测部分)

tokens ?= ['[CLS]', '2020', '年', ',', '法', '院', '一', '审', '判', '处', '主', '要', '成', '员', '程', '杰', '有', '期', '徒', '刑', '22', '年', ',', '王', '绍', '伟', '有', '期', '徒', '刑', '20', '年', '。', '[SEP]']? (2020、20、22都被看成一个token)

mapping = [[], [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], [35], [36], []] ?通过token的index 来索引mapping找到text中的字符。

token_ids, segment_ids ?=[101, 8439, 2399, 8024, 3791, 7368, 671, 2144, 1161, 1905, 712, 6206, 2768, 1447, 4923, 3345, 3300, 3309, 2530, 1152, 8130, 2399, 8024, 4374, 5305, 836, 3300, 3309, 2530, 1152, 8113, 2399, 511, 102] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

#outputs[0].shape = (282, 34, 34)? len(tokens) =34

outputs[0][:, [0, -1]] -= np.inf ??(1)

outputs[0][:, :, [0, -1]] -= np.inf? (2)

由(1)(2)得每类34*34正方形的外面一圈都是- np.inf 因为cls,seq不是文本内容,使其得分为- np.inf

#构建链接

??? for i1, (_, _, h1, t1) in enumerate(argus):

??????? for i2, (_, _, h2, t2) in enumerate(argus):

??????????? if i2 > i1:

??????????????? if outputs[1][0, min(h1, h2), max(h1, h2)] > threshold:

??????????????????? if outputs[2][0, min(t1, t2), max(t1, t2)] > threshold:

??????????????????????? links.add((h1, t1, h2, t2))

??????????????????????? links.add((h2, t2, h1, t1))

global point 得分 (首)是一类因此是1*34*34

global point 得分 (尾)是一类因此是1*34*34

论元a首和b首的得分大于阈值0 都是 同理a尾和b尾,建立连接(a首,a尾,b首)和(b首,b尾,a首,a尾)正反都添加是方便后续做遍历查询有关系的节点是否存在links。

然后 析出事件groupby(sorted(argus), key=lambda s: s[0]) 用来分开不同类别,同一类别为一个列表(同一类别可能出现多个事件)。对每个类别进行clique_search。找出互相相关的论元节点构成集合。例如会出现a,b,c,d和c,d,e。其中e不和a,b相关而和c,d相关,集合里面互相都相关,因此可构成a,b,c,d和c,d,e。两集合。

? ??for _, sub_argus in groupby(sorted(argus), key=lambda s: s[0]):

??????? for event in clique_search(list(sub_argus), links):

??????????? events.append([])

??????????? for argu in event:

??????????????? start, end = mapping[argu[2]][0], mapping[argu[3]][-1] + 1

??????????????? events[-1].append(argu[:2] + (text[start:end], start))

??????????? if trigger and all([argu[1] != u'触发词' for argu in event]):

??????????? #如果一个触发词都没有,并且任务要求触发词,直接弹出当前事件event列表

??????????????? events.pop()

? for _, sub_argus in groupby(sorted(argus), key=lambda s: s[0]):

? 针对不同类型的进行遍历{('司法行为-罚款', '罚款对象', 10, 12), ('司法行为-入狱', '触发词', 15, 16), ('司法行为-入狱', '入狱者', 10, 12), ('司法行为-入狱', '刑期', 13, 14), ('司法行为-罚款', '时间', 1, 4), ('司法行为-罚款', '罚款金额', 22, 25), ('司法行为-罚款', '触发词', 20, 21), ('司法行为-入狱', '时间', 1, 4)}

遍历1? [('司法行为-罚款', '罚款对象', 10, 12),, ('司法行为-罚款', '罚款金额', 22, 25), ('司法行为-罚款', '触发词', 20, 21), ('司法行为-罚款', '时间', 1, 4)]

再遍历2 ?[('司法行为-入狱', '触发词', 15, 16), ('司法行为-入狱', '入狱者', 10, 12), ('司法行为-入狱', '刑期', 13, 14),('司法行为-入狱', '时间', 1, 4)]

对于遍历1:

执行 for event in clique_search(list(sub_argus), links):

用来确定 司法行为-罚款 类别中 是否 包含多个事件 通过clique_search(list(sub_argus), links)函数来返回。

并同一类型多个事件,进行遍历。添加到events列表中,如果不包含事件不包含触发词则 舍弃。

集合argus = [('司法行为-入狱', '入狱者', 10, 15), ('司法行为-入狱', '入狱者', 23, 25), ('司法行为-入狱', '刑期', 20, 21), ('司法行为-入狱', '刑期', 30, 31), ('司法行为-入狱', '时间', 1, 2), ('司法行为-入狱', '触发词', 16, 19), ('司法行为-入狱', '触发词', 26, 29)]

集合argus 俩俩挨个遍历,找出不相邻的俩个节点

('司法行为-入狱', '入狱者', 10, 15)和('司法行为-入狱', '入狱者', 23, 25) 不相邻

单独再遍历集合argus找出 ('司法行为-入狱', '入狱者', 10, 15)相邻的节点,构成集合

因为现在虽然已经分出事件1,事件2,但事件1中,所有节点只和其中一个指定的节点相关,并不是所有节点都相互相关,因此需要递归找出,互不相关的节点再构成以该节点为中心找出事件1中与其相关的节点。(那么剩下的节点都是互相相关的不再处理,可以构成一个事件返回)

即定义一个函数:

遍历同一个事件类型1集合,找出事件类型1互不相关的节点a,b,并分别以a,b节点为中心,找出事件类型1与a,b相关的节点构成集合A和集合B,然后通过递归再遍历集合A和集合B,找出集合A、集合B互不相关的节点a1,b1,a’1,b’1。对集合A而言,选a1,b1为例,并分别以a1,b1节点为中心,找出与a1,b1相关的节点构成集合A1和集合B1,继续递归,如果找不出互不相关的节点a1,b1,即集合A所有的节点都相关,那么返回集合A。同理集合B

* 它找的是一对儿,例如事件A(a,b,c)都相关,且事件B(a,b,d)都相关,

以上情况只限定同一事件类型,a,b,c,d四个论元节点。c和a,b有关但,c和d无关,且d和a,b有关,已经事件内都互相相关。

同理遍历2 ('司法行为-入狱', '入狱者', 23, 25) 一样。

* 相邻的节点构成事件集合event?如果已经重复存在,则不添加。

??????????? for event in extract_events(l['text']):

??????????????? final_event = {

??????????????????? 'event_type': event[0][0],

??????????????????? 'arguments': DedupList()

??????????????? }

??????????????? for argu in event:

??????????????????? if argu[1] != u'触发词':

??????????????????????? final_event['arguments'].append({

??????????????????????????? 'role': argu[1],

??????????????????????????? 'argument': argu[2]

??????????????????????? })

??????????????? event_list = [

??? ????????????????event for event in event_list

??????????????????? if not isin(event, final_event)

??????????????? ]

??????????????? if not any([isin(final_event, event) for event in event_list]):

??????????????????? event_list.append(final_event)

遍历一个样本的事件,得出事件的事件类型,触发词,role,论元内容。最后为啥要排除event_list中被final_event包含的event, 或者event_list中的有event包含final_event就不添加的操作可以不要这操作吗?在之前不是已经全部遍历找到所有互相相关的论元并构成了一个集合,应该不存在这种一个样本只找了部分的相关论元构成的事件。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:25:36  更:2022-04-01 00:29:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:58:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码