Как рассчитать сходство для предварительно обученных вложений слов - PullRequest
0 голосов
/ 28 октября 2018

Я хочу узнать наиболее похожие слова для другого из предварительно обученных векторов встраивания в R .Например, слова, похожие на «пиво».Для этого я загружаю предварительно встроенные векторы встраивания в http://nlp.stanford.edu/data/glove.twitter.27B.zip и применяю следующий код:

Исходный код:

glove_dir = "~/Downloads/glove.6B"
lines <- readLines(file.path(glove_dir, "glove.6B.100d.txt"))
embeddings_index <- new.env(hash = TRUE, parent = emptyenv())
for (i in 1:length(lines)) {
    line <- lines[[i]]
    values <- strsplit(line, " ")[[1]]
    word <- values[[1]]
    embeddings_index[[word]] <- as.double(values[-1])
}
cat("Found", length(embeddings_index), "word vectors.\n")

embedding_dim <- 100
embedding_matrix <- array(0, c(max_words, embedding_dim))
for (word in names(word_index)) {
  index <- word_index[[word]]
  if (index < max_words) {
    embedding_vector <- embeddings_index[[word]]
    if (!is.null(embedding_vector))
      embedding_matrix[index+1,] <- embedding_vector
  }
}

Но я не понимаю, как получить слова наиболееаналогичный.Я нашел примеры, но не работает, потому что структура векторов вложений различна

find_similar_words <- function(word, embedding_matrix, n = 5) {
    similarities <- embedding_matrix[word, , drop = FALSE] %>%
    sim2(embedding_matrix, y = ., method = "cosine")
    similarities[,1] %>% sort(decreasing = TRUE) %>% head(n)
}
find_similar_words("beer", embedding_matrix)

Как вычислить сходство для предварительно обученных вложений слов в R ?

...