11
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

概要

ショートショートを予め用意したカテゴリに自動分類する。
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って便利だね!~ - あらびき日記

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
11
Help us understand the problem. What are the problem?