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

Nlp 斯坦福解析器在线工具和斯坦福解析器代码的不同输出,nlp,stanford-nlp,Nlp,Stanford Nlp,我正在与斯坦福语法分析器合作,从复习句子中提取语法依赖结构。我的问题是,出于某种原因,我的代码生成的输出与我的斯坦福在线工具生成的输出不相似。下面是一个例子 复习句子:相机的画质不好 我的代码输出(它使用了EnglishPCFG模型和typedDependenciesCollapsed结构) 斯坦福在线工具输出: det(quality-3, The-1) nn(quality-3, picture-2) nsubj(good-9, quality-3) det(camera-6, the-5)

我正在与斯坦福语法分析器合作,从复习句子中提取语法依赖结构。我的问题是,出于某种原因,我的代码生成的输出与我的斯坦福在线工具生成的输出不相似。下面是一个例子

复习句子:相机的画质不好

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

斯坦福在线工具输出:

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标记器生成的
LSB
RSB
,但生成的语法结构仍然与在线工具不同。以下是一个例子:

回顾句子:相机的尺寸和图像质量都非常完美

我的代码输出

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
依赖项。我试图弄清楚为什么会发生这种事。任何帮助都将不胜感激

更新(下面的相关代码片段)

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)
rawWords2=[-LSB-,The,size,and,picture,quality,of,The,The,The,camera,is,perfect,-RSB-]

lp=使用EnglishPCFG模型的词汇化解析器

Tree parse=lp.apply(rawWords2.subList(1,rawWords2.size()-1));
TreebankLanguagePack tlp=新的PennTreebankLanguagePack();
语法结构工厂gsf=tlp.grammaticStructureFactory();
语法结构gs=gsf.newgrammaticstructure(parse);
tdl=(列表)gs.typedDependenciesCollapsed();
System.out.println(tdl.toString());
屏幕输出如本文前面所述

另一个观察


我与斯坦福图书馆合作,向我展示了
质量
图片
之间的依赖关系,斯坦福在线工具中显示的是
nn
,但图书馆显示的依赖关系是
dep
(即找不到更合适的依赖关系)。现在的问题是,为什么斯坦福在线工具显示了
质量
图片
之间的nn依赖关系,而斯坦福图书馆显示了
dep
作为依赖关系。

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

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

如果您的需求只是提取依赖项,而不是使用情绪分析。我建议您使用3.2.0版


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

是否获得额外的
nn
依赖关系的主要问题是是否存在跨协调的依赖关系传播(
大小
是一个
质量
nn
,它与
图片
相协调,因此我们也将其设置为
质量
nn
)。联机输出显示了包含传播的折叠输出,而您正在调用不包含传播的API方法。您可以使用本文底部所示的选项从命令行中查看。在API中,要获得协调传播,您应该调用

gs.typedDependenciesCCprocessed()
(而不是
gs.typedDependenciesCollapsed()

其他意见:

  • 方括号在哪里(
    -LSB-
    )来自?它们不应该由标记器引入。如果它们是,那就是一个bug。你能说一下你为生成它们做了什么吗?我怀疑它们可能来自你的预处理?句子中意外的事情会导致解析质量严重下降
  • 在线解析器并不总是最新发布的版本。我不确定它现在是否最新。但我不认为这是这里的主要问题
  • 我们正在改进依赖项表示法。这是经过深思熟虑的,但如果您的代码实质上依赖于旧版本中如何定义依赖项,则会产生问题。我们很想知道(可能通过电子邮件发送给
    解析器用户
    列表)如果您的准确性下降的原因不是因为您的代码被编写为期望依赖项名称,就像它们在早期版本中一样
使用命令行的差异示例:

[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).

你的代码输出看起来很奇怪。你是否缺少一个后处理步骤?
-RSB--11
看起来像是某种内部斯坦福标识符,对应于
good-9
@mbatchkarov你是对的,我发现了。新版本的SP在标记化步骤中添加了
LSB
RSB
。我真正需要的是什么我们要做的是忽略这些标识符,并为句子结构的其余部分生成依赖项。@mbatchkarov我编辑了我的帖子。请看一看。你能发布你的代码吗?@mbatchkarov我添加了代码。请看一看。我想可能是这样,但使用早期版本也会产生相同的输出。谢谢你的观点我怀疑调用
tokenizerFactory
tokenize()
方法会生成这些
LSB
RSB
[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).