DL4J: Как рассчитать семантическое сходство между двумя новыми предложениями с помощью вектора GoogleNews

Я просто просматриваю базовые руководства по DL4J. И я планирую сравнить сходство между двумя невидимыми предложениями. Я использовал простой пример для сравнения двух слов после того, как W2V был выполнен с использованием GoogleNews-vectors-negative300.bin.gz. Когда я попытался использовать GoogleNews-vectors-negative300.bin.gz для сравнения предложений, как показано ниже:

File gModel = new File("GoogleNews-vectors-negative300.bin.gz");
Word2Vec vecGoogle = WordVectorSerializer.readWord2VecModel(gModel);

ParagraphVectors vecGoogleForSentences = new ParagraphVectors.Builder()
.useExistingWordVectors(vecGoogle)
.build();

System.out.println(Transforms.cosineSim(vecGoogleForSentences.inferVector("I like bananas and mangoes"), vecGoogleForSentences.inferVector("I like mangoes")));

Я получаю ошибку:

org.nd4j.linalg.exception.ND4JIllegalStateException: модель, передаваемая как существующая, не имеет доступного syn1 / syn1Neg

Может кто-нибудь объяснить, о чем я здесь говорю, или как я могу семантически сравнить 2 невидимых предложения, используя вектор GoogleNews-vectors-negative300.bin.gz? То, что я пытаюсь, основано на предложении, приведенном в демонстрационный код DL4J:

Большое спасибо заранее!


person Om Sao    schedule 31.01.2018    source источник
comment
Fwiw, DL4J здесь активен: gitter.im/deeplearning4j/deeplearning4j   -  person racknuf    schedule 02.02.2018


Ответы (1)


Более простой способ сделать это - просто вычислить средний вектор всех слов в предложении (суммировать векторы, деленные на n) и вычислить косинусное сходство этих слов.

person Adam Gibson    schedule 01.02.2018
comment
Привет, Адам! Итак, вы имеете в виду, что нужно вычислить ‹word_vector› .getWordVectorMatrix (строка), чтобы получить векторную матрицу для каждого слова? После усреднения, как мы можем вычислить косинусное сходство между векторами? Разве для этого уже нет доступных API? - person Om Sao; 05.02.2018