0

リラックスした単語移動距離を使用してテキストの類似性を計算したいと考えています。2 つの異なるデータセット (コーパス) があります。下記参照。

A <- data.frame(name = c(
  "X-ray right leg arteries",
  "consultation of gynecologist",
  "x-ray leg arteries",
  "x-ray leg with 20km distance",
  "x-ray left hand"
), stringsAsFactors = F)

B <- data.frame(name = c(
  "X-ray left leg arteries",
  "consultation (inspection) of gynecalogist",
  "MRI right leg arteries",
  "X-ray right leg arteries with special care"
), stringsAsFactors = F)

Rでパッケージを使用しtext2vecています。何か間違っているようです。

library(text2vec)
library(stringr)
prep_fun = function(x) {
  x %>% 
    # make text lower case
    str_to_lower %>% 
    # remove non-alphanumeric symbols
    str_replace_all("[^[:alnum:]]", " ") %>% 
    # collapse multiple spaces
    str_replace_all("\\s+", " ")
}

両方のデータセットを組み合わせる

C = rbind(A, B)

C$name = prep_fun(C$name)

it = itoken(C$name, progressbar = FALSE)
v = create_vocabulary(it) %>% prune_vocabulary()
vectorizer = vocab_vectorizer(v)

ドキュメント用語マトリックス

dtm = create_dtm(it, vectorizer)

用語共起行列

tcm = create_tcm(it, vectorizer, skip_grams_window = 3)

手袋モデル

glove_model = GloVe$new(word_vectors_size = 10, vocabulary = v, x_max = 3)
wv = glove_model$fit_transform(tcm, n_iter = 10)

# get average of main and context vectors as proposed in GloVe paper
wv = wv + t(glove_model$components)
rwmd_model = RWMD$new(wv)
rwmd_dist = dist2(dtm[1:nrow(A), ], dtm[nrow(A)+1:nrow(C), ], method = rwmd_model, norm = 'none')
head(rwmd_dist)

          [,1]      [,2]      [,3]      [,4]
[1,] 0.1220713 0.7905035 0.3085216 0.4182328
[2,] 0.7043127 0.1883473 0.8031200 0.7038919
[3,] 0.1220713 0.7905035 0.3856520 0.4836772
[4,] 0.5340587 0.6259011 0.7146630 0.2513135
[5,] 0.3403019 0.5575993 0.7568583 0.5124514

望ましい出力:データフレームAの「婦人科医の診察」は、データフレームBの「婦人科医の診察(検査)」にマッピングする必要があります。同様に、データフレームAのテキストはデータフレームBのテキストと一致する必要があります.

4

1 に答える 1

0

私は似たようなことや同じことをしています。すぐに私のトライアルをアップロードします。現在、平均して 1000 ~ 2000 語の範囲の 5700 のスピーチのコーパス [ストップ ワードの削除、ステミング] で十分かどうか、ベクトル、ウィンドウ、図を最適化しようとしています。

それでも必要な場合は、戻ってきてリンクを投稿しますが、私が見る限り、あなたはコーパスをトークン化していませんでした.itokensは私が理解したものとは異なります. また、インターネット上では、著者は word_tokenizer 関数を使用しています。

最後に、 pdist2 関数を使用してみて、データ フレーム内の別々の行にテキストが必要です。平行距離になります。

于 2018-11-21T20:33:57.977 に答える