3

Я установил word2Vec using this tutorial на ноутбуке Ubuntu. Нужно ли устанавливать DL4J для реализации векторов word2Vec в Java? Мне комфортно работать в Eclipse, и я не уверен, что мне нужны все остальные предпосылки, которые DL4J хочет установить.Как реализовать Word2Vec в Java?

В идеале для меня просто было бы просто использовать код Java, который я уже написал (в Eclipse), и изменить несколько строк - чтобы слова, которые я делаю, будут извлекать слово2Vec вместо текущего процесса поиска, который я использую.


Кроме того, я изучил использование GloVe, однако у меня нет MatLab. Можно ли использовать GloVe без MatLab? (Из-за этого у меня возникла ошибка при установке). Если да, то тот же вопрос, что и выше, идет ... Я понятия не имею, как реализовать его в Java.

+0

На самом деле я строил небольшую библиотеку Перчатка в Java, возможно, стоит положить его на GitHub. –

+0

@ThomasJungblut там, кажется, небольшая горстка библиотек word2vec/Glove на Git, но я не знаю много о них вообще ... Пожалуйста, дайте мне знать больше, если вы решите загрузить его! –

+0

Зависит от того, что вам нужно, это просто слово для векторного поиска или вам нужно пройти? –

ответ

6

Что мешает вам сохранить текст 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(); 
    } 
    .... 
} 

Если вы хотите, чтобы получить ближайших соседей для данного слова, вы можете сохранить список N ближайших предварительно вычисленных соседей, связанных с каждым объектом WordVec.

5

Dl4j автор здесь. Наша реализация word2vec предназначена для людей, которым необходимо иметь настраиваемые конвейеры. Я не обвиняю вас в том, что вы выбрали простой маршрут.

Наша реализация word2vec предназначена для тех случаев, когда вы хотите что-то сделать с ними, а не для возиться. Формат c word2vec довольно прост.

Здесь логика разбора в Java, если вы хотите: https://github.com/deeplearning4j/deeplearning4j/blob/374609b2672e97737b9eb3ba12ee62fab6cfee55/deeplearning4j-scaleout/deeplearning4j-nlp/src/main/java/org/deeplearning4j/models/embeddings/loader/WordVectorSerializer.java#L113

Надежда, что помогает немного

+0

Спасибо! Настолько круто, чтобы получить ответ от большого автора! –

+0

Я пробовал DL4J, его слишком тяжело. У вас есть более легкая версия, которая работает только с w2vec? –

+0

Не могли бы вы определить «слишком тяжелый»? Извините, но это общая цель. Все от токенизаторов до того, как вы вводите данные, подключается. Это специально. Люди используют dl4j для решения реальных проблем. Они имеют особые требования. Это всего лишь несколько зависимостей. deeplearning4j-nlp и nd4j-native-platform. Остальное на вас. Я могу быть полезен, если вы более конкретны, но «слишком тяжелый» не является полезной критикой в ​​любой форме. –

Смежные вопросы