stanford-nlp - 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
解决方案
推荐阅读
- perl - 第一种模式的正则表达式匹配Perl
- python - 如何每分钟自动导入csv文件(从本地电脑)(与我的电脑时钟同步)
- flutter - 无法在颤动中截取屏幕截图
- python - 检查一个数字是否在同一个数字之前,但没有从代码中得到任何输出
- c# - .NET Core EF,清理 SqlConnection.CreateCommand
- flutter - 使用类参数传递 BlocProvider
- django - 两种形式一个视图 - 值不是来自表单 - Django
- java - 迭代批次值并根据包含的值路由它们
- angular - Angular 8 http.get 仅绑定某个属性
- javascript - Javascript 返回带有 then 回调的承诺