以前 TF-IDF について調べた。
TF-IDF ってのを使うと単語の重要度がわかるよって聞いたので調べた | ごみばこいん Blog
まったく違うアプローチをしている重要語を抽出するようなものがないかなーと調べてたら FLR というものに行き着いた。
元の論文
「出現頻度と連接頻度に基づく専門用語抽出」という論文で語られている。
機関リポジトリ内のページ UTokyo Repository - 東京大学学術機関リポジトリ
関連サイト 専門用語(キーワード)自動抽出システム”のページ
ここで実際どうなるのよ、が試せるっぽいのと、ライブラリが配布されているので組み込むのもまあまあ容易に行けそう。
FLR のものすごいざっくりした理解
- コンテンツにおける専門用語って名詞が連続すること多いよね
- 形態素解析の結果って名詞かどうかわかるよね
- → できるじゃん!!
FLR の仕組み
- 単名詞バイグラム、LNnとRNnのリストを作る
- [LNn N](#Ln)
- [N RNn](#Rn)
- 例)トライグラム 統計、トライグラム、単語 トライグラム、クラス トライグラム、単語 トライグラム、トライグラム、トライグラム 抽出、単語 トライグラム 統計、トライグラム、文字 トライグラム
- LNn
- [単語 トライグラム](3)
- [クラス トライグラム](1)
- [文字 トライグラム](1)
- RNn
- [トライグラム 統計](2)
- [トライグラム 抽出](1)
- 単名詞スコア1 として、連接種類数 LDN(N)とRDN(N) を作る
- 種類の数なので、単語の出現頻度にはさほど影響されない
- 例)
- LDN(トライグラム) = 3
- RDN(トライグラム) = 2
- 単名詞スコア2 として、連接頻度 LN(N)とRN(N)を作る
- 単名詞バイグラムを特徴付けるものとして、全ての出現回数の合計を取る
- 例)
- LN(トライグラム) = 3 + 1 + 1 = 5
- RN(トライグラム) = 2 + 1 = 3
- 複合名詞スコア LR(CN) を作る
- 専門用語は複合名詞が多いが、その複合名詞の長さによって重要度はかわらない
- 単名詞Nに対し、左側スコアFL(N)、右側スコアFR(N)
- 単名詞スコア1 か 2 を利用する
- 複合名詞 CN = N1, N2, ... NL
- 複合名詞に含まれる各単名詞について FL, FR を計算し、相乗平均を取り、CNの長さLの逆数のべき乗を取ったものが LR(CN)
- LR(CN) = pow( GeometricMean( (FL(Ni) + 1) * (FR(Ni) + i) ) , 1/2L)
- 例)連接頻度をスコアとすると
- LR(トライグラム) = pow( (5+1) * (3+1), 1/2 ) = sqrt(6 * 4) ~= 4.90
- 出現回数を複合名詞スコアに加える FLR(CN)
- f(CN) = CNが単独で出現した頻度、他の複合名詞に含まれていないこと
- FLR(CN) = f(CN) * LR(CN)
- 例)連接頻度をスコアとすると
- FLR(トライグラム) = 3 * 4.90 = 14.70
まとめと感想
名詞に対して、よくでる連続した名詞がスコア高くなるような仕組みでスコアを付けて、それをピックアップできるものだった。 何かに特化した専門的なものを説明するようなコンテンツだとその節があると感じる。(例えばこの記事だと “名詞” は上位にピックアップされるんじゃないかな)
というか、最初に重要語が~みたいな話を書いたけど、「重要とは何か?」という考え方、指標、スコアを設ければそれで重要ってキメになるんだろうな。
- 出現回数「よく出る単語は重要だ!」
- TF-IDF「このドキュメントだけよく出るから重要だ!」
- FLR「この名詞はよくくっついて出るから重要だ!」
ちなみにこの論文では MC-value というものも提案されており、それはまた書く。