Как запустить функции Python Gensim из R с сеткой - PullRequest
0 голосов
/ 26 апреля 2018

Я бы хотел использовать пакет reticulate для запуска gensim из R. Я не уверен, что полностью понимаю синтаксис reticulate, потому что могу заставить его работать с настройками функции по умолчанию, но он не работает, когда я пытаюсь передать больше аргументов.

library(reticulate)
gensim <- import("gensim")

model<-gensim$models$Word2Vec$load("word2vec_gensim")

matrix(unlist(model$wv$most_similar("queen")),ncol=2,byrow=T)
      [,1]                           [,2]               
 [1,] "princess"                     "0.76466166973114" 
 [2,] "king"                         "0.728749990463257"
 [3,] "prince"                       "0.653270363807678"
 [4,] "lady"                         "0.611525416374207"
 [5,] "consort"                      "0.609499335289001"
 [6,] "duchess"                      "0.608054518699646"
 [7,] "monarch"                      "0.606827557086945"
 [8,] "lady-in-waiting"              "0.605596661567688"
 [9,] "empress"                      "0.602727890014648"
 [10,] "wiki/margrethe_ii_of_denmark" "0.59738427400589"

но ...

matrix(unlist(model$wv$most_similar("queen",topn = 25)),ncol=2,byrow=T)

Error in py_call_impl(callable, dots$args, dots$keywords) : 
TypeError: Partition index must be integer

Здесь "word2vec_gensim" - предварительно обученная модель, я не могу включить ее, потому что это большой файл, но выберите предпочитаемую предварительно обученную модель. Я думаю, что моя проблема в том, как я предоставляю дополнительные аргументы для функции python.

РЕДАКТИРОВАТЬ: я понял это

похоже, что связь R с python не обрабатывает числа, как ожидалось.

matrix(unlist(model$wv$most_similar("queen",topn = as.integer(25))),ncol=2,byrow=T)

работает

1 Ответ

0 голосов
/ 27 апреля 2018

Вы правы, что сетка не обрабатывает автоматическое приведение типов. Невозможно программно определить это, если точно не знать, нужно ли конкретному параметру Python быть целое число или число с плавающей точкой, а затем перемежать, что невозможно в Python, так как Python является языком без типов.

Вы можете обойти это, явно приведя ваши аргументы в целые числа, используя as.integer(25), или вы можете использовать 25L вместо 25.

...