LoginSignup
12
11

More than 5 years have passed since last update.

Rで自然言語処理。ナイーブベイズで文書分類を試みる

Last updated at Posted at 2014-04-23

概要

ショートショートを予め用意したカテゴリに自動分類する。
R環境を通して、MeCabで形態素解析しナイーブベイズを使ってカテゴリを推測する。

環境設定

-> RMeCab のインストールと R を用いたテキスト処理(形態素解析など)
-> ニコニコ大百科データからMeCab辞書を生成する

入力

フォルダにショートショートを格納する。

yyMMddhhmmss(フォルダ)
 |ーakga_01.txt(ショートショート)
 |ー :
 |ー :
 |ーakga_06.txt
 |ーnkmk_01.txt
 |ー :
 |ー :
 |ーnkmk_06.txt
 |ーxxxx_01.txt
 |ー :
 |ー :
 |ーxxxx_04.txt
※ファイルの接頭辞がカテゴリ名を表す。
 akga/nkmkファイルが訓練データ。xxxxファイルが検証データ。
 xxxx_01.txt,xxxx_02.txt=akga
 xxxx_03.txt,xxxx_04.txt=nkmk

処理

文書分類器.r
library(RMeCab)
library(e1071)

d <- as.data.frame(t(docMatrix2("<ショートショート格納フォルダ>", pos = c("名詞"), weight = "norm")))

d.train <- d[c(1:12),]
d.train["tag"] <- factor(sub("^([a-z]*?)_.*", "\\1", rownames(d.train), perl = T))
rownames(d.train)
d.test <- d[-c(1:12),]
rownames(d.test)

model <- naiveBayes(tag~., d.train, laplace = 0.5)

predict(model, d.test)

出力イメージ

rownames(d.test)
[1] "xxxx_01.txt" "xxxx_02.txt" "xxxx_03.txt" "xxxx_04.txt"

predict(model, d.test)
[1] akga akga nkmk nkmk
Levels: akga nkmk

感想

訓練データが少なく未知語が多数出る場合、
未知語へのペナルティを小さくしないと語彙の多いカテゴリに全て分類される気がする。

参考サイト

-> バイオ・データ・マイニング/RでNaïve Bayesを使う - とうごろうぃき
-> 10行でナイーブベイズ ~Rって便利だね!~ - あらびき日記

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11