美文网首页
JFastText 挖坑指南

JFastText 挖坑指南

作者: Silence_Dong | 来源:发表于2018-08-13 12:17 被阅读0次

    1. 前言

    之前在做文本分类任务,使用了Facebook开源的Fasttext工具,用其在Unix下编译后得到的fasttext命令训练生成*.bin文件。由于线上需要封装成jar包调用,故在github上找到了vinhkhuc/JFastText的项目,用Maven引入进行开发,挖坑开始。

    1.1 模型文件格式错误

    按照项目首页的README说明,引入依赖:

    <dependency>
      <groupId>com.github.vinhkhuc</groupId>groupId>
      <artifactId>jfasttext</artifactId>artifactId>
      <version>0.3</version>version>
    </dependency>dependency>
    

    开发Demo时,提示Model file has wrong file format!。去查issues页面,第一个热门提问就是这个bug。开发者让尝试另一个fork的仓库地址:https://github.com/lidalei/JFastText

    新地址表明不能用Maven引入,需git clone到本地,进行mvn clean package进行本地构建。构建完毕后在项目中添加依赖使用。

    但是!!虽然本地可以正常加载用fasttext终端命令训练的模型,但是在deploy时会存在很大问题。即deploy后,别人用Maven引用时,依然会提示模型文件错误!。开发时,没有注意到这点,导致给小伙伴们挖了大坑。

    2. 填坑开始

    2.1 Maven依赖打包

    若本地引入只能本地使用,可否将lidalei/JFastText的代码clone下来,更改其pom文件,deploy到Nexus仓库来解决?

    Step 1. Clone仓库

    从github上将对方开发者的代码克隆下来:
    git clone git@github.com:lidalei/JFastText.git

    Step 2. 修改pom文件

    查看了自带的pom文件,保持<build>内容不变,修改groupId、version等字段,替换<distributionManagement>下内容,使其能够deploy到我们的Nexus私服

    Step3. 运行deploy

    点击Maven中的deploy选项开始上传。终端有一些信息值得注意:

    [INFO] --- javacpp:1.4:build (run-javacpp-parser) @ jfasttext ---
    [INFO] Detected platform "macosx-x86_64"
    [INFO] Building for platform "macosx-x86_64"
    [INFO] Targeting /Users/XXXX/Documents/tools/JFastText/src/main/java/com/github/jfasttext/FastTextWrapper.java
    [INFO] Parsing /Users/XXXX/Documents/tools/JFastText/src/main/cpp/fasttext_wrapper.h
    [INFO] Parsing /Users/XXXX/Documents/tools/JFastText/src/main/cpp/fasttext_wrapper_javacpp.h
    [INFO] 
    [INFO] --- javacpp:1.4:build (run-javacpp-compiler) @ jfasttext ---
    [INFO] Detected platform "macosx-x86_64"
    [INFO] Building for platform "macosx-x86_64"
    

    在编译时javacpp自动检测了我的系统,然后根据我的系统适配地编译了jar包,上传到Nexus:

    <dependency>
      <groupId>com.xiaomi.search.ltp</groupId>groupId>
      <artifactId>jfasttext</artifactId>artifactId>
      <version>0.3.0-SNAPSHOT</version>version>
    </dependency>dependency>
    
    Step4. loadModel

    用Maven引入上述deploy的jar包,写Demo样例:

    import com.github.jfasttext.JFastText;
      public class demo {
          public static void main(String[] args) throws Exception{
              JFastText jFastText = new JFastText();
              jFastText.loadModel("/Users/XXXX/Desktop/model_t_92.bin");
          }
    }
    

    成功加载模型

    3. 最后的坑

    完成jar包上传之后,想到之前build时终端输出关于的系统信息,可能在windows下使用出问题,因此在windows下按照同样的Demo项目测试了下,果然不行

    当前deploy的jar包目测仅支持mac,不排除仅支持我的mac的坑

    4. 总结

    • 用FastText的模型做Java封装时,还是建议使用Java进行训练,加载模型,从源头避免挖坑
    • JFastText项目中之所以不支持加载Fasttext命令训练的模型,可能和动态链接库有关。毕竟安装fasttext生成一堆链接库,在上面尝试打包时,javacpp貌似也在检测动态链接库

    相关文章

      网友评论

          本文标题:JFastText 挖坑指南

          本文链接:https://www.haomeiwen.com/subject/qzgybftx.html