mirror of
				https://github.com/explosion/spaCy.git
				synced 2025-11-04 09:57:26 +03:00 
			
		
		
		
	* Oracle now consistent over gold standard derivation
This commit is contained in:
		
							parent
							
								
									f590382134
								
							
						
					
					
						commit
						320b045daa
					
				| 
						 | 
					@ -58,9 +58,12 @@ cdef inline bint _can_break_shift(const State* s) nogil:
 | 
				
			||||||
        # P. 757
 | 
					        # P. 757
 | 
				
			||||||
        # In UPP, if Shift(F) or RightArc(F) fail to result in a single parsing
 | 
					        # In UPP, if Shift(F) or RightArc(F) fail to result in a single parsing
 | 
				
			||||||
        # tree, they cannot be performed as well.
 | 
					        # tree, they cannot be performed as well.
 | 
				
			||||||
 | 
					        seen_headless = False
 | 
				
			||||||
        for i in range(s.stack_len):
 | 
					        for i in range(s.stack_len):
 | 
				
			||||||
            if s.sent[s.stack[i]].head == 0:
 | 
					            if seen_headless:
 | 
				
			||||||
                return False
 | 
					                return False
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                seen_headless = True
 | 
				
			||||||
        return True
 | 
					        return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -76,7 +79,7 @@ cdef inline bint _can_break_right(const State* s) nogil:
 | 
				
			||||||
        # tree, they cannot be performed as well.
 | 
					        # tree, they cannot be performed as well.
 | 
				
			||||||
        seen_headless = False
 | 
					        seen_headless = False
 | 
				
			||||||
        for i in range(s.stack_len):
 | 
					        for i in range(s.stack_len):
 | 
				
			||||||
            if s.sent[s.stack[i]].head == 0:
 | 
					            if s.sent[s.stack[-i]].head == 0:
 | 
				
			||||||
                if seen_headless:
 | 
					                if seen_headless:
 | 
				
			||||||
                    return False
 | 
					                    return False
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
| 
						 | 
					@ -123,6 +126,7 @@ cdef int _left_cost(const State* s, const int* gold) except -1:
 | 
				
			||||||
    cost += children_in_buffer(s, s.stack[0], gold)
 | 
					    cost += children_in_buffer(s, s.stack[0], gold)
 | 
				
			||||||
    if NON_MONOTONIC and s.stack_len >= 2:
 | 
					    if NON_MONOTONIC and s.stack_len >= 2:
 | 
				
			||||||
        cost += gold[s.stack[0]] == s.stack[-1]
 | 
					        cost += gold[s.stack[0]] == s.stack[-1]
 | 
				
			||||||
 | 
					    cost += gold[s.stack[0]] == s.stack[0]
 | 
				
			||||||
    return cost
 | 
					    return cost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -140,18 +144,8 @@ cdef int _break_shift_cost(const State* s, const int* gold) except -1:
 | 
				
			||||||
    # 
 | 
					    # 
 | 
				
			||||||
    # n0_cost:
 | 
					    # n0_cost:
 | 
				
			||||||
    cdef int cost = 0
 | 
					    cdef int cost = 0
 | 
				
			||||||
    # number of head/child deps between n0 and N1...Nn
 | 
					    # Number of deps between S0...Sn and N0...Nn
 | 
				
			||||||
    cost += children_in_buffer(s, s.i, gold)
 | 
					    for i in range(s.i, s.sent_len):
 | 
				
			||||||
    cost += head_in_buffer(s, s.i, gold) 
 | 
					 | 
				
			||||||
    # Don't count self-deps
 | 
					 | 
				
			||||||
    if gold[s.i] == s.i:
 | 
					 | 
				
			||||||
        cost -= 2
 | 
					 | 
				
			||||||
    # number of child deps from N0 into stack
 | 
					 | 
				
			||||||
    cost += children_in_stack(s, s.i, gold)
 | 
					 | 
				
			||||||
    # number of head deps to N0 from stack
 | 
					 | 
				
			||||||
    cost += head_in_stack(s, s.i, gold)
 | 
					 | 
				
			||||||
    # Number of deps between S0...Sn and N1...Nn
 | 
					 | 
				
			||||||
    for i in range(s.i+1, s.sent_len):
 | 
					 | 
				
			||||||
        cost += children_in_stack(s, i, gold)
 | 
					        cost += children_in_stack(s, i, gold)
 | 
				
			||||||
        cost += head_in_stack(s, i, gold)
 | 
					        cost += head_in_stack(s, i, gold)
 | 
				
			||||||
    return cost
 | 
					    return cost
 | 
				
			||||||
| 
						 | 
					@ -255,8 +249,6 @@ cdef class TransitionSystem:
 | 
				
			||||||
            if not at_eol(s):
 | 
					            if not at_eol(s):
 | 
				
			||||||
                push_stack(s)
 | 
					                push_stack(s)
 | 
				
			||||||
        elif t.move == BREAK_SHIFT:
 | 
					        elif t.move == BREAK_SHIFT:
 | 
				
			||||||
            push_stack(s)
 | 
					 | 
				
			||||||
            get_s0(s).dep = 0
 | 
					 | 
				
			||||||
            while s.stack_len != 0:
 | 
					            while s.stack_len != 0:
 | 
				
			||||||
                s.stack -= 1
 | 
					                s.stack -= 1
 | 
				
			||||||
                s.stack_len -= 1
 | 
					                s.stack_len -= 1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user