如何在Java中实现Word2Vec?

Nat*_*ok3 5 java nlp artificial-intelligence machine-learning word2vec

我在Ubuntu笔记本电脑上使用本教程安装了word2Vec .是否完全有必要安装DL4J以便在Java中实现word2Vec向量?我很乐意在Eclipse工作,我不确定我是否想要DL4J希望我安装的所有其他先决条件.

理想情况下,我将有一个非常简单的方法来使用我已经编写的Java代码(在Eclipse中)并更改几行 - 这样我正在进行的单词查找将检索word2Vec向量而不是我正在使用的当前检索过程.


另外,我已经研究过使用GloVe,但是,我没有MatLab.没有MatLab可以使用GloVe吗?(因为这个原因,我在安装时出错了).如果是这样,与上面相同的问题就是......我不知道如何在Java中实现它.

Deb*_*sis 8

是什么阻止您以文本格式保存word2vec(C程序)输出,然后使用Java代码读取文件并将字符串加载的字符串中加载矢量?

一些代码片段:

// Class to store a hashmap of wordvecs
public class WordVecs {

    HashMap<String, WordVec> wordvecmap;
    ....
    void loadFromTextFile() {
        String wordvecFile = prop.getProperty("wordvecs.vecfile");
        wordvecmap = new HashMap();
        try (FileReader fr = new FileReader(wordvecFile);
            BufferedReader br = new BufferedReader(fr)) {
            String line;

            while ((line = br.readLine()) != null) {
                WordVec wv = new WordVec(line);
                wordvecmap.put(wv.word, wv);
            }
        }
        catch (Exception ex) { ex.printStackTrace(); }        
    }
    ....
}

// class for each wordvec
public class WordVec implements Comparable<WordVec> {
    public WordVec(String line) {
        String[] tokens = line.split("\\s+");
        word = tokens[0];
        vec = new float[tokens.length-1];
        for (int i = 1; i < tokens.length; i++)
            vec[i-1] = Float.parseFloat(tokens[i]);
        norm = getNorm();
    }
    ....
}
Run Code Online (Sandbox Code Playgroud)

如果要获取给定单词的最近邻居,可以保留与每个WordVec对象关联的N个最近预先计算的邻居的列表.


Ada*_*son 8

Dl4j作者在这里.我们的word2vec实现针对需要自定义管道的人.我不怪你在这里走简单路线.

我们的word2vec实现意味着当你想要对它们做些什么而不是为了搞乱时.c word2vec格式非常简单.

如果你愿意,这里是解析java中的逻辑:https: //github.com/deeplearning4j/deeplearning4j/blob/374609b2672e97737b9eb3ba12ee62fab6cfee55/deeplearning4j-scaleout/deeplearning4j-nlp/src/main/java/org/deeplearning4j/models/embeddings/装载机/ WordVectorSerializer.java#L113

希望那有所帮助

  • 你能定义"太重了"吗?抱歉,这是一个通用框架.从标记器到输入数据的方式都是可插拔的.这是故意的.人们使用dl4j来解决实际问题.他们有特殊要求.它只包括几个依赖项.deeplearning4j-nlp和nd4j-native-platform.剩下的就是你要做的事.如果你更具体,我可以提供帮助,但"太沉重"并不是任何形式的批评. (4认同)
  • 我试过DL4J,它太重了。你们有只处理 w2vec 的更轻版本吗? (2认同)