使用R中的tex2vec进行手套词嵌入模型参数,并每n次迭代后显示训练输出(历元)

时间:2018-08-14 00:51:28

标签: r word2vec text2vec glove

我正在R中使用text2vec软件包来训练单词嵌入(手套模型),如下所示:

library(text2vec)
library(tm)

prep_fun = tolower
tok_fun = word_tokenizer
tokens = docs %>%  # docs: a collection of text documents  
prep_fun %>% 
tok_fun

it = itoken(tokens, progressbar = FALSE)

stopword <- tm::stopwords("SMART")
vocab = create_vocabulary(it,stopwords=stopword) 

vectorizer <- vocab_vectorizer(vocab)

tcm <- create_tcm(it, vectorizer, skip_grams_window = 6)

x_max <- min(50,max(10,ceiling(length(vocab$doc_count)/100)))
glove_model <- GlobalVectors$new(word_vectors_size = 200, vocabulary = vocab, x_max = x_max,learning_rate = 0.1) 

word_vectors <- glove_model$fit_transform(tcm, n_iter = 1000, convergence_tol = 0.001)

运行此代码时,我得到以下输出: enter image description here

我的问题是:

  1. 是否有可能在每n次迭代后输出一次,即第50、100、150等等的输出。
  2. 对word_vectors_size,x_max和learning_rate的最佳值有何建议?例如,对于10,000个文档,这些参数的最佳价值是多少?

感谢您的答复。

非常感谢, 山姆

1 个答案:

答案 0 :(得分:0)

GlobalVectors类的一个成员称为n_dump_every。您可以将其设置为一些数字,并且单词嵌入的历史记录将被保存。然后可以使用get_history()函数对其进行检索

glove_model <- GlobalVectors$new(word_vectors_size = 200, vocabulary = vocab, x_max = 100,learning_rate = 0.1) 
glove_model$n_dump_every = 10
word_vectors <- glove_model$fit_transform(tcm, n_iter = 1000, convergence_tol = 0.001)
trace = glove_model$get_history()

关于第二个问题-

  • 您可以尝试稍微改变学习率(通常会降低),但是默认值应该没问题(跟踪成本函数的值)。
  • 您拥有的数据越多,可以为word_vectors_size提供的价值就越大。对于Wikipedia,大小通常为300就足够了。对于较小的数据集,您可以从20-50开始。您真的需要尝试一下。