Apitore blog

Apitoreを運営していた元起業家のブログ

【API】文章のTFIDFを計算するAPIを公開しました

はじめに

文章のタグ付けAPIを公開しました。TFIDFで文章の代表語を計算します。文章に適切なタグを付ければ、あとから文章を探すときや特定の分野の文章をまとめて検索するときに役立ちます。TFIDFはオーソドックスな手法ですが、大きく外れることもない安定した手法です。 amarec (20161225-071016)

API

サンプルコード

使ってみる

まずはアルゴリズムについて解説します。現状は入力文をkuromoji APIで形態素解析し、名詞、動詞、形容詞、未知語のみを代表語の候補とします。また、いくつかストップ品詞細分類とストップワードも設定しています。続いて、代表語の候補に対してTFIDFを計算します。DFはこちらのAPIを使いました。WikipediaのTFIDFの説明と少し違うのは、TF=単語出現数、としているところです。全体の単語数で割っていない理由は、割らなくても各単語のTFIDF値の大小が変わらないからです。また、IDFについては、通常は母体の文書集合(今回はwikipedia)で一度も出現していない場合はゼロにすることもあるようですが、今回はIDF=log10(N/(DF+1))としました。kuromoji APIで取れる範囲に限定しますが、これで新語を代表語にできます。 前置きが長くなりましたが、さっそく試してみます。wikipediaにあったミーアキャットの生態の部分の記事を入力しました。

"input": "石や岩の多い荒地やサバンナに生息する[2]。昼行性[1]。地中に直径10センチメートルの巣穴を掘って生活する[2]。ペアもしくは家族群で生活し、複数の家族群が一緒に生活することもある[2]。 食性は雑食で、昆虫、クモ、サソリ、多足類、爬虫類、鳥類、小型哺乳類、植物の茎、芽、根、果実などを食べる[2]。 繁殖形態は胎生。10-翌4月に交尾を行い、妊娠期間は11週間[2]。1回に2-5頭の幼獣を産む[2]。授乳期間は4-6週間。幼獣は生後12-14日で開眼し、生後10週間で独立する[2]。生後9か月で性成熟する[2]。",
"num": "10",
"labels": [
  {
    "label": "生後",
    "score": 7.871644293159014
  },
  {
    "label": "幼",
    "score": 5.053870786903691
  },
  {
    "label": "生活",
    "score": 3.7142763014801994
  },
  {
    "label": "昼行性",
    "score": 3.4902047977187793
  },
  {
    "label": "胎生",
    "score": 3.2214613487975834
  },
  {
    "label": "授乳",
    "score": 3.1672295506932033
  },
  {
    "label": "サソリ",
    "score": 3.126982761930386
  },
  {
    "label": "荒地",
    "score": 3.1167769389241484
  },
  {
    "label": "開眼",
    "score": 3.0751296102629357
  },
  {
    "label": "掘る",
    "score": 3.0288124290031657
  }
]

おわりに

TFIDFでは、「僕」や「犬」などの一般的な単語の重要度は低く、「最小二乗法」や「きゃりーぱみゅぱみゅ」などの特徴的な単語の重要度が高くなります。一方で、文章内の単語の出現数も考慮するモデルになっているので、一般的な単語でも文章内で繰り返し用いられればちゃんと重要度が高くなります。文章の代表語を計算できるオーソドックスな手法なので、汎用的に使うことができます。一方で、特定用途に特化する場合は性能が不足しがちで、そういう場合は機械学習を使う方がよいでしょう。