Преобразование дерева зависимостей в последовательность переходов Arc-eager

В настоящее время я пытаюсь построить модель NMT с учетом синтаксиса.
В этом проекте мне нужна последовательность одного из трех действий перехода (SHIFT, REDUCE-L, REDUCE-R).

Похоже на то, что на картинке a

Этот фрагмент представляет зависимость на основе перехода для 2 предложений (1 для 1 фрагмента, разделенного пустыми строками)

Я использую Syntaxnet, чтобы сначала получить дерево синтаксического анализа зависимостей, но он напрямую не предоставляет последовательности действий перехода.
Результаты следующие:

b

Можно ли получить последовательность действий, похожую на это изображение? Можно ли преобразовать то, что получается из этого изображения, в исходный формат изображения.


person rokrokss    schedule 06.06.2018    source источник


Ответы (1)


Функция, преобразующая дерево зависимостей в последовательность переходов, называется оракулом. Это необходимый компонент статистического анализатора. Описанные вами переходы (shift, reduce-l, reduce-r)¹ относятся к системе переходов arc-standard (а не к системе arc-eager, а именно: сдвиг, левая дуга, правая дуга, уменьшение).

Псевдокод стандартного оракула:

stack = [] # stack[0] is the top of the stack
buffer = [w1, w2, ..., wn]

while len(buffer) > 0 or len(stack) != 1:
    if stack[0] is the head of stack[1]:
        apply left-arc
    if stack[1] is the head of stack[0]:
        if there is a token in the buffer whose head is stack[0] 
            # (i.e not all children of stack[1] have been attached to it)
            apply shift
        else:
            apply right-arc

Эти слайды представляют два анализа алгоритмы и их оракулы.

¹Уменьшить-влево, уменьшить-вправо часто называют правой дугой и левой дугой в контексте синтаксического анализа зависимостей.

person mcoav    schedule 06.06.2018