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

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

Подобно тому, что на изображении

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

я использую Syntaxnet сначала получить дерево разбора зависимостей, но оно не предоставляет непосредственно эти последовательности действий перехода.
Это результаты следующие,

б

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

1 ответ

Решение

Функция, которая преобразует дерево зависимостей в последовательность переходов, называется оракулом. Это необходимый компонент статистического парсера. Переходы, которые вы описали (сдвиг, уменьшение-l, уменьшение-r)¹ - это переходы стандартной системы переходов дуги (не дугообразной системы, а именно: сдвиг, левая дуга, правая дуга, уменьшение).

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

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

На этих слайдах представлены два алгоритма синтаксического анализа и их оракулы.

EdReduce-left, Reduce-Right часто называют правой дугой и левой дугой в контексте анализа зависимости.

Другие вопросы по тегам