5

我在 Ubuntu 笔记本电脑上使用本教程安装了 word2Vec 。为了在 Java 中实现 word2Vec 向量,是否完全有必要安装DL4J ?我很喜欢在 Eclipse 中工作,但我不确定我是否需要 DL4J 想要我安装的所有其他先决条件。

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


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

4

2 回答 2

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();
    }
    ....
}

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

于 2015-07-16T22:03:21.527 回答
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

希望那有所帮助

于 2015-07-18T22:35:37.497 回答