将依赖树转换为 Arc-eager 转换序列

Converting Dependency tree into sequence of Arc-eager transitions

目前我正在尝试构建语法感知 NMT 模型。
在这个项目中,我需要三个转换动作(SHIFT、REDUCE-L、REDUCE-R)之一的序列

与图片中的相似 a

这个块表示 2 个句子的基于转换的依赖性(1 个为 1 个块,由空行分割)

我使用 Syntaxnet 首先获取依赖分析树,但它不直接提供转换动作序列。
结果如下,

b

是否可以得到与此图像相似的动作序列?是否可以将从该图像获得的内容转换为原始图像的格式。

将依赖树转换为转换序列的函数称为 oracle。它是统计解析器的必要组件。 您描述的转换(shift、reduce-l、reduce-r)¹ 是 arc-standard 转换系统(不是 arc-eager 系统,即:shift, left-arc, right-arc, reduce).

弧标准预言机的伪代码:

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

这些 slides 介绍了两种解析算法及其预言。

¹Reduce-left、reduce-right 在依赖解析的上下文中经常被命名为 right-arc 和 left-arc。