日本語テキストのLexical density測って遊んでみた

ちゃお。舞い降りんだよ。

今回はLexical density (語彙密度) の話をしたいと思います。結論からいうと微妙な結果だったのであまり期待しないでください。

内容語と機能語

Lexical densityの話の前にまずざっと内容語と機能語の説明をします。

語は、大きく分けると内容語と機能語の2つの種類に分けることができます。

内容語は、その語自体で独立して意味をなす語です。品詞でいうと名詞、形容詞、動詞、副詞が該当します。

一方で機能語は、文法的な機能をもっていますが、それ自体単独では意味をはたさなくて、他の語と一緒になってはじめて意味を表します。たとえば「な」という語だけでは何を言ってるのかさっぱりわかりませんが、「かわいそうな大人」といえば「かわいそう」と「大人」を結びつける役割を果たします。品詞でいうと助詞、助動詞、接続詞、連体詞、代名詞などが該当します。

Lexical density とは

{ \displaystyle
LexicalDensity = \frac{the \, number \, of \, contents \, words}{the \, number \, of \, words}
}

Lexical density とは文中に含まれる内容語の割合です。その名の通り、意味のある語が凝縮されている文ほど値が高くなります。

どんなところで使われてるか

Google Scholarで検索してざっとみると第2言語学習者とか子供の言語発達といったような教育的な分野で使われてるようです。

日本語のWebページを検索してみると、

Ure (1971) によると,書き言葉では内容語が40%以上占めるのに対し,話し言葉では40%以下と語彙の密度が低くなっている。発表語彙の発達した学習者は,一定量のテクストでより多くの情報を伝達することができるため,語彙の密度は高くなると考えられている。 from: 語彙の豊かさ - Kojima vlab

といったように言語能力の習熟度を測るのに用いられたり、

語彙密度は、文書作成のよい指標となります。一般的に、語彙密度は、科学論文では約 70%、会話では約 40% です。 from: 語彙密度 - Lexical Density - bekkou68の日記

と科学論文を書く際の指標として用いられているケースが見つかりました。

プチ実験

上の話は英語テキストを対象にしている話だと思われるので、日本語だとどういう傾向になるだろう? ということで日本語テキストの Lexical density を測って遊んでみました。

データ

科学論文として言語処理学会論文誌LaTeXコーパスから16稿を、ブログテキストとして解析済みブログコーパス (KNBC)を、あと何か全然別のジャンルとして魔法少女まどかマギカの台詞テキストを対象としました。まどマギの台詞はSupport Vector Machinesを用いた「魔法少女まどか☆マギカ」人物予測モデルのコードを使って抽出しました。

※ただしデータ間の品詞体系が揃ってなくて (KNBCはJUMANと同じ品詞体系、LaTeXコーパスまどマギIPA品詞体系)、LaTeXコーパスの前処理 (本文抽出) はあまり丁寧にやってないです。

結果

以降まどマギデータをANIME、KNBCをBLOG、LaTeXコーパスをPAPERと称します。

統計量

f:id:yukinoi:20151230023951p:plain

ANIME BLOG PAPER
count 2367 4186 2616
mean 0.296 0.464 0.408
std 0.16 0.124 0.085
min 0 0 0
25% 0.222 0.4 0.357
50% 0.307 0.473 0.413
75% 0.375 0.533 0.465
max 1 1 0.714

ANIMEだとLexical densityの値が低めでばらつきが大きい、 PAPERとBLOGはANIMEよりスコアが少し高くてばらつきは少し小さいという結果が出ました。

しかし、上にあげたような 科学論文では約 70%、会話では約 40% という英語のようなはっきりとした結果はでませんでした。

スコアが高い文と低い文

つづいてスコアの高い文と低い文でどういう傾向があるか見てみましょう。

ANIMEでスコアが高かった文
text lexical density
たぶん 1
まどか 1
大丈夫 1
すご~い 1
違う 1

文というより1語。

ANIMEでスコアが低かった文
text lexical density
えっ、あなたは… 0
え、あ、うん 0
はい、これ 0
ありがとう 0
え…? 0

文脈によってどうとでもとらえられそうなので、チャットbotが適当な返事返すときに使えそうかも。

ANIMEの中央値付近の文
text lexical density
この宇宙にどれだけの文明がひしめき合い、一瞬ごとにどれ程のエネルギーを消耗しているのか分かるかい? 0.296
5分でいい、ちゃんと耳を傾けてくれれば、正しいこと言ってるって誰にでもわかったはずなんだ 0.296
でも、それを非難できるとしたら、それは同じ魔法少女としての運命を背負った子だけじゃないかな 0.296
あっ、もしかしてゆうべのナイトメア退治、あたしたちが追い詰めた先で待ち構えてたのって、マミだけじゃなくて… 0.296
私にはできなくて、ほむらちゃんにできること、お願いしたいから 0.294

