読者です 読者をやめる 読者になる 読者になる

CL2017から採択通知

corpus ling diary

 来たる2017年7月24〜28日にイギリスのバーミンガムで開催されるCorpus Linguistics 2017に投稿していたポスターが採択されました。*1

  • Yuichiro Kobayashi (2017). Developmental patterns of metadiscourse in second language writing. Corpus Linguistics 2017.

 今回の発表は、学習者のメタ談話標識を国別に分析したInvestigating metadiscourse markers in Asian Englishes: A corpus-based approachという論文の続編で、習熟度別の比較も加えたものです。CLは、4回連続の発表。*2 バーミンガムは、CL2011で発表して以来、6年ぶり。

*1:ここのところ口頭発表が続いていたので、久しぶりにポスターで出してみました。

*2:CL2015は、都合により不参加でしたが、共同研究者が発表しました。

広告を非表示にする

ランダムフォレストのMDS plotで誤分類されている標本だけ書式を変える

r stats

 Rでランダムフォレストの結果に基づく多次元尺度法の散布図(MDS plot)を作成し、他クラスに誤分類されている標本だけ書式を変えたい、という要望があったので、今回はそれに挑戦してみます。以下は、「とりあえずできた」という程度のコードなので、もっと良い書き方があるかも知れません。分析データは、irisデータセットです。

# パッケージの読み込み
library(randomForest)
# 乱数の種の固定
set.seed(1)
# ランダムフォレストの実行(近接性も計算)
rf.model <- randomForest(Species ~ ., data = iris, proximity = TRUE)
# ランダムフォレストの結果に基づく多次元尺度法の散布図を作成
MDSplot(rf.model, iris$Species)

 上記のスクリプトを実行すると、以下のような図が表示されます。

f:id:langstat:20170211191003p:plain

 では、この図を力技で加工します。

# 正解データと判別結果の照合
# (rf.model$yが正解データで、rf.model$predictedが判別結果)
TF <- rf.model$y == rf.model$predicted
# 正しく分類されているか否かの論理値(TRUE/FALSE)を数値(1/0)に変換
TF.n <- as.numeric(TF)
# MDS plotの結果を変数に代入
MDS.result <- MDSplot(rf.model, iris$Species)
# 誤分類されている標本だけ書式を変えて描画
# (MDS plotの座標データは、MDS.result$points)
# colの指定で、いくつの数値を足すかは好みの問題
# (ただ、何も足さないと、誤分類されている標本が表示されない)
plot(MDS.result$points, pch = as.numeric(iris$Species), col = TF.n + 2)

 上記のスクリプトを実行すると、以下のような図が表示されます。この図では、3種類のアヤメがそれぞれ○、△、+の記号で表示されています。また、正しいクラスに分類できたものが緑、誤ったクラスに分類されたものが赤で表されています。*1 引数colや引数pchなどは、お好みで変えてください。

f:id:langstat:20170211190436p:plain

 そして、誤分類されている標本に標本番号を振る場合は、以下のようにします(これも力技なので、もっと洗練された書き方があると思います)。

# 誤分類されている標本の番号を取得
n <- grep(FALSE, TF)
# 誤分類されている標本の番号を表示
# 座標にいくつの数値を足すかは職人芸(笑)
# (ただ、何も足さないと、記号の上に文字列が重なってしまう)
text(MDS.result$points[n, ] + 0.03, as.character(n), cex = 0.5)

 上記のスクリプトを実行すると、以下のような図が表示されます。

f:id:langstat:20170211192232p:plain

 「やさしい」赤ペン先生をゆるぼします(笑)

*1:plotで使用できる色については、こちらなどを参照。

Rの初心者が中級者にステップアップするための7冊

r

 今回は、Rの初心者から中級者にステップアップするための参考書をご紹介します。*1 なお、本記事における「初心者」は、以下の4つの条件を満たすことを想定しています。*2

  1. Rのインストールと起動ができる
  2. RにテキストファイルやCSVファイルを読み込むことができる
  3. Rの追加パッケージのインストールと読み込みができる
  4. Rにおける「変数」、「代入」、「関数」、「ベクトル」、「行列」、「データフレーム」について大体理解している

 また、以下の本の選定にあたっては、「○○学のための〜」のような特定分野の読者を対象とするものは除外しました。

統計について学びたい

 Rと言えば、まずは統計でしょう。Rで統計を学ぶ場合は、以下の本がオススメです。この本は、非常に基本的な内容から始まり、徐々に発展的な内容となっていきます。

Rによるやさしい統計学

Rによるやさしい統計学

データマイニングについて学びたい

 古典的な統計手法だけでなく、データマイニング機械学習に関する比較的新しい手法を学びたい場合は、以下の本がオススメです(以下は3月発売の第2版ですが、第1版は発売中です)。

