1

text2vec パッケージの DTM (文書用語マトリックス) の作成に関するドキュメントがあります。たとえば、次の例では、マトリックスの作成後に TFIDF 重み付けが適用されます。

data("movie_review")
N <- 1000
it <- itoken(movie_review$review[1:N], preprocess_function = tolower,
tokenizer = word_tokenizer)
v <- create_vocabulary(it)
vectorizer <- vocab_vectorizer(v)
it <- itoken(movie_review$review[1:N], preprocess_function = tolower,
tokenizer = word_tokenizer)
dtm <- create_dtm(it, vectorizer)
# get tf-idf matrix from bag-of-words matrix
dtm_tfidf <- transformer_tfidf(dtm)

トレーニング データセットに基づいて DTM を作成し、そのデータセットをモデルへの入力として使用するのが一般的です。次に、新しいデータ (テスト セット) に遭遇すると、新しいデータに同じ DTM を作成する必要があります (つまり、トレーニング セットで使用されたすべての同じ用語を意味します)。とにかく、この方法で新しいデータセットを変換するパッケージがありますか (scikit には、このタイプのインスタンスのための変換メソッドがあります)。

4

1 に答える 1

4

実際、私が始めたとき、私text2vecは最初にそのパイプラインを維持しました。現在、更新されたドキュメントを含む新しいリリースを準備しています。

v0.3 の場合、次のように動作するはずです。

data("movie_review")
train_rows = 1:1000
prepr = tolower
tok = word_tokenizer

it <- itoken(movie_review$review[train_rows], prepr, tok, ids = movie_review$id[train_rows])
v <- create_vocabulary(it) %>% 
  prune_vocabulary(term_count_min = 5)

vectorizer <- vocab_vectorizer(v)
it <- itoken(movie_review$review[train_rows], prepr, tok)
dtm_train <- create_dtm(it, vectorizer)
# get idf scaling from train data
idf = get_idf(dtm_train)
# create tf-idf
dtm_train_tfidf <- transform_tfidf(dtm_train, idf)

test_rows = 1001:2000
# create iterator
it <- itoken(movie_review$review[test_rows], prepr, tok, ids = movie_review$id[test_rows])
# create dtm using same vectorizer, but new iterator
dtm_test_tfidf <- create_dtm(it, vectorizer) %>% 
  # transform  tf-idf using idf from train data
  transform_tfidf(idf)
于 2016-08-28T11:44:40.140 に答える