mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-26 01:46:28 +03:00
Revert "Improve dynamic oracle when values are missing in parse"
This reverts commit f56bd4736b
.
This commit is contained in:
parent
546dd99cdf
commit
d1b27fe5aa
|
@ -58,9 +58,9 @@ cdef weight_t push_cost(StateClass stcls, const GoldParseC* gold, int target) no
|
||||||
cdef int i, S_i
|
cdef int i, S_i
|
||||||
for i in range(stcls.stack_depth()):
|
for i in range(stcls.stack_depth()):
|
||||||
S_i = stcls.S(i)
|
S_i = stcls.S(i)
|
||||||
if gold.has_dep[target] and gold.heads[target] == S_i:
|
if gold.heads[target] == S_i:
|
||||||
cost += 1
|
cost += 1
|
||||||
if gold.has_dep[S_i] and gold.heads[S_i] == target and (NON_MONOTONIC or not stcls.has_head(S_i)):
|
if gold.heads[S_i] == target and (NON_MONOTONIC or not stcls.has_head(S_i)):
|
||||||
cost += 1
|
cost += 1
|
||||||
if BINARY_COSTS and cost >= 1:
|
if BINARY_COSTS and cost >= 1:
|
||||||
return cost
|
return cost
|
||||||
|
@ -73,12 +73,10 @@ cdef weight_t pop_cost(StateClass stcls, const GoldParseC* gold, int target) nog
|
||||||
cdef int i, B_i
|
cdef int i, B_i
|
||||||
for i in range(stcls.buffer_length()):
|
for i in range(stcls.buffer_length()):
|
||||||
B_i = stcls.B(i)
|
B_i = stcls.B(i)
|
||||||
if gold.has_dep[B_i]:
|
cost += gold.heads[B_i] == target
|
||||||
cost += gold.heads[B_i] == target
|
cost += gold.heads[target] == B_i
|
||||||
if gold.heads[B_i] == B_i or gold.heads[B_i] < target:
|
if gold.heads[B_i] == B_i or gold.heads[B_i] < target:
|
||||||
break
|
break
|
||||||
if gold.has_dep[target]:
|
|
||||||
cost += gold.heads[target] == B_i
|
|
||||||
if BINARY_COSTS and cost >= 1:
|
if BINARY_COSTS and cost >= 1:
|
||||||
return cost
|
return cost
|
||||||
if Break.is_valid(stcls.c, 0) and Break.move_cost(stcls, gold) == 0:
|
if Break.is_valid(stcls.c, 0) and Break.move_cost(stcls, gold) == 0:
|
||||||
|
@ -109,10 +107,7 @@ cdef bint arc_is_gold(const GoldParseC* gold, int head, int child) nogil:
|
||||||
|
|
||||||
cdef bint label_is_gold(const GoldParseC* gold, int head, int child, attr_t label) nogil:
|
cdef bint label_is_gold(const GoldParseC* gold, int head, int child, attr_t label) nogil:
|
||||||
if not gold.has_dep[child]:
|
if not gold.has_dep[child]:
|
||||||
if label == SUBTOK_LABEL:
|
return True
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return True
|
|
||||||
elif label == 0:
|
elif label == 0:
|
||||||
return True
|
return True
|
||||||
elif gold.labels[child] == label:
|
elif gold.labels[child] == label:
|
||||||
|
@ -172,7 +167,7 @@ cdef class Reduce:
|
||||||
# Decrement cost for the arcs e save
|
# Decrement cost for the arcs e save
|
||||||
for i in range(1, st.stack_depth()):
|
for i in range(1, st.stack_depth()):
|
||||||
S_i = st.S(i)
|
S_i = st.S(i)
|
||||||
if gold.has_dep[st.S(0)] and gold.heads[st.S(0)] == S_i:
|
if gold.heads[st.S(0)] == S_i:
|
||||||
cost -= 1
|
cost -= 1
|
||||||
if gold.heads[S_i] == st.S(0):
|
if gold.heads[S_i] == st.S(0):
|
||||||
cost -= 1
|
cost -= 1
|
||||||
|
@ -213,10 +208,8 @@ cdef class LeftArc:
|
||||||
# Account for deps we might lose between S0 and stack
|
# Account for deps we might lose between S0 and stack
|
||||||
if not s.has_head(s.S(0)):
|
if not s.has_head(s.S(0)):
|
||||||
for i in range(1, s.stack_depth()):
|
for i in range(1, s.stack_depth()):
|
||||||
if gold.has_dep[s.S(i)]:
|
cost += gold.heads[s.S(i)] == s.S(0)
|
||||||
cost += gold.heads[s.S(i)] == s.S(0)
|
cost += gold.heads[s.S(0)] == s.S(i)
|
||||||
if gold.has_dep[s.S(0)]:
|
|
||||||
cost += gold.heads[s.S(0)] == s.S(i)
|
|
||||||
return cost + pop_cost(s, gold, s.S(0)) + arc_cost(s, gold, s.B(0), s.S(0))
|
return cost + pop_cost(s, gold, s.S(0)) + arc_cost(s, gold, s.B(0), s.S(0))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -291,20 +284,18 @@ cdef class Break:
|
||||||
S_i = s.S(i)
|
S_i = s.S(i)
|
||||||
for j in range(s.buffer_length()):
|
for j in range(s.buffer_length()):
|
||||||
B_i = s.B(j)
|
B_i = s.B(j)
|
||||||
if gold.has_dep[S_i]:
|
cost += gold.heads[S_i] == B_i
|
||||||
cost += gold.heads[S_i] == B_i
|
cost += gold.heads[B_i] == S_i
|
||||||
if gold.has_dep[B_i]:
|
|
||||||
cost += gold.heads[B_i] == S_i
|
|
||||||
if cost != 0:
|
if cost != 0:
|
||||||
return cost
|
return cost
|
||||||
# Check for sentence boundary --- if it's here, we can't have any deps
|
# Check for sentence boundary --- if it's here, we can't have any deps
|
||||||
# between stack and buffer, so rest of action is irrelevant.
|
# between stack and buffer, so rest of action is irrelevant.
|
||||||
if not gold.has_dep[s.S(0)] or not gold.has_dep[s.B(0)]:
|
s0_root = _get_root(s.S(0), gold)
|
||||||
|
b0_root = _get_root(s.B(0), gold)
|
||||||
|
if s0_root != b0_root or s0_root == -1 or b0_root == -1:
|
||||||
return cost
|
return cost
|
||||||
if gold.sent_start[s.B_(0).l_edge] == -1:
|
|
||||||
return cost+1
|
|
||||||
else:
|
else:
|
||||||
return cost
|
return cost + 1
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
cdef inline weight_t label_cost(StateClass s, const GoldParseC* gold, attr_t label) nogil:
|
cdef inline weight_t label_cost(StateClass s, const GoldParseC* gold, attr_t label) nogil:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user