Преобразование дерева зависимостей в последовательность переходов Arc-eager - PullRequest
0 голосов
/ 06 июня 2018

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

Аналогично тому, что изображено на изображении a

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

I'mсначала используется Syntaxnet, чтобы получить дерево разбора зависимостей, но оно не предоставляет непосредственно последовательности действий перехода.
Его результаты таковы:

b

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

1 Ответ

0 голосов
/ 06 июня 2018

Функция, которая преобразует дерево зависимостей в последовательность переходов, называется оракулом.Это необходимый компонент статистического парсера.Описанные вами переходы (сдвиг, уменьшение-l, уменьшение-r) ¹ относятся к переходной системе стандартная дуга (не к системе 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

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

ed Редукция-влево, редукция-вправо часто называется правой дугой и левой дугой в контексте разбора зависимости.

...