RAKE
Rapid Automatic Keyword Extraction (RAKE)
断片=キーフレーズ候補
単語スコアを計算
位数を出現頻度で割ったもの
共起グラフの位数を使うのはTextRank以前のグラフ型キーワード抽出でも使われていた手法
「長い断片の中で出現する傾向の高い単語」のスコアが高くなる
熟語を重視するバイアス
平均断片長と解釈していいかな
断片のスコアを計算
含む単語のスコアの和
和でいいのか?
これは「意味の量」の尺度
もっとシンプルな方法
一トークンが持つ情報量を1とする
これは長いキーフレーズを評価することになる
トークンの位数を頻度で割ったものを使ってる
これは意味が明瞭でない
オーバーラップがない場合、単純にキーワード候補のトークン長の二乗がスコアになる
単に、位数も頻度も、頻度が高くなるほど大きくなる値であって、割ったことによってその効果がキャンセルされただけ説
IDFとかを使う手も考えられる
英語圏の人にはない発想だが、漢字は一文字あたりの情報量が多く、ひらがなは少ない、という考え方もできる
ひらがなだけで構成されるキーワードは少ないのでは?
Wikipediaのタイトルを分析?
カッコ書きは取り除いた方が良い
2つのキーワードが同じ順で2回以上出現した場合、間のストップワードも含んだキーフレーズが作られる
コピペ文字列があった場合にそれが選ばれてしまう?
断片のスコアが要素のスコアの和であることが、スコア0のストップワードを挟んでもスコア変わらない要因になっている
本当はストップワードの数によってスコアが下がるべきなのでは
なかなか良さげ
例えば「エンジニアの知的生産術」について
「の」がストップワードなのでまず刻まれてしまう
「長いものほど重視するバイアス」って意味では位数である必要性はあまりないので文字列長にしても良いかも知れない
このキーワード抽出と、もっと大きい単位で情報を切り出す「付箋に分割する」とは、多分パラメータの違いで基本的に同じ構造のアルゴリズムで実現できそう
機械学習の時の内部表現としてはSentencePieceの方が性能が良いようだが、人間の目に触れる出力としてはMeCabで辞書を使って刻んだ方が納得感のある単語境界になって良さげ RAKE実験1 MeCabを使うことになったので品詞の情報などを使うことの障壁が低い
MeCabのデメリットとしてトークンだけでは元の文字列に戻せない。
トークンの間の空白文字の情報が失われるため。
これに関してはトークンを小文字に揃えてしまって戻せないとかも根っこは同じ。
動詞と名詞を束ねたりすることも考えると、見映えの情報と意味を表現する情報を別途管理すべき。
意味の表現形式としてはdoc2vec的なベクトル表現が良いかもしれない RAKEアルゴリズムは高々1000ページのWikipediaからストップリストを生成して使っている。
多くのディープラーニング的手法が巨大なデータを要求して、アノテーションコストがハードルになって個別企業のドメインに合わせた学習が難しくなるのだが、RAKEならできるかもしれない
RAKEは候補集合を作るのに0/1のストップリストを使って、そのあとのキーワードらしさのスコアづけにはほとんど単語数ぐらいしか使っていない、ここに大いに工夫の余地があるしMeCabを使うことで品詞情報が使える