長い文が多い。

BLOGでスコアが高かった文
text lexical density
河原町ビブレ 1
2東山トンネル 1
絶望 1
1笠置観光ホテル 1
喫茶 1

文というより1語。

BLOGでスコアが低かった文
text lexical density
あり? 0
らしい 0
バイバイ 0
これは。 0
まぁ。。。 0

これも文というより1語。

BLOGの中央値付近の文
text lexical density
1km歩くのに1組のカップルが我々を追い越しただけである。 0.466
あるリーグ戦の試合の時、試合の途中、相手校が引いている時に、ある先輩が外でタバコを吸っていた。 0.466
お茶の流派で表千家とか裏千家って聞いたことあるだろう。 0.466
先週の土曜日に部活のコーチと友達とで銀閣寺にいった。 0.466
こいつがまた多機能なやつで、OSはWindowsMobile5.0というPDA用のもので、CPUはPXA270とこれまたパワフルなものが実装されていて、動画再生くらいは楽々こなしてしまう。 0.465

長めの文が多い。

PAPERでスコアが高かった文
text lexical density
最後に共起データついて述べる 0.714
調査対象要約文章を末尾に示す. 0.666
統語単位は24種類設定した. 0.666
日英機械翻訳システムALT-J/Eのシステム辞書と利用者辞書および単語意味属性の関係を図1に示す. 0.642
接続候補文と入力文のパターンはそれぞれの文の依存構造解析結果に対して適用される. 0.619
PAPERでスコアが低かった文
text lexical density
これらより以下のことが分かる. 0.125
そのため,「れば」が用いられていると考えられる. 0.133
これには例えば「かのような」のように幾つかの形態素から成り立っているみなせるものも含まれている. 0.142
その結果,以下のようなことが分かった. 0.166
これは,DCG形式の要請によるものである. 0.166

代名詞や連体詞を含んでいるものが多かった。

※スコア0の文は前処理ミスのせいだったのでここでは除外します

PAPERの中央値付近の文
text lexical density
その結果,例外的な規則も含めて文法を簡潔に記述できるため,文法規則がコンパクトとなるだけでなく(ルール数=374),規則の追加・修正が容易で拡張性の点で優れていることなど,本品詞体系および形態素処理用の文法記述形式の有効性を確認できた. 0.408
また,独立性については,次の例文によれば,上司に命令された行動を行なうように読め,「上司に言われて」の部分を削除すると独立に意志決定したように読める. 0.408
そこで,主題部分,非主題部分の各語に対して,文中での重要度に応じた得点を与え,また同一/同義の語/句の照合に対してもその一致度に応じた得点を定義した. 0.408
動詞の命令形が命令を表し,意志・推量形が意志・勧誘を表すものが,意志動詞であり,命令形が願望を表したり,意志・推量形が推量を表すのが無意志動詞である. 0.408
但し「冗談半分で言った」のように連用名詞が名詞の後に来る場合には複合名詞を形成する. 0.407

長めの文が多い。

わかったこと

Lexical densityは、

  • 論文とブログでは大きな差がなかった
  • 文の長さに左右されやすい (短い文は0か1かの極端な値になりがち)
  • 論文だと代名詞や連体詞を含んでいる文がスコア低くなりがち
  • くだけた文書 (ANIMEやBLOG) でスコアの低い文は汎用性が高そう (いろんな文脈で使えそうな文が多い)

おわりに

日本語テキストでのLexical densityについてざっくり話しました。 結果としては文の長さに大きく影響を受けてしまうので微妙な感じでしたが、くだけた文書でのスコアの低い文はチャットbotが適当に返事するときに使うような汎用性の高い文が集まったのが面白かったです。

元々のきっかけは、社内でACL2015のA Computational Approach to Automatic Prediction of Drunk-Textingという酔っ払いが書いたツイートなのか当てる論文が面白いねってことで日本語テキストで酔っ払いを当てようって流れで、特徴量の一つとして使えたら面白そうかなと思って調べたものです。(結局その時期に引越しが重なってしまって使わないまま終わってしまいましたが...)

ついでに注意した方がよいこと

Lexical densityはPOSタガーあるいは形態素解析器によってスコアが大きく変わってしまいます。

まず、なにをもって一形態素とするかという基準によってLexical densityの値が変わってしまいます。 たとえば「中華料理店」を「中華/料理/店」とすれば3語ですが、「中華料理/店」」とすれば2語、「中華料理店」とすれば1語となってしまいます。 そのため一貫した基準に基づいた辞書でないとぶれてしまいます。
(完全に一貫してる辞書なんてないので理想論ですが。。。)

それと、辞書の語彙が足らないと形態素解析器で失敗して変な結果になってしまってうまくいきません。