• Rapid Automatic Keyword Extraction (RAKE)

  • Automatic Keyword Extraction from Individual Documents

  • ストップワードをデリミタとして刻んだ後、その断片内での共起を数える

    • 断片=キーフレーズ候補
  • 単語スコアを計算

    • 位数を出現頻度で割ったもの
      • 共起グラフの位数を使うのはTextRank以前のグラフ型キーワード抽出でも使われていた手法
    • 「長い断片の中で出現する傾向の高い単語」のスコアが高くなる
  • 断片のスコアを計算

    • 含む単語のスコアの和
      • 和でいいのか?
    • これは「意味の量」の尺度
      • もっとシンプルな方法
        • 一トークンが持つ情報量を1とする
        • これは長いキーフレーズを評価することになる
      • トークンの位数を頻度で割ったものを使ってる
        • これは意味が明瞭でない
        • オーバーラップがない場合、単純にキーワード候補のトークン長の二乗がスコアになる
        • 単に、位数も頻度も、頻度が高くなるほど大きくなる値であって、割ったことによってその効果がキャンセルされただけ説
      • IDFとかを使う手も考えられる
      • 英語圏の人にはない発想だが、漢字は一文字あたりの情報量が多く、ひらがなは少ない、という考え方もできる
        • RAKE実験1
        • ひらがなだけで構成されるキーワードは少ないのでは?
        • Wikipediaのタイトルを分析?
          • カッコ書きは取り除いた方が良い
  • 2つのキーワードが同じ順で2回以上出現した場合、間のストップワードも含んだキーフレーズが作られる

    • コピペ文字列があった場合にそれが選ばれてしまう?
    • 断片のスコアが要素のスコアの和であることが、スコア0のストップワードを挟んでもスコア変わらない要因になっている
      • 本当はストップワードの数によってスコアが下がるべきなのでは
  • RAKEのストップリスト生成

    • なかなか良さげ
  • 例えば「エンジニアの知的生産術」について

    • 「の」がストップワードなのでまず刻まれてしまう
    • 「エンジニア」は一単語なのでスコア低くなる
      • 「長いものほど重視するバイアス」って意味では位数である必要性はあまりないので文字列長にしても良いかも知れない
  • このキーワード抽出と、もっと大きい単位で情報を切り出す「付箋に分割する」とは、多分パラメータの違いで基本的に同じ構造のアルゴリズムで実現できそう

  • 機械学習の時の内部表現としてはSentencePieceの方が性能が良いようだが、人間の目に触れる出力としてはMeCabで辞書を使って刻んだ方が納得感のある単語境界になって良さげ RAKE実験1

    • MeCabを使うことになったので品詞の情報などを使うことの障壁が低い
    • MeCabのデメリットとしてトークンだけでは元の文字列に戻せない。
      • トークンの間の空白文字の情報が失われるため。
      • これに関してはトークンを小文字に揃えてしまって戻せないとかも根っこは同じ。
      • 動詞と名詞を束ねたりすることも考えると、見映えの情報と意味を表現する情報を別途管理すべき。
      • 意味の表現形式としてはdoc2vec的なベクトル表現が良いかもしれない
  • RAKEアルゴリズムは高々1000ページのWikipediaからストップリストを生成して使っている。

    • 多くのディープラーニング的手法が巨大なデータを要求して、アノテーションコストがハードルになって個別企業のドメインに合わせた学習が難しくなるのだが、RAKEならできるかもしれない
    • RAKEは候補集合を作るのに0/1のストップリストを使って、そのあとのキーワードらしさのスコアづけにはほとんど単語数ぐらいしか使っていない、ここに大いに工夫の余地があるしMeCabを使うことで品詞情報が使える

Keyword Extraction キーワード抽出