На веб-сайте действительно есть пример решения этой проблемы, но без INDArrays (существует специальный c API для аналогичных случаев, принимающих слова, а не векторы).
Наличие векторов означает мы можем опробовать множество различных преобразований и вычислений - хорошие времена!.
В любом случае, это должно удовлетворить все ваши потребности:
File file = new File("/glove.6B.100d.txt");
Word2Vec word2Vec = WordVectorSerializer.readWord2VecModel(file);
INDArray king = word2Vec.getWordVectorMatrix("king");
INDArray queen = word2Vec.getWordVectorMatrix("queen");
INDArray woman = word2Vec.getWordVectorMatrix("woman");
INDArray kingMinusQueenPlusWoman = king.sub(queen).add(woman);
Collection<String> wordsNearest = word2Vec.wordsNearest(kingMinusQueenPlusWoman, 10);
for (String word : wordsNearest) {
System.out.println(word);
}
И необходимые зависимости Maven:
<dependency>
<groupId>org.deeplearning4j</groupId>
<artifactId>deeplearning4j-nlp</artifactId>
<version>1.0.0-beta6</version>
</dependency>
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-beta6</version>
</dependency>