【问题标题】:Different Output for Stanford Parser Online Tool and Stanford Parser Code斯坦福解析器在线工具和斯坦福解析器代码的不同输出
【发布时间】:2014-02-24 05:23:39
【问题描述】:

我正在使用 stanford parser 从评论句子中提取语法依赖结构。我的问题是,由于某种原因,我的代码生成的输出与我的斯坦福在线工具生成的输出不同。下面是一个例子。

点评句相机的画质不好。

我的代码输出(它使用了 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)

我正在寻找造成这种差异的原因。在线解析器使用什么样的模型和依赖结构?如果我遗漏了一些明显的东西,我深表歉意。任何帮助将不胜感激。

如果需要,我可以添加代码 sn-p

更新

我更改了代码以忽略 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 依赖项。我试图弄清楚为什么会这样。任何帮助将不胜感激。

更新(相关代码如下sn-p)

rawWords2 = [-LSB-, 大小, 和, 图片, 质量, of, the, the, camera, is, perfect, -RSB-] p>

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());

屏幕输出如文章前面所述。

另一个观察结果。

我使用斯坦福图书馆向我展示了qualitypicture 之间的依赖关系,如斯坦福在线工具中所示为nn,但图书馆显示的依赖关系为dep(即可以' t 找到更合适的依赖项)。现在的问题是为什么斯坦福在线工具将qualitypicturewhere 之间的nn 依赖显示为斯坦福图书馆,将dep 显示为依赖。

【问题讨论】:

  • 您的代码输出看起来很奇怪。您是否缺少后处理步骤? -RSB--11 似乎是一些与 good-9 相对应的内部斯坦福标识符。
  • @mbatchkarov 你说得对,我想通了。 SP 的新版本在标记化步骤中添加了LSBRSB 作为一些标识符。我真正需要做的是忽略这些标识符并为句子结构的其余部分生成依赖关系。
  • @mbatchkarov 我编辑了我的帖子。请看一看。
  • 你能发布你的代码吗?
  • @mbatchkarov 我添加了代码。请看一下

标签: nlp stanford-nlp


【解决方案1】:

你是否获得额外的nn依赖的主要问题是是否存在跨协调的依赖传播(sizequalitynn,它与picture协调,因此我们也将其设为nnquality)。在线输出显示了带有传播的折叠输出,而您正在调用不包括传播的 API 方法。您可以使用本文底部显示的选项从命令行中查看。在 API 中,要获得协调传播,您应该调用

gs.typedDependenciesCCprocessed()

(而不是gs.typedDependenciesCollapsed())。

其他cmets:

  • 方括号 (-LSB-) 是从哪里来的?它们不应该由分词器引入。如果是这样,那就是一个错误。你能说一下你做了什么来生成它们吗?我怀疑它们可能来自您的预处理?句子中出现这样的意外情况往往会导致解析质量非常糟糕。
  • 在线解析器并不总是与最新发布的版本保持同步。我不确定它现在是否是最新的。但我认为这不是这里的主要问题。
  • 我们正在做一些改进依赖关系表示的工作。这是故意的,但如果您的代码实质上依赖于旧版本中依赖项的定义方式,则会产生问题。我们很想知道(可能通过电子邮件发送到parser-user 列表)您的准确性是否下降,而不是因为您的代码被编写为期望依赖项名称与早期版本中一样。

使用命令行的区别示例:

[manning]$ cat > camera.txt 
The size and picture quality of the camera is perfect.
[manning]$ java edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat typedDependencies -outputFormatOptions collapsedDependencies edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz camera.txt
Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [2.4 sec].
Parsing file: camera.txt
Parsing [sent. 1 len. 11]: The size and picture quality of the camera is perfect .
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)

Parsed file: camera.txt [1 sentences].
Parsed 11 words in 1 sentences (6.94 wds/sec; 0.63 sents/sec).
[manning]$ java edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat typedDependencies -outputFormatOptions CCPropagatedDependencies edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz camera.txt
Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... done [2.2 sec].
Parsing file: camera.txt
Parsing [sent. 1 len. 11]: The size and picture quality of the camera is perfect .
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)

Parsed file: camera.txt [1 sentences].
Parsed 11 words in 1 sentences (12.85 wds/sec; 1.17 sents/sec).

【讨论】:

  • 感谢您指出使用gs.typedDependenciesCCprocessed()。我怀疑调用tokenizerFactorytokenize() 方法会导致生成这些LSBRSB。目前我的工作不依赖于依赖项的确切名称。
【解决方案2】:

根据我的观察,斯坦福在线解析器似乎仍在其后端使用旧版本。

我已经使用斯坦福解析器一年了。我们已经使用 3.2.0 版本很长时间了。当版本 3.3.0 发布带有情感分析的附加功能时,我尝试使用较新的版本。但是,观察到它的依赖项与 3.2.0 版本略有不同,并且我们产品的效率有所下降。

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

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

【讨论】:

  • 我认为可能是这种情况,但使用早期版本也会产生相同的输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 2015-03-10
  • 1970-01-01
相关资源
最近更新 更多