単語数・出現頻度・カバー率
係り受けもまだ終わったわけではないが、そこそこ精度も出たし改善案も見えているしで一段落してはいるので、同じことをずっとやってるのも飽きるというのもあり、そろそろ次のステップのことを考えはじめている。
まだ明確にやることが決まっているわけではないのだが、何をするにせよ、各単語の意味なり用法なりを記述した、いわゆる「辞書」を作ることが必須になりそうだ。イメージとしてはWordNetとかFrameNetとかあんな感じのもの。もちろんWordNetやFrameNetそのものではだめで、新しく作る必要がある。
しかし、辞書を一から作るとなるととんでもなく大変な作業なので、単語数どれだけいるのか?よって工数はどのくらいになりそうか?を見積もる必要がある。また、いきなり全単語を網羅する完全な辞書ができるわけはないので、当初は小さい辞書を作ってプロトタイプを作る、といったことになるだろう。そうすると、最初に辞書に入れるべき単語はどれか?また、単語いくつあれば、文章全体の何%がカバーできるのか?といったことが気になってくる。今回はそのあたりの情報を収集してみたのでまとめておく。
まず、日本語の単語数とは一体いくつあるのか?ウェブ上の国語辞書「デジタル大辞泉」は見出し語24万だそうである。だがこの辞書、見出し語をざっと見ると、私もさっぱり知らないような単語ばかり並んでいる。一般的な日本人の語彙はもっと少ないはずだ。
IPA辞書 mecab-ipadic-2.7.0-20070801 では品詞ごとにcsvになっているので、各品詞の数も wc -l 等で簡単にわかる。
27210 Adj.csv
135 Adnominal.csv
3032 Adverb.csv
199 Auxil.csv
171 Conjunction.csv
19 Filler.csv
252 Interjection.csv
3328 Noun.adjv.csv
795 Noun.adverbal.csv
60477 Noun.csv
120 Noun.demonst.csv
42 Noun.nai.csv
34202 Noun.name.csv
42 Noun.number.csv
16668 Noun.org.csv
151 Noun.others.csv
72999 Noun.place.csv
27327 Noun.proper.csv
12146 Noun.verbal.csv
2 Others.csv
91 Postp-col.csv
146 Postp.csv
221 Prefix.csv
1393 Suffix.csv
208 Symbol.csv
130750 Verb.csv
392126 total
動詞と形容詞は活用形の違いも1語にカウントされているのでだいぶ多くでていることに注意。ちなみに{Verb,Adj}.csvを'基本形'でgrepすると、それぞれ15446/3641行ある。Nounは固有名詞も含んでいるので多くなっている。予想はしていたが、やはり名詞が圧倒的に多い。
参考までに英語の単語数は、WordNetの情報がある:
POS Unique Synsets Total
Strings Word-Sense Pairs
Noun 117798 82115 146312
Verb 11529 13767 25047
Adjectiv 21479 18156 30002
Adverb 4481 3621 5580
Totals 155287 117659 206941
形容詞が動詞より多い等、若干傾向が違うが、大筋似ているようだ。まあそれはさておき。
この記事 によると、小学生向け辞書で3万語、高校向けで8万語くらいを収録のようだ。ただこれも、一般的な小学生/高校生の使う語彙よりかなり多く収録していると思われる。
…などと探しているうち、そのものずばり理解語彙数を調べた記事を発見:
>小学生レベル: 5千~2万語
>中学生レベル: 2万~4万語
>高校生レベル: 4万~4万5千語
>大学生レベル: 4万5千~5万語
だそうである。
一方、wikipedia 語彙 によると:
>満年齢で6歳になる子どもの場合、理解語彙の総量は、およそ5000~6000語ほど。
>13歳では3万語前後。20歳ではおよそ4万5000~50000語ほどという調査結果が出ている。
とのことなので、まあ大体こんなもんか。
ちなみにこれらは*理解*語彙(見て/聞いてわかる語彙)であって、使用語彙(実際に自分が使う語彙)はもっと少ない。これがどのくらいか、あまりちゃんと調べてないが、こういう発表が見つかった: 「日本人のオンライン・コミュニケーション上での平均使用語彙数は8,000語である」
理解語彙の5万よりだいぶ少ないが、まあ5万といってもひとりひとり(専門等によって)かなり違い、共通するものは少ないのかもしれない。たしかに女子高生の会話なんか聞いたってちんぷんかんぷんだし。文系の人にプログラムの話してもわかってもらえないし。ツイッターで専門の深い話なんかしないだろうし。というのを考えると、誰もが使うような共通項の語彙というのは8000程度なのかもしれない。
もう少し別な観点からも見てみよう、ということで、外国人向けの日本語能力検定試験についても調べてみた。日本語能力検定試験は2010年に制度が変わっているのだが、2009年までの旧試験では語彙数の目安が示されていた、と http://ja.wikipedia.org/wiki/日本語能力試験 にある。
1級 10,000語程度 社会生活をする上で必要な、総合的な日本語能力
2級 6,000語程度 一般的なことがらについて、会話ができ、読み書きできる能力
3級 1,500語程度 日常生活に役立つ会話ができ、簡単な文章が読み書きできる能力
4級 800語程度 簡単な会話ができ、平易な文、又は短い文章が読み書きできる能力
2010年からは「*級」に代えて N1, N2, N3, N4, N5 と呼ぶように変わった。
N1/2/4/5がそれぞれ旧1/2/3/4級に相当し、旧2級と3級の間にN3を新設したとのこと。新制度では語彙数の目安が出されていないが、N3以外はおおむね上記が目安になると考えてよいのだろう。
「日本語単語スピードマスター」という単語集シリーズがある。N1/2/3/4・5向けに4冊あり、単語数は下記のとおり:
N1向け 2800語
N2向け 2500語
N3向け 2400語
N4,5向け 1800語
下から累積をとっていくと、ほぼ上の数字に近い。このことからも、大体合ってると考えてよさそうだ。
大きな書店に行けば、試験用問題集が置いてある。その問題を見てみると、N5はやはり一見して漢字が少なく、文型も限られたものしか使っていなくて、小学校低学年向けのような印象を受ける。N4になるとだいぶ漢字が増え、一見するとかなりまともに見える。ただよく見るとやはり使用する表現が限られているのがわかる感じ。N3になると、ふりがなが振られている点を除けばほぼまっとうな文章に見える。
次に、単語の「カバー率」を考えてみる。カバー率とは、日本語の文章(コーパス)をとってきて、上位N語の出現頻度を指すとする。
こんな記事 がある。これによるとカバー率は
1000語 60.5%
2000語 70.0%
3000語 75.3%
5000語 81.7%
原典はあたってないので意味する正確なところはわからない(単語なのか、形態素なのか。機能語を含むのか、等)。まあ目安にはなるだろう。
ウェブ記事を鵜呑みにするのは心配なので、少し実データでも検証したい。そこで、「日本語ウェブコーパス 2010」で検証してみる。これは矢田 晋氏がウェブ(1億ページ!)から収集したコーパス。生テキストは69GBありなかなか扱いづらいが、形態素Ngramもついている。ここでは単純に、形態素1gramを見てみる。
http://dist.s-yata.jp/corpus/nwc2010/ngrams/word/over9/1gms/1gm-0000.xz
XZutilsというあまり一般的でない(?)圧縮ツールを使っているのでご注意。ツールのリンクもついていてダウンロードできる。
各行は「単語(形態素) 出現回数」の形式なので、 sort --key=2 とかで回数でソートする。そうすると先頭の方はこんな感じになる:
<S> 5634102353
</S> 5634102353
の 4124326304
、 3080970756
に 2241587693
は 1972344221
を 1947665622
て 1882399603
:
ここから記号の行を除き、先頭N行の回数の和を数えればカバー率が計算できる。結果:
#words count %
1000 n=50038713048 67.2
2000 n=55532769489 74.6
3000 n=58676956041 78.8
5000 n=62396742459 83.8
6000 n=63607914650 85.4
10000 n=66672728062 89.6
12000 n=67643928325 90.9
20000 n=69964954129 94.0
50000 n=72652408894 97.6
100000 n=73618811012 98.9
4027873 n=74410612034 100.0
注:
・除いた記号行は全部ではなく、先頭いくつかを手で除いただけである。
・「単語」でなく「形態素」なので、動詞や形容詞の活用形はそれぞれひとつとカウントされる。
・形態素解析はmecab+ipadicを使っているとのこと。mecabの解析は、かなり精度はいいもののやはり時々間違いがある。定量的な数字を持っていないが、分ち書きに関しては誤り2-3%といったところだろうか?その程度は誤差を含むと思ってほしい。