[英]How to implement Word2Vec in Java?
我在 Ubuntu 筆記本電腦上使用本教程安裝了 word2Vec。 為了在 Java 中實現 word2Vec 向量,是否完全有必要安裝DL4J ? 我很習慣在 Eclipse 中工作,但我不確定我是否需要 DL4J 希望我安裝的所有其他先決條件。
理想情況下,有一種非常簡單的方法可以讓我只使用我已經編寫的 Java 代碼(在 Eclipse 中)並更改幾行——這樣我正在做的單詞查找將檢索 word2Vec 向量而不是我正在使用的當前檢索過程。
另外,我已經考慮過使用 GloVe,但是,我沒有 MatLab。 是否可以在沒有 MatLab 的情況下使用 GloVe? (因此,我在安裝時遇到錯誤)。 如果是這樣,與上述相同的問題是......我不知道如何在 Java 中實現它。
是什么阻止您以文本格式保存 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 個最近的預計算鄰的列表。
DL4j作者在這里。 我們的 word2vec 實現面向需要自定義管道的人。 我不怪你在這里走簡單的路線。
我們的 word2vec 實現是為了當你想用它們做一些事情而不是搞亂時。 c word2vec 格式非常簡單。
如果您願意,這里是 java 中的解析邏輯: https : //github.com/deeplearning4j/deeplearning4j/blob/374609b2672e97737b9eb3ba12ee62fab6cfee55/deeplearning4j-scaleout/deeplearning4j-nlp/orgingedembedmodels/java加載程序/WordVectorSerializer.java#L113
希望那有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.