首页 > 解决方案 > CoreNLP TrueCaseAnnotator 的 truecase.bias 没有任何效果

问题描述

https://stanfordnlp.github.io/CoreNLP/truecase.html上,truecase.bias描述为:

选择某些行为的偏见。您可以使用它来调整 truecaser 的倾向。truecaser 类是:UPPER、LOWER、INIT_UPPER 和 O(用于混合大小写的单词,如 McVey)。

它具有 的默认值INIT_UPPER:-0.7,UPPER:-0.7,O:0,我想更改这些值,但看起来唯一的方法(使用stanza)是self.client.start_cmd直接在构造函数中进行修改。这就是我正在做的事情:

from stanza.server import CoreNLPClient

class TrueCaseAnnotator(object):
    def __init__(self, classpath=CLASSPATH, bias="INIT_UPPER:-1,UPPER:-1,O:0"):
        self.client = CoreNLPClient(
            annotators=["tokenize,ssplit,truecase"],
            classpath=classpath,
            output_format='json',
        )
        self.client.start_cmd.append("-bias")
        self.client.start_cmd.append(bias)

这会正确记录带有调整后偏差的命令:

2021-02-04 21:12:51 信息:使用命令启动服务器:java -Xmx5G -cp /app/artifacts/stanford-corenlp-4.2.0/* edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 60000 -threads 5 -maxCharLength 100000 -quiet False -serverProperties corenlp_server-462b8ca2f7024c78.props -annotators tokenize,ssplit,truecase -preload -outputFormat json -bias INIT_UPPER:-1,UPPER:-1,O:0

假设这些变量的范围是 -1 到 1 并且INIT_UPPER值 -1 意味着从不将句子的初始单词大写,我希望第一个单词总是小写。然而,这不是正在发生的事情。

首先,你能确认 -1 到 1 是正确的范围吗?(我还尝试了其他数字,例如 -100、0.2 和 1,但没有任何变化)。

我确实注意到classBias(强调class)始终设置为默认值(INIT_UPPER:-0.7,UPPER:-0.7,O:0),无论我为bias参数传递什么(请参阅下面的日志)。是否有可能classBias覆盖 的值bias?这是在哪里设置的,两者之间有什么区别?

2021-02-04 21:29:55 INFO: Starting server with command: java -Xmx5G -cp /app/artifacts/stanford-corenlp-4.2.0/* edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 60000 -threads 5 -maxCharLength 100000 -quiet False -serverProperties corenlp_server-ceededd66e0947d7.props -annotators tokenize,ssplit,truecase -preload -outputFormat json -bias INIT_UPPER:-1,UPPER:-1,O:0
[main] INFO CoreNLP - --- StanfordCoreNLPServer#main() called ---
[main] INFO CoreNLP - Server default properties:
            (Note: unspecified annotator properties are English defaults)
            annotators = tokenize,ssplit,truecase
            bias = INIT_UPPER:1,UPPER:-100,O:0
            inputFormat = text
            outputFormat = json
            prettyPrint = false
            threads = 5
[main] INFO CoreNLP - Threads: 5
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator truecase
[main] INFO edu.stanford.nlp.sequences.SeqClassifierFlags - classBias=INIT_UPPER:-0.7,UPPER:-0.7,O:0
[main] INFO edu.stanford.nlp.sequences.SeqClassifierFlags - loadClassifier=edu/stanford/nlp/models/truecase/truecasing.fast.caseless.qn.ser.gz
[main] INFO edu.stanford.nlp.sequences.SeqClassifierFlags - mixedCaseMapFile=edu/stanford/nlp/models/truecase/MixDisambiguation.list
[main] INFO edu.stanford.nlp.ie.AbstractSequenceClassifier - Loading classifier from edu/stanford/nlp/models/truecase/truecasing.fast.caseless.qn.ser.gz ... done [5.9 sec].
[main] INFO CoreNLP - Starting server...
[main] INFO CoreNLP - StanfordCoreNLPServer listening at /0.0.0.0:9000

标签: stanford-nlp

解决方案


推荐阅读