mayabot / mynlp

一个生产级、高性能、模块化、可扩展的中文NLP工具包。(中文分词、平均感知机、fastText、拼音、新词发现、分词纠错、BM25、人名识别、命名实体、自定义词典)
https://mynlp.mayabot.com/
Apache License 2.0
675 stars 90 forks source link

压缩cpp模型后,java加载模型预测出错 #42

Open cgpeter96 opened 2 years ago

cgpeter96 commented 2 years ago

cpp命令行结果 image java 预测结果 image

java的预测代码

FastText model = FastText.loadCppModel(new File("E:\\Downloads\\model.ftz"));
//        Lexer lexer =Mynlp.instance().bigramLexer();
        long start = System.currentTimeMillis();
        String [] querys = new String[]{"北京大学在哪里","白羊座","金牛座"};
        for(int i=0;i <querys.length;i++){
            List<String> strings = Arrays.asList(querys[i].split(""));
            List<ScoreLabelPair> predict = model.predict(strings,1,0);
            System.out.println(predict.toString());
        }

        long end = System.currentTimeMillis();
        System.out.println("cost time:"+(end-start));

压缩用到的命令

fasttext quantize -input train.txt -output model -qnorm -retrain -epoch 5 -cutoff 100000

想请教下大佬的问题的所在。

jimichan commented 2 years ago

暂时看不出问题

  1. 你确定训练也是单字分词?
  2. 在不压缩的情况下,是否正常?
cgpeter96 commented 2 years ago

暂时看不出问题

  1. 你确定训练也是单字分词?
  2. 在不压缩的情况下,是否正常?

确定是单字训练, 不压缩是正常的。

jimichan commented 2 years ago

该是新版本又变化了

cgpeter96 commented 2 years ago

该是新版本又变化了

意思是建议我用老版本的fasttext编译一版?

cgpeter96 commented 2 years ago

补充下额外的问题,经过一些测试发现,cpp训练的模型,loss除了softmax,像ns,hs都存在类似溢出现象,具体体现就是所有预测结果均集中于第0个标签,且prob为1.00001。

jimichan commented 2 years ago

感谢 要是能帮我fix这个问题,就太棒了