スケーリングした比較クラウド
レンタルレビューの極性スコアに「採点のインフレ」が起きていたのを覚えていますか? インサイトを掘り下げる別の方法として、スコアをいったん 0 に合わせてスケーリングし、その後にコーパスをサブセットするやり方があります。平均を 0 にするため、以前はポジティブだったコメントがネガティブ側に入れ替わる(その逆も)ことがあります。この演習ではスコアをスケーリングし、続いて comparison.cloud() を描き直します。「採点のインフレ」を取り除くことで、新たな気づきが得られるかもしれません。
前の演習では、bos_reviews$comments に polarity() を適用し、comparison.cloud() を作成しました。今回は comparison.cloud() を作る前に、結果を scale() でスケーリングします。可視化で新しい発見が見えるか確認してみましょう!
今回は復習要素が多いので、コードはほとんど用意されています。正しいオブジェクト名とパラメータを埋めて完成させてください。
この演習はコースの一部です
Rで学ぶSentiment Analysis
演習の手順
- 事前に読み込まれている
bos_pol$allの一部を、インデックス[1:6,1:3]で確認します。 - 極性スコア列
bos_pol$all$polarityにscale()を適用し、scaled_polarityという新しい列を追加します。 - ポジティブコメント用に、新しい列
bos_reviews$scaled_polarityが 0 より大きい (>) 行でsubset()を作成します。 - ネガティブコメント用に、新しい列
bos_reviews$scaled_polarityが 0 より小さい (<) 行でsubset()を作成します。 pos_commentsに対してpaste()を用い、pos_termsを作成します。- 続いて
neg_commentsにpaste()を用い、neg_termsを作成します。 - まとめたドキュメント
pos_termsとneg_termsを 1 つにまとめ、all_termsというコーパス用の入力ベクトルにします。 - いつもの
tmのワークフローに従い、all_termsに対してVectorSource()をVCorpus()の内側にネストして適用します。 all_corpusオブジェクトを使ってTermDocumentMatrix()を作成します。これは基本的なクリーニング関数を含む TfIdf 重み付きの TDM です。all_tdmをas.matrix()でall_tdm_mに変換します。既存のコードで列名を"positive"と"negative"に変更します。- 最後に! 行列オブジェクト
all_tdm_mに対してcomparison.cloud()を適用します。新しく頻出するネガティブ語に注目してみてください。思わぬ発見があるかもしれません。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Review
___
# Scale/center & append
bos_reviews$___ <- scale(___)
# Subset positive comments
pos_comments <- subset(bos_reviews$comments, ___)
# Subset negative comments
neg_comments <- subset(bos_reviews$comments, ___)
# Paste and collapse the positive comments
pos_terms <- paste(___, collapse = " ")
# Paste and collapse the negative comments
neg_terms <- paste(___, collapse = " ")
# Organize
all_terms<- c(___, ___)
# VCorpus
all_corpus <- ___(VectorSource(___))
# TDM
all_tdm <- TermDocumentMatrix(
___,
control = list(
weighting = weightTfIdf,
removePunctuation = TRUE,
stopwords = stopwords(kind = "en")
)
)
# Column names
___ <- as.matrix(___)
colnames(all_tdm_m) <- c("___", "___")
# Comparison cloud
comparison.cloud(
___,
max.words = 100,
colors = c("darkgreen", "darkred")
)