CoreNLP TrueCaseAnnotator returns 在某些情况下大写文本

CoreNLP TrueCaseAnnotator returns uppercased text in some cases

我经常得到大写的结果。在某些情况下,模型效果很好,但在某些情况下效果更差。有机会解决这个问题吗?

一些不良案例的例子:

我尝试调整偏差参数,但问题仍然存在

最好的办法是训练自己的模型。我们可能会考虑训练一个新模型并在某个时候分发它。

您可以通过从主要模型 jar 中提取此文件来查看我们用于训练模型的道具文件:

edu/stanford/nlp/models/truecase/truecasing.fast.caseless.prop

训练数据只是 space 个分隔的标记,每行一个句子,大小写正确。我们无法分发用于我们分发的模型的训练数据。无论文本是您的典型领域,您都可以将其中的数百万个句子输入训练过程,并训练一个可能在您的数据集上表现更好的新模型。

我们使用的训练数据有 1,301,730 个句子。

这里有一个 GitHub 讨论帖:https://github.com/stanfordnlp/CoreNLP/issues/336

训练命令应该是:

java -Xmx100g edu.stanford.nlp.ie.crf.CRFClassifier -prop custom.prop

作为参考,提取的属性文件如下所示:

serializeTo=truecasing.fast.caseless.qn.ser.gz
trainFileList=/scr/nlp/data/gale/NIST09/truecaser/crf/noUN.input
testFile=/scr/nlp/data/gale/AE-MT-eval-data/mt06/cased/ref0

map=word=0,answer=1

wordFunction = edu.stanford.nlp.process.LowercaseFunction

useClassFeature=true
useWord=true
useNGrams=true
noMidNGrams=true
maxNGramLeng=6
usePrev=true
useNext=true
useLongSequences=true
useSequences=true
usePrevSequences=true
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
useOccurrencePatterns=true
useLastRealWord=true
useNextRealWord=true
useDisjunctive=true
disjunctionWidth=5
wordShape=chris2useLC
usePosition=true
useBeginSent=true
useTitle=true

useObservedSequencesOnly=true
saveFeatureIndexToDisk=true
normalize=true

useQN=false
QNSize=25

maxLeft=1
l1reg=1.0

readerAndWriter=edu.stanford.nlp.sequences.TrueCasingForNISTDocumentReaderAndWriter
featureFactory=edu.stanford.nlp.ie.NERFeatureFactory

featureDiffThresh=0.02