Я использовал text2vec для создания пользовательских вложений слов из корпуса проприетарных текстовых данных, которые содержат много отраслевого жаргона (поэтому стандартные вложения, подобные тем, которые доступны в Google, не будут работать). Аналогии прекрасно работают, но у меня возникают трудности с применением вложений для оценки новых данных. Я хочу использовать вложения, которые я уже обучил, чтобы понимать отношения в новых данных. подход, который я использую (описанный ниже), кажется запутанным и мучительно медленным. Есть ли лучший подход? Возможно, что-то уже встроено в пакет, что я просто пропустил?
Вот мой подход (предложенный с наиболее близким к воспроизводимому коду, который я могу сгенерировать, учитывая, что я использую проприетарный источник данных):
d = список, содержащий новые данные. каждый элемент имеет классовый характер
vecs = векторизация слов, полученная из реализации text2vec перчаток
new_vecs <- sapply(d, function(y){
it <- itoken(word_tokenizer(y), progressbar=FALSE) # for each statement, create an iterator punctuation
voc <- create_vocabulary(it, stopwords= tm::stopwords()) # for each document, create a vocab
vecs[rownames(vecs) %in% voc$vocab$terms, , drop=FALSE] %>% # subset vecs for the words in the new document, then
colMeans # find the average vector for each document
}) %>% t # close y function and sapply, then transpose to return matrix w/ one row for each statement
В моем случае мне нужно хранить результаты отдельно для каждого документа, поэтому все, что связано со склеиванием элементов d, не будет работать, но, безусловно, должен быть лучший способ, чем то, что я собрал вместе. Я чувствую, что должен упустить что-то довольно очевидное.
Любая помощь будет оценена.