jiangnanboy / jcorrector

jcorrector 中文文本纠错工具, Text Error Correction Tool,Spelling Check
Apache License 2.0
53 stars 14 forks source link

希望不检测英文及数字 #5

Open minboo opened 1 year ago

minboo commented 1 year ago

您好,在使用jcorrector的过程中我发现会把一些英文或者数字进行替换,导致一些异常,我想如果句子中包含英文或数字的情况,不将它们替换,而是保留原字符,我该怎么做?

jiangnanboy commented 1 year ago

有例子么

minboo commented 1 year ago

使用代码中的demo如下,测试的句子中,英文及数字会被错误的转换

public static void main(String[] args) throws OrtException {
        LoadModel.loadOnnxModel();
        String text = "今天新情很好。";
        text = "是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788";
        Pair<BertTokenizer, Map<String, OnnxTensor>> pair = null;
        try {
            pair = MacBert.parseInputText(text);
        } catch (Exception e) {
            e.printStackTrace();
        }
        var predString = MacBert.predCSC(pair);
        List<Pair<String, String>> resultList = MacBert.getErrors(predString, text);
        for(Pair<String, String> result : resultList) {
            System.out.println(text + " => " + result.getLeft() + " " + result.getRight());
            // System.out.println(result.getRight());
        }
    }

输出如下:

load onnx model...
/data/jcorrector/model/macbert4csc.onnx
init bertTokenizer...
load vocab ...
[[CLS], 是, 的, ,, 当, 线, 程, 不, 再, 使, 用, 时, ,, 该, 缓, 冲, 区, 将, 被, 清, 理, (, 我, 昨, 天, 实, 际, 上, 对, 此, 进, 行, 了, 测, 试, ,, 我, 可, 以, 每, 5m, ##s, 发, 送, 一, 个, 新, 线, 程, ,, 而, 不, 会, 产, 生, 净, 内, 存, 累, 积, ,, 并, 确, 认, 它, 的, [UNK], 内, 存, 已, 在, [UNK], 上, 清, 理, ), 。, 编, 号, 77, ##88, [SEP]]
15:02:52.504 [main] INFO org.nd4j.linalg.factory.Nd4jBackend - Loaded [CpuBackend] backend
15:02:52.845 [main] INFO org.nd4j.nativeblas.NativeOpsHolder - Number of threads used for linear algebra: 4
15:02:52.845 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - *********************************** CPU Feature Check Warning ***********************************
15:02:52.845 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - Warning: Initializing ND4J with Generic x86 binary on a CPU with AVX512 support
15:02:52.845 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - Using ND4J with AVX512 will improve performance. See deeplearning4j.org/cpu for more details
15:02:52.845 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - Or set environment variable ND4J_IGNORE_AVX=true to suppress this warning
15:02:52.845 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - *************************************************************************************************
15:02:52.860 [main] INFO org.nd4j.nativeblas.Nd4jBlas - Number of threads used for OpenMP BLAS: 4
15:02:52.867 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Backend used: [CPU]; OS: [Windows 11]
15:02:52.867 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Cores: [8]; Memory: [4.0GB];
15:02:52.867 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Blas vendor: [OPENBLAS]
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 s,#,41,42
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 发,#,42,43
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 送,s,43,44
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 一,发,44,45
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 个,送,45,46
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 新,一,46,47
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 线,个,47,48
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 程,新,48,49
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 ,,线,49,50
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 而,程,50,51
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 不,,,51,52
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 会,而,52,53
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 产,不,53,54
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 生,会,54,55
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 净,产,55,56
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 内,生,56,57
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 存,净,57,58
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 累,内,58,59
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 积,存,59,60
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 ,,累,60,61
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 并,积,61,62
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 确,,,62,63
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 认,并,63,64
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 它,确,64,65
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 的,认,65,66
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 R,它,66,67
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 N,的,67,68
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 G,[,68,69
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 内,u,69,70
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 存,n,70,71
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 已,k,71,72
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 在,],72,73
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 G,内,73,74
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 C,存,74,75
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 上,已,75,76
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 清,在,76,77
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 理,[,77,78
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 ),u,78,79
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 。,n,79,80
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 编,k,80,81
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 号,],81,82
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 7,上,82,83
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 7,清,83,84
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 8,理,84,85
是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788 => 是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5m##s发送一个新线程,而不会产生净内存累积,并确认它的[unk]内存已在[unk]上清理)。编号77##88 8,),85,86

Process finished with exit code 0

若将代码中测试句子改为text = "今天新情很好。build哈哈哈"; 则会出现越界异常,通过debug发现build这个英文被转换为了其它中文,导致结果长度不相同。 image

以下为报错:

load onnx model...
/data/jcorrector/model/macbert4csc.onnx
init bertTokenizer...
load vocab ...
[[CLS], 今, 天, 新, 情, 很, 好, 。, build, 哈, 哈, 哈, [SEP]]
15:14:24.239 [main] INFO org.nd4j.linalg.factory.Nd4jBackend - Loaded [CpuBackend] backend
15:14:24.598 [main] INFO org.nd4j.nativeblas.NativeOpsHolder - Number of threads used for linear algebra: 4
15:14:24.599 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - *********************************** CPU Feature Check Warning ***********************************
15:14:24.600 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - Warning: Initializing ND4J with Generic x86 binary on a CPU with AVX512 support
15:14:24.600 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - Using ND4J with AVX512 will improve performance. See deeplearning4j.org/cpu for more details
15:14:24.600 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - Or set environment variable ND4J_IGNORE_AVX=true to suppress this warning
15:14:24.600 [main] WARN org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory - *************************************************************************************************
15:14:24.615 [main] INFO org.nd4j.nativeblas.Nd4jBlas - Number of threads used for OpenMP BLAS: 4
15:14:24.622 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Backend used: [CPU]; OS: [Windows 11]
15:14:24.622 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Cores: [8]; Memory: [4.0GB];
15:14:24.622 [main] INFO org.nd4j.linalg.api.ops.executioner.DefaultOpExecutioner - Blas vendor: [OPENBLAS]
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 11, end 12, length 11
    at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3319)
    at java.base/java.lang.String.substring(String.java:1874)
    at sy.dl.MacBert.getErrors(MacBert.java:111)
    at examples.dl.MacBertDemo.main(MacBertDemo.java:30)
Disconnected from the target VM, address: '127.0.0.1:65143', transport: 'socket'

Process finished with exit code 1
jiangnanboy commented 1 year ago

这种可以进行后处理或者模型训练的时候进行处理

minboo commented 1 year ago

请问应该如何进行后处理呢,可以指点一二吗,感谢

jiangnanboy commented 1 year ago

(1). text = "是的,当线程不再使用时,该缓冲区将被清理(我昨天实际上对此进行了测试,我可以每5ms发送一个新线程,而不会产生净内存累积,并确认它的RNG内存已在GC上清理)。编号7788"; ====>这个已解决,看最新代码。 (2). 关于“text = "今天新情很好。build哈哈哈"”,模型在预测时会直接省去“build”这个单词,不太好弄。