我试图弄清楚如何训练 stanford
LexicalizedParser ( edu.stanford.nlp.parser.lexparser.LexicalizedParser ) 将新名词合并到其词典中。
起初,我的目标是采用现有模型并对其进行微调,而不是从大量训练示例中创建一个全新的模型。
这个问题的答案表明这是不可能的 > 如何向斯坦福 POS-Tagger 的训练模型添加更多标记词?
希望那里有人可以让我走上正确的轨道,了解如何做到这一点。
作为我想做的一个具体例子,假设我有“researchgate”这个词,我想在解析句子时将其视为名词。目前,“researchgate”被视为不同的词性,具体取决于它的位置。但我希望它被识别为“NN”(名词)。
例子...
而不是这个:
(NP
(NP (JJ recent) (NN activity))
(PP (IN in)
(NP (PRP$ your) (JJ researchgate) (NNS topics)))))
我要这个:
(NP
(NP (JJ recent) (NN activity))
(PP (IN in)
(NP (PRP$ your) (NN researchgate) (NNS topics)))))
而不是这个:
(ROOT
(FRAG
(NP (NN subscription))
(S
(VP (TO to)
(VP (VB researchgate))))))
我要这个:
(ROOT
(NP
(NP (NN subscription))
(PP (TO to)
(NP (NN researchgate)))))
我目前正在使用这个模型:models/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz
我试过这样做>
java -cp stanford-parser.jar
edu.stanford.nlp.parser.lexparser.LexicalizedParser -train /tmp/train.txt
/tmp/train.txt 的内容如下 >
(NP
(NP (JJ recent) (NN activity))
(PP (IN in)
(NP (PRP$ your) (JJ researchgate) (NNS topics)))))
我得到了一堆有希望的输出,但后来得到了这个错误>
Error. Can't parse test sentence: [This, is, just, a, test, .]
所以很明显,我需要提供更多的例子,而不仅仅是我在 /tmp/train.txt 中的例子。
查看文档似乎有一种关于 LexicalizedParser 的有前途的方法,我正在考虑尝试... >
public static LexicalizedParser getParserFromTreebank(Treebank trainTreebank,
Treebank secondaryTrainTreebank,
double weight,
GrammarCompactor compactor,
Options op,
Treebank tuneTreebank,
List<List<TaggedWord>> extraTaggedWords)
我犹豫要不要尝试一下,因为要正确选择选项似乎很棘手。doco 说:
解析器的选项在训练和测试(解析)时必须相同,以便解析器正常工作
所以我可能需要有关如何提取用于 edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz 的选项的指导,也许它是
edu.stanford.nlp.parser.lexparser.EnglishTreebankParserParams ?
另外,也许我想将 researchgate 添加为我的 extraTaggedWords 之一?
我觉得我走在正确的轨道上,但希望在进入老鼠洞之前得到一些建议。
提前致谢 !
chris