多亏了这个出色的答案,我开始使用 NLTK 和 Conll2002 语料库为荷兰语训练我自己的 NE 组块器:NLTK named entity recognition in dutch。使用这些提示,我还能够轻松地训练一个改进的标记器(基于 IIS 分类),该标记器的标记准确率约为 95%,这足以满足我的目的。
然而,命名实体识别的 F-measure 仅为 40% 左右。我该如何改进呢?我尝试使用像 Maxent 这样的内置算法,但我只得到一个内存错误。然后我继续尝试让 Megam 工作,但它无法在我的 Windows 机器上编译,并且不再有可用的二进制文件。我在尝试合并其他软件或方法时也遇到了死胡同,例如 libSVM、YamCha、CRF++ 和 Weka。都有自己的手册和问题,这些问题似乎一直在堆积。所以我感觉有点不知所措。
我需要的是一种实用的荷兰语 NER 方法。进行了大量研究,我发现引用 F-measures 的论文在 70% 到 85% 之间。那很好啊!有没有人暗示我在哪里可以找到改进的实现或者我如何自己构建一个(使用 Windows)?我更喜欢使用 NLTK 的灵活性,但如果在不同的工具包中有标准解决方案,我也很乐意这样做。甚至商业工具也会受到欢迎。
这是我现在用于评估的代码:
import nltk
from nltk.corpus import conll2002
tokenizer = nltk.data.load('tokenizers/punkt/dutch.pickle')
tagger = nltk.data.load('taggers/conll2002_ned_IIS.pickle')
chunker = nltk.data.load('chunkers/conll2002_ned_NaiveBayes.pickle')
test_sents = conll2002.tagged_sents(fileids="ned.testb")[0:1000]
print "tagger accuracy on test-set: " + str(tagger.evaluate(test_sents))
test_sents = conll2002.chunked_sents(fileids="ned.testb")[0:1000]
print chunker.evaluate(test_sents)
# chunker trained with following commandline:
# python train_chunker.py conll2002 --fileids ned.train --classifier NaiveBayes --filename /nltk_data/chunkers/conll2002_ned_NaiveBayes.pickle