SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

はてなエンジニア直伝! はてなのサービスを取り巻く先端技術トピック

検索技術と自然言語処理技術を駆使して話題のトピックをひとまとめ ~はてなブックマークのトピックページの作り方

はてなエンジニア直伝! はてなのサービスを取り巻く先端技術トピック 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

重要記事タイトル選定

 獲得した重要語を利用して、トピックタイトル生成に利用する記事タイトルを選択します。重要語のスコアを利用して、各記事タイトルに含まれる重要語のスコアの和を計算します。そして、スコアが最大となる記事タイトルを選択します。ただし、最大のスコアが同じ記事が複数ある場合は単語数が少ないほうのタイトルを選択します。

 以下の5つの記事タイトルについて考えます。重要語部分を太字にしています。この例では、スイスフラン、上限、撤廃、急騰のすべての重要語を含む3つ目の記事タイトルを選択します。

  • スイスフラン、対ユーロで一時30%上昇 フラン上限廃止で | マネーニュース | 株式市場 | Reuters
  • スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ
  • スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞
  • 投資家に巨額の損失 スイスフラン急騰の打撃 日本のFX業者らにも (産経新聞) - Yahoo!ニュース
  • スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters

文圧縮によるトピックタイトル抽出

 選択した記事タイトルから重要箇所を抜き出すことによりトピックタイトルを生成します。

 ある文(記事タイトル)から重要箇所(トピックタイトル)を抜き出すというのは、自然言語処理の文圧縮という要約技術の一種です。ただし、文を単なる単語列としてみなしてを圧縮しようとすると、文内の意味的なまとまりを捉えることができずに非文になったり、元の文の意味とは異なる圧縮文を作成してしまうリスクが高くなります。圧縮文の誤生成を避けるために、意味的なまとまりである文節やその修飾関係である係り受け関係を利用します。

 係り受け解析にはCaboChaを利用します。しかし、記事タイトルは一般的な文とは異なるため、単純に係り受け解析をすると、ほとんどの場合、誤解析されてしまうので、解析しやすいように前処理をします。

 記事タイトルには通常の文とは異なる2つの特徴があります。1つ目はサイト名や媒体名が含まれていること、2つ目は句読点以外の記号で文境界が表現される場合があることです。以下の記事タイトルでは、日本経済新聞という媒体名が含まれ、全角スペースが文境界相当として使われています。

  • スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞

 これらは係り受け解析の誤りの原因になるため、事前に処理します。

サイト名、媒体名の除去

 サイト名はトピックタイトル生成には不要なため、これらを除去します。サイト名を除去するには記事タイトル中からこれらを同定する必要がありますが、記事タイトルのどこにどのような形でサイト名が書かれているかはサイトによって異なります。そこで、同じサイトの別の記事集合を利用します。同じサイトの記事集合を取得し、記事タイトルの共通部分をサイト名とみなして抽出し、それを利用して元の記事タイトルからサイト名を除去します。上記の例の場合、http://www.nikkei.com/ の記事集合から、記事タイトルの共通部分を取得すると「 :日本経済新聞」が得られるので、これを記事タイトルから除去します。

文境界同定

 記事タイトルでは、文境界を表す記号として句点だけでなく、全角スペースやコロンなどが利用されることがあります。しかし、全角スペースやコロンなどは通常の文では文境界にならないため、そのままだと文境界の判定に失敗し、係り受け解析が正しくできません。そこで、全角スペースやコロンなどの文境界相当を表す記号で強制的に文境界を区切ります。

 以上の前処理をした後に、係り受け解析を行い、係り受け関係を利用して重要箇所を抜き出すことによりトピックタイトルを生成します。重要語を含む先頭文節から末尾の文節までを重要箇所として取得します。ただし、それだけでは非文になってしまうので、いくつか非文を避けるためのヒューリスティックなルールを用意しています。以下に一部のルールを示します。

文節末尾が助詞-格助詞-一般の場合、係り先文節を取得

 文節末尾が助詞の場合、係り先文節がないと非文となることが多いため、係り先の文節も重要箇所として抽出します。

動詞を含む文節の場合、係り元文節を取得

 文節に動詞が含まれる場合、係り元の文節がないと、文意を壊してしまう可能性があります。そのため、係り元文節に名詞を含む文節を重要箇所として抽出します。

括弧内は圧縮しない

 括弧内は人のせりふなど、重要な情報が扱われていることが多いため、これを圧縮してしまうと元の文意とは異なるタイトルになってしまう可能性があります。そのため、重要語を含む括弧内はすべて重要箇所として抽出します。

 例の記事タイトルに係り受け解析を行うと、図の係り受け解析結果が得られます。スラッシュは文節境界、矢印は係り受け関係、赤字の単語は重要語であることを表しています。重要語を含む文節を抽出すると、「スイスフラン上限撤廃、通貨急騰で」が得られます。ここで、文節末尾は助詞-格助詞-一般のため、非文を回避するためのルールを適用し、その係り先文節である「波紋」も抽出します。その結果、図で赤枠で囲まれた部分である「スイスフラン上限撤廃、通貨急騰で波紋」がトピックタイトルとして抽出されます。

係り受け解析結果例
係り受け解析結果例

まとめ

 本稿では、はてなブックマークのトピックページの作り方として、トピックの生成、および、トピックタイトルの生成について紹介しました。トピック生成はElasticsearchを活用し、トピックキーワード集合の生成と、トピックキーワードに関連する記事集合を取得することにより実現しました。トピックタイトルは自然言語処理の要約技術の知見を活かし、係り受け関係を考慮して、記事タイトルを文圧縮することにより生成しました。

 今回の手法で生成されるトピックは大きなトピックではなく比較的小さなサブトピック相当となっています。大きなトピックについてはサブトピックをうまくマージすることで生成可能なので、今後取り組みたいと考えています。

参考資料

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
はてなエンジニア直伝! はてなのサービスを取り巻く先端技術トピック連載記事一覧
この記事の著者

小澤 俊介(株式会社はてな)(コザワ シュンスケ)

 株式会社はてな アプリケーションエンジニア web:skozawa's home blog:skozawa's blog twitter:@5kozawa

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8767 2015/07/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング