斯坦福分析器在线工具和斯坦福分析器代码的不同输出

时间:2014-02-20 23:02:43

标签: nlp stanford-nlp

我正在使用stanford解析器从复习句中提取出格式依赖结构。我的问题是,由于某种原因,我的代码生成的输出与生成我的stanford在线工具的输出不相似。以下是一个例子。

评论句子相机的画质不佳。

我的代码输出(使用 EnglishPCFG 模型和 typedDependenciesCollapsed 结构)

root(ROOT-0, -LSB--1), 
det(quality-4, The-2), 
nn(quality-4, picture-3),
nsubj(-RSB--11, quality-4), 
det(camera-7, the-6), 
prep_of(quality-4, camera-7), 
cop(-RSB--11, is-8), 
neg(-RSB--11, not-9), 
amod(-RSB--11, good-10), 
ccomp(-LSB--1, -RSB--11)

斯坦福在线工具输出:

det(quality-3, The-1)
nn(quality-3, picture-2)
nsubj(good-9, quality-3)
det(camera-6, the-5)
prep_of(quality-3, camera-6)
cop(good-9, is-7)
neg(good-9, not-8)
root(ROOT-0, good-9)

我正在寻找造成这种差异的原因。在线解析器使用什么样的模型和依赖结构?如果我遗漏了一些明显的东西,我道歉。任何帮助都将受到高度赞赏。

我可以根据需要添加代码段

更新

我更改了代码以忽略SP标记生成器生成的LSBRSB,但生成的语法结构仍然与在线工具不同。这是一个例子:

评论句子 相机的尺寸和图像质量非常完美。

我的代码输出

det(quality-5, The-1), 
nn(quality-5, size-2), 
conj_and(size-2, picture-4),
nsubj(perfect-10, quality-5), 
det(camera-8, the-7), 
prep_of(quality-5, camera-8), 
cop(perfect-10, is-9), 
root(ROOT-0, perfect-10)

斯坦福在线工具输出:

det(quality-5, The-1)
nn(quality-5, size-2)
conj_and(size-2, picture-4)
**nn(quality-5, picture-4)**
nsubj(perfect-10, quality-5)
det(camera-8, the-7)
prep_of(quality-5, camera-8)
cop(perfect-10, is-9)
root(ROOT-0, perfect-10)

请注意我的代码输出中缺少nn依赖项。我试图了解为什么会发生这种情况。任何帮助将不胜感激。

更新(下方的相关代码段)

rawWords2 = [ - LSB-,The,size,and,picture,quality,of the,camera,is,perfect,-RSB - ]

lp = 使用EnglishPCFG模型的LexicalizedParser

Tree parse = lp.apply(rawWords2.subList(1,rawWords2.size() - 1));

TreebankLanguagePack tlp = new PennTreebankLanguagePack();

GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();

GrammaticalStructure gs = gsf.newGrammaticalStructure(parse);

tdl = (List<TypedDependency>) gs.typedDependenciesCollapsed();

System.out.println(tdl.toString());

输出到屏幕就像帖子前面提到的那样。

另一个观察结果。

我在Stanford图书馆工作,向我展示qualitypicture之间的依赖关系,如斯坦福在线工具nn所示,但图书馆显示的依赖关系是{ {1}}(即找不到更合适的依赖)。现在的问题是为什么斯坦福在线工具显示depquality之间的依赖关系,而斯坦福图书馆显示picture为依赖关系。

2 个答案:

答案 0 :(得分:2)

您是否获得额外nn依赖关系的主要问题是协调中是否存在依赖关系的传播(sizenn的{​​{1}}并且它与quality协调,因此我们也picture nn。在线输出显示带有传播的折叠输出,而您正在调用不包含传播的API方法。您可以从命令行中使用选项查看,如本文底部所示。在API中,为了获得协调传播,您应该调用

quality

(而不是gs.typedDependenciesCCprocessed() )。

其他评论:

  • 方括号(gs.typedDependenciesCollapsed())来自哪里?它们不应由tokenizer引入。如果是,那就是一个bug。你能说出你为他们做的是什么吗?我怀疑他们可能来自你的预处理?句子中出现意外的事情往往会导致解析质量下降得非常糟糕。
  • 在线解析器并不总是与最新发布的版本保持同步。我不确定它现在是否是最新的。但我认为这不是主要问题。
  • 我们正在做一些改进依赖关系表示的工作。这是故意的,但是如果您的代码实际上取决于在旧版本中如何定义依赖项,则会产生问题。我们有兴趣知道(可能通过电子邮件发送到-LSB-列表),如果您的准确性因为您的代码编写之外的其他原因而导致其依赖名称与早期版本相同,那么您的准确性就会降低。

使用命令行的差异示例:

parser-user

答案 1 :(得分:0)

根据我的观察看来,stanford在线解析器仍然在其后端使用旧版本。

我一直在使用stanford解析器一年。我们已经使用版本3.2.0很长一段时间了。当版本3.3.0发布时具有感性分析的附加功能时,我尝试使用较新版本。但是,它的依赖性在3.2.0版本中略有不同,而且产品的效率也有所降低。

如果您的要求只是提取依赖关系而不是使用情绪分析。我建议你使用3.2.0版本。

检查this page的结尾以下载早期版本的解析器。