大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的知识进行总结与归纳,不仅形成深入且独到的理解,而且能够帮助新手快速入门。
本文主要介绍了通过变量理解bigru的工作过程,希望能对学习GRU的同学们有所帮助。
文章目录
vec
vec:array of word vec:
[
[-0.058550 0.125846 -0.083195 0.031818 -0.183519…], —>‘,’
[0.087197 -0.083435 0.057956 0.143120 -0.000068…], ---->‘的’
…
]
每一行都是一个词的向量,最后两行是随机生成的正态分布数据,对应下面的UNK和BLANK
word2id
word2id:dictionary of word and its index
{
‘,’: 0,
‘的’: 1,
…,
‘UNK’: n,
‘BLANK’: n+1}
relation2id
relation2id: dictionary of relation and its index
{
unknown :0,
父母 :1,
夫妻 :2,
师生 :3,
兄弟姐妹 :4,
…,
上下级: 11
}
fixlen
fixlen: length of sentence is 70
fixlen = 70
maxlen
maxlen: max length of poscedding is 60 (-60~+60)
maxlen = 60
tup
tup: tuple including entity 1 and entity 2
example: (‘小龙女’,‘杨过’)
label
label: the tag in one-hot
example:
tag-父母
label: [0,1,0,…,0]
train_sen
{
(‘朱时茂’, ‘陈佩斯’):[ [[output1], [output2]], [[output_1], [output_2]] , … ],
}
train_ans
{
(‘朱时茂’, ‘陈佩斯’):[ [label 1], [label 2] ,… ]
(‘小龙女’, ‘杨过’):[ [label 1], [label 2],…],
…
}
label_tag
构成train_ans过程中,label_tag记录了当前label值在[ [label 1], [label 2],… ]中的索引,如果不在,则记录最后一个索引,如果[ [label 1], [label 2],… ]为空,则为0
en1pos & en2pos
实体1和实体2在句子中出现的索引,没有出现,索引计为0
output
形式为list套list,每个小list包含三部分:word、rel_e1, rel_e2。在构造时先初始化70(fixlen)个小list,并且每个小list的word都为BLANK这个字对应的索引(word2id中),rel_e1和rel_e2即通过函数pos_embed计算出的实体1和实体2嵌入的位置。
更新过程中:如果sentence的长度小于70(fixlen),那么只更新前len(sentence)个小list中的word,每个word更新为sentence当前词在word2id中的索引,假如当前词不在word2id中,更新为UNK对应的索引。
因此最终output是由70个小list构成的大list
trains_seq & train_ans再次讲解
test_seq & test_ans
test_ans:
{
(A,B): [1, 0, 1, 1, 0,…],
(C, D):[0, 1, 0, 0, 1,…],
…
}
train时,同一个实体对,不同的label分别用one-hot(列表)表示,并组合成一个大列表,test是将one-hot变成了N-hot,为1表示这个实体对出现了1对应的关系
test_seq:
{
(A, B):[ [sentence1], [sentence2], …],
(C, D):[ [sentence3], [sentence4], …],
…
}
train_y & train_x
train_y:
[
[
l
a
b
e
l
1
1
,
l
a
b
e
l
2
1
,
l
a
b
e
l
3
1
,
.
.
.
]
,
[label^1_1, label^1_2, label^1_3,...],
[label11,label21,label31,...],
[
l
a
b
e
l
1
2
,
l
a
b
e
l
2
2
,
l
a
b
e
l
3
2
,
.
.
.
]
,
[label^2_1, label^2_2, label^2_3,...],
[label12,label22,label32,...],
…
]
上角标表示第i个实体对,下角标表示第j个label
train_x:
[
[
[
s
e
n
11
1
,
s
e
n
12
1
]
,
[
s
e
n
21
1
,
s
e
n
22
1
]
,
.
.
.
]
,
[ [sen^1_{11}, sen^1_{12}], [sen^1_{21}, sen^1_{22}],... ],
[[sen111,sen121],[sen211,sen221],...],
[
[
s
e
n
11
2
,
s
e
n
12
2
]
,
[
s
e
n
21
2
,
s
e
n
22
2
]
,
.
.
.
]
,
[ [sen^2_{11}, sen^2_{12}], [sen^2_{21}, sen^2_{22}],... ],
[[sen112,sen122],[sen212,sen222],...],
…
]
s
e
n
31
2
sen^2_{31}
sen312表示第2个实体对第三个label对应的第一个句子
train_q&a.txt
|行数 | 实体1| 实体2| the index of relation|
|-|-|-|-|-|
|0|小龙女|杨过|0|
|1|小龙女|杨过|2|
|2|郭靖|黄蓉|1|
|3|鲁迅|鲁瑞|8|
test_x & test_y
test_x:
[
[
[
s
e
n
t
e
n
c
e
1
1
]
,
[
s
e
n
t
e
n
c
e
2
1
]
,
.
.
.
]
,
[ [sentence^1_1], [sentence^1_2], ...],
[[sentence11],[sentence21],...],
[
[
s
e
n
t
e
n
c
e
1
2
]
,
[
s
e
n
t
e
n
c
e
1
2
]
,
.
.
.
]
,
[ [sentence^2_1], [sentence^2_1], ...],
[[sentence12],[sentence12],...],
…
]
test_y:
[
[1, 0, 1, 1, 0,…], —>第一个元组对应的label
[0, 1, 0, 0, 1,…], ---->第二个元组对应的label
]
test_q&a.txt’
|行数 | 实体1| 实体2| the string of the indicies of relation
|-|-|-|-|-|
|0|小龙女|杨过|0 2|
|1|郭靖|黄蓉|1|
|2|鲁迅|鲁瑞|8|