NLTK 的 Penn tree Bank 标签集

Penn tree Bank tagset for NLTK

我正在使用 NLTK 作为我项目的一部分,并实现了用于标记目的的 Viterbi 算法(尽管我知道标记器非常可用)。 我在我的代码中使用了以下片段

tagdict = load('help/tagsets/brown_tagset.pickle')
taglist = tagdict.keys()
tag_sequence_corpus = brown.tagged_sents(tagset='brown')

前两行用于从棕色标签集中提取密钥,其中密钥是棕色标签集中可用的标签列表。 第三行参数tag-set='brown'用于根据Brown语料库提供的tag-set对brown语料库进行标注

有什么方法可以将标记集参数设置为 Penn bank 标记集?这样做的动机是宾夕法尼亚银行树有一些 36-45 个标签,这使得实现 Viterbi 算法(算法的复杂度为 O(n*|S|^3) )变得可行,其中 n 是句子长度ans |S|指的是标签集的大小,而棕色语料库中有大约 226 个标签(这增加了计算时间)。通用标签集容易出现词义歧义。

如果 PTB 标记器不可用,是否有人可以建议替代它(Brown/universal 除外)?

谢谢。

你问题的最后一句话表明你知道 universal 标签集:它只有大约 10 个 POS 标签,因为它们需要足够广泛才能映射其他标签集 他们。 Penn Treebank 标签集与 Brown 具有多对多关系,因此不可能有(可靠的)自动映射。

您可以做的是使用已经用 Penn Treebank 标记集标记的语料库之一。 NLTK 的 treebank 语料库样本仅为 Brown 的 1/10(100,000 个单词),但它可能足以满足您的目的。

或者,你可以自己简化布朗语料库:如果你只保留复合标签的第一部分,如VBN-TL-HLPPS+HVD,那么472个复杂标签减少到71个。如果仍然如此太多,检查定义并进一步手动折叠它,例如通过合并 NNNNS(单数和复数)。