Расширение Word2vec для контролируемых - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть некоторые медицинские услуги, а также аналогичные услуги в следующем столбце.В приведенном ниже коде столбец name1 содержит службы, а столбец name2 - аналогичные службы.Вы можете считать name2 целевой переменной.Я пытаюсь извлечь синонимы слова.

A <- data.frame(name1 = c(
  "X-ray right leg arteries",
  "consultation of gynecologist",
  "Magnetic reasoning imaging leg arteries",
  "radiography leg with 20km distance"
), name2 = c(
  "Radiography left leg arteries",
  "inspection of gynecalogist",
  "MRI right leg arteries",
  "x-ray right leg arteries"
), stringsAsFactors = F)

Я объединил оба столбца, чтобы я мог применить алгоритм word2vec и найти синонимы.

A["name"] = paste(A$name1, A$name2)
A["name"] = gsub("[[:punct:]]", "",  A$name)

Проблема этого подхода -после объединения аналогичные слова (например, рентгеновская рентгенография) далеки от расстояния.Алгоритм Word2Vec наказывает их.

library(magrittr)
library(text2vec)
library(stringr)
library(stringi)

tokens = A$name %>% tolower %>% word_tokenizer()
it = itoken(tokens)

# Create and Prune vocabulary
v = create_vocabulary(it) %>% prune_vocabulary(term_count_min=1)
vectorizer = vocab_vectorizer(v)

# Term-co-occurence matrix
tcm = create_tcm(it, vectorizer, skip_grams_window = 10)

# Glove Model
model = GlobalVectors$new(word_vectors_size=50, vocabulary=v, x_max=1, learning_rate=0.15)
wv_main = model$fit_transform(tcm,n_iter=25)
wv = model$components  #Dimension words x wvec_size
word_vectors = wv_main + t(wv)

#Make distance matrix
d = dist2(word_vectors, method="cosine")  #Smaller values means closer

# Find closely related words
findCloseWords = function(w,d,n) {
  words = rownames(d)
  i = which(words==w)
  if (length(i) > 0) {
    res = sort(d[i,])
    print(as.matrix(res[2:(n+1)]))
  }
  else {
    print("Word not in corpus.")
  }
}

findCloseWords("xray",d,3)

               [,1]
    right 0.7636013
    mri   0.8105633
    leg   0.8390371

Он должен возвращать рентгенографию, поскольку рентген и рентгенография означают одно и то же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...