在text2vec R包中准备单词嵌入

时间:2016-09-15 15:28:37

标签: r text2vec

基于text2vec包的插图,提供了一个示例来创建单词嵌入。维基数据被标记化,然后创建术语共生矩阵(TCM),用于创建使用手套功能提供的单词嵌入。包。 我想为随包提供的电影评论数据构建单词嵌入。我的问题是:

  1. 我是否需要将所有电影评论合并为一个长字符串,然后进行标记化。
  2. 这将导致2次评论之间的边界令牌共同发生,这是没有意义的。

    **vignettes code:**
    library(text2vec)
    library(readr)
    temp <- tempfile()
    download.file('http://mattmahoney.net/dc/text8.zip', temp)
    wiki <- read_lines(unz(temp, "text8"))
    unlink(temp)
    # Create iterator over tokens
    tokens <- strsplit(wiki, split = " ", fixed = T)
    # Create vocabulary. Terms will be unigrams (simple words).
    vocab <- create_vocabulary(itoken(tokens))
    vocab <- prune_vocabulary(vocab, term_count_min = 5L)
    # We provide an iterator to create_vocab_corpus function
    it <- itoken(tokens)
    # Use our filtered vocabulary
    vectorizer <- vocab_vectorizer(vocab, 
                                   # don't vectorize input
                                   grow_dtm = FALSE, 
                                   # use window of 5 for context words
                                   skip_grams_window = 5L)
    tcm <- create_tcm(it, vectorizer)
    fit <- glove(tcm = tcm,
                 word_vectors_size = 50,
                 x_max = 10, learning_rate = 0.2,
                 num_iters = 15)
    

    我对开发单词嵌入感兴趣的数据可以得到如下:

    library(text2vec)
    data("movie_review")
    

1 个答案:

答案 0 :(得分:3)

不,您不需要连接评论。你只需要从令牌上的正确迭代器构造tcm

library(text2vec)
data("movie_review")
tokens = movie_review$review %>% tolower %>%  word_tokenizer
it = itoken(tokens)
# create vocabulary
v = create_vocabulary(it) %>% 
  prune_vocabulary(term_count_min = 5)
# create co-occurrence vectorizer
vectorizer = vocab_vectorizer(v, grow_dtm = F, skip_grams_window = 5)

现在我们需要重新初始化(对于稳定的0.3版本。对于dev 0.4,不需要重新初始化迭代器):

it = itoken(tokens)
tcm = create_tcm(it, vectorizer)

适合模特:

fit <- glove(tcm = tcm,
             word_vectors_size = 50,
             x_max = 10, learning_rate = 0.2,
             num_iters = 15)