Rによるデータサイエンス(第2版) データ解析の基礎から最新手法まで

Rによるデータサイエンス(第2版) データ解析の基礎から最新手法まで

テキストマイニングについて学びたい

 近年、アンケート分析やクチコミ分析におけるテキストマイニングの有効性が認識されつつあります。以下の本では、テキストデータの収集方法や前処理から、様々なテキストマイニングの手法が説明されています。

Rによるやさしいテキストマイニング

Rによるやさしいテキストマイニング

可視化について学びたい

 データの可視化は、分析の糸口を発見する意味でも、結果を他人に分かりやすく説明する意味でも、非常に重要です。Rによるグラフの作成方法については、以下の本がよくまとまっています。

統計データの視覚化 (Rで学ぶデータサイエンス 12)

統計データの視覚化 (Rで学ぶデータサイエンス 12)

前処理について学びたい

 データ分析では、データ加工やデータ変換などの前処理は不可欠です。Rによる前処理に関しては、以下の本に最も体系的に書かれています。

データ分析プロセス (シリーズ Useful R 2)

データ分析プロセス (シリーズ Useful R 2)

プログラミングについて学びたい

 Rを本格的に使いこなすためには、ある程度のプログラミング技術が求められます。Rを使ってプログラミングの基本を学びたい場合は、以下の本がオススメです。

RStudioではじめるRプログラミング入門

RStudioではじめるRプログラミング入門

Rについてもっと知りたい

 統計処理やテキストマイニング以外にも、Rを様々な用途で活用することができます。Rの機能を概観したいときは、手始めに以下の本を読んでみるとよいでしょう。

改訂3版 R言語逆引きハンドブック

改訂3版 R言語逆引きハンドブック

*1:このリストは、R初心者合宿講習会(R Bootcamp)のための推薦図書リストから一部を抜き出したものです。

*2:これらの条件を満たしていない場合は、より入門的な書籍もしくはウェブサイトなどで簡単に確認することをオススメします。因みに、これらの内容は、本記事でも紹介している『Rによるやさしいテキストマイニング』などでも解説されています。

『Rによるやさしいテキストマイニング』という本を刊行します

r corpus ling stat nlp

 2月17日、『Rによるやさしいテキストマイニング』という単著を刊行いたします。目次などは出版社のウェブサイトで公開されていますが、ここでは、もう少し詳しくご紹介します。*1

Rによるやさしいテキストマイニング

Rによるやさしいテキストマイニング

どうして本書が書かれたのか?

 近年、アンケートの自由回答データなどを定量的に分析するテキストマイニングの技法が大きな注目を集めています。Amazonで「テキストマイニング」という単語をタイトルに含む書籍を検索すると、本書執筆時点で30件以上ヒットします。しかし、「テキストマイニングを始めてみたいが、何から手をつけてよいか分からない」、「テキストマイニングの本はどれも難しい」などという声もしばしば聞こえてきます。これからテキストマイニングを始めてみようという人は、分析ツールの解説書で紹介されているような処理がなぜ必要なのか、あるいは、複数の手法の中で結局どれを選べばいいのか、といった疑問を抱くことがあります。また、実際の研究や業務のためのテキストデータをどのように集めればよいのか、が分からないという人もいます。そして、サンプルデータの分析ができるようになっても、本で学んだ技術が自分の研究や業務とどのようにつながるのか、というイメージが湧かない場合もあります。
 そこで本書では、単なるツールのハウツー本にならないように、データの収集方法、言語学や言語処理の分析手法に関しても詳しく解説します。類書には、「とりあえず、テキストマイニングを体験してみよう」という趣旨のもと、すぐにツールの使い方を紹介するものが多くあります。それに対して、本書では、「基礎編」でテキストデータの構築と分析に関する理論的な枠組みを学び、「準備編」でデータ収集やデータ分析の基本をひととおり身につけた上で、「実践編」のテキストマイニングに進みます。目次を見て頂ければ分かるように、全10章から構成される本書では、前半の5章が「基礎編」と「準備編」に割かれています。

本書の想定読者は誰か?

 本書で想定されている読者は、テキストマイニングに興味を持つ人文・社会科学系の大学生、商品企画やカスタマーサポートに関わるビジネスパーソンなどです。本書は、「テキストマイニングを学ぶと、どんなことができるようになるのか」、「テキストマイニングに必要な知識とは、一体何だろうか」、「高価なツールを使わずに、テキストマイニングをするにはどうしたらいいのか」といった疑問に答えます。
 これまで筆者は、複数の大学において、人文・社会科学系の受講生を対象とするテキストマイニングの授業を担当してきました。また、研究者向け、あるいはビジネスパーソン向けのセミナーで、テキストマイニングに関する講義をした経験もあります。それらの授業やセミナーの参加者の大半は、言語学統計学の知識を持たない人々です。本書には、筆者がこれまでに接してきた初心者たちに評判の良かった説明や実例が多く盛り込まれています。

本書を読むと何ができるようになるのか?

 本書を読むと、データの構築から分析まで、テキストマイニングに関する基本的な知識と技術をひととおり身につけることができます。また、単にツールの操作方法を知るだけでなく、どのようなときにどのような分析方法を用いるべきか、という判断がある程度できるようになります。
 本書では、テキストマイニングを行うにあたって、筆者が非常に重要であると思う技術のみを厳選して紹介します。それ以外の技術に関しては、別の文献を読む必要があります。しかし、本書では、より高度な書籍や論文を読み解くための足がかりを提供します。具体的には、より発展的な話題や技術に関して、コラムや脚注などで、次に読むべき文献を紹介します。また、必要に応じて、読者が自分でインターネット検索をするための検索キーワードの例を示します。筆者は、読者が単に本書に書かれた知識を得るだけでなく、たとえ書かれていないことであっても独力で調べられるようになるための手助けをしたいと考えています。

本書で使うツールは何か?

 本書では、主に、Rというデータ解析のソフトウェアを使用します。Rは、フリーウェアですので、誰でも自由にダウンロードして使用することができます。また、テキストマイニングだけでなく、様々なデータ解析機能を備えています。Rよりも使いやすい商用のテキスト分析ツールも存在しますが、お金のない学生や予算の限られた会社にとって、フリーウェアは非常にありがたいものです。そして、Rの使い方を1つずつ学んでいくことで、実際のデータ処理の過程をより深く理解することができます。

文系の読者でもテキストマイニングが使えるようになるのか?

 所謂「文系」の読者にとって、テキストマイニングのようなデータ処理は、あまり馴染みがないかも知れません。しかし現在、テキストマイニングは、社会学や政治学のような社会科学、文学や歴史学のような人文科学でも盛んに活用されています。データ解析の技術は、もはや「理系」だけのものではありません(筆者も、大学時代は文学部でアイルランド文学の研究をしていました)。本書が読者の研究や業務にテキストマイニングを導入するきっかけとなりましたら、筆者にとって望外の喜びであります。

謝辞

 本書を出版する機会を与えてくださったオーム社に心より感謝の意を表します。また、本書の草稿に対して貴重なご意見をくださった石田基広徳島大学)、金明哲同志社大学)、田中省作立命館大学)、岡﨑友子東洋大学)、村上明ケンブリッジ大学)、西原史暁(教育測定研究所)の各氏に御礼を申し上げます。*2 そして、オンラインや対面で多くのことを教えてくださったRコミュニティの皆様、本書で紹介しているツールを開発された方々にも感謝します。

*1:以下の文章は、本書の「はじめに」の一部に加筆修正などを加えたものです。

*2:これらの所属は、本書刊行当時のものです。

Rで英文に品詞情報を付与する

r corpus nlp

 Rで英文に品詞情報を付与したいときは、openNLPパッケージを利用します。このパッケージの関数を使うと、Apache OpenNLP Maxent Part of Speech taggerによる品詞情報付与を行うことができます。以下の例では、Rの公式ウェブサイトから取った文に品詞タグを付与しています。

# パッケージの読み込み
library(openNLP)
library(NLP)

# テキストの読み込み
text <- "R is a free software environment for statistical computing and graphics."
text <- as.String(text)

# 品詞情報付与
sent_token_annotator <- Maxent_Sent_Token_Annotator()
word_token_annotator <- Maxent_Word_Token_Annotator()
text_an <- annotate(text, list(sent_token_annotator, word_token_annotator))
pos_tag_annotator <- Maxent_POS_Tag_Annotator()
text_an2 <- annotate(text, pos_tag_annotator, text_an)

# 品詞情報付与結果の整形
text_an3 <- subset(text_an2, type == "word")
tags <- sapply(text_an3$features, "[[", "POS")
sprintf("%s: %s", text[text_an3], tags)

 上記のスクリプトを実行すると、以下のような結果が表示されます。

 [1] "R: NN"           "is: VBZ"         "a: DT"          
 [4] "free: JJ"        "software: NN"    "environment: NN"
 [7] "for: IN"         "statistical: JJ" "computing: NN"  
[10] "and: CC"         "graphics: NNS"   ".: ."   

 このパッケージの詳しい使い方については、公式のマニュアルを参照してください。*1

*1:Parse_Annotator関数という構文解析のための関数も実装されていて、英文を解析するにはopenNLPmodels.enというパッケージが必要らしいのですが、現在はCRANから削除されていて、こちらで公開されているようです。