Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015

12,053 views

Published on

YAPC::Asia Tokyo 2015の前夜祭で発表した「はてなブックマークのトピックページの裏側」の資料

Published in: Technology
  • Be the first to comment

はてなブックマークのトピックページの裏側 in YAPC::Asia Tokyo 2015

  1. 1. id:skozawa 株式会社はてな YAPC::Asia Tokyo 2015 はてなブックマークの トピックページの裏側
  2. 2. 自己紹介 id:skozawa / @5kozawa 2007-2012 大学院で自然言語処理の研究に従事 2012 株式会社はてな入社 アプリケーションエンジニア ・ブックマークチーム ・アドテクチーム 2
  3. 3.   はてなブックマーク 3
  4. 4. トピックページ (http://b.hatena.ne.jp/topiclist) 関連性の高い話題の記事をまとめたページ 4 検索技術と自然言語処理技術を駆使して話題のトピックをひ とまとめ ~はてなブックマークのトピックページの作り方 http://codezine.jp/article/detail/8767
  5. 5. 開発の目的/経緯 ● インターネットで盛り上がってる話題を知りたい ● ホットエントリで同じ話題のエントリが重複するのを 避けたい 5 この機能は、これまでも多くのエンジニアが挑戦しながら、さまざま な要因により実現できていませんでした。 ref. http://bookmark.hatenastaff.com/entry/2015/02/05/190331
  6. 6. トピックページ 6 トピックタイトル トピックに 関連する記事
  7. 7. トピックページ生成チャレンジの歴史 2009 タグを利用したクラスタリング 2009 キーワードを利用したクラスタリング 2010 手動でのトピック生成 2011 キーワードTF-IDFを利用したクラスタリング タイトル生成?? 2012.4 skozawa入社 2014.10 ブックマークチームjoin 2015 今回 7
  8. 8. アプローチ ● トピック生成 ○ Elasticsearchを利用 ■ 出現割合を利用したトピックキーワード生成 ■ キーワードに関連する記事の取得 ● トピックタイトル生成 ○ 自然言語処理の要約技術を利用したタイトル生成 8
  9. 9. トピック生成
  10. 10. トピックとは? トピック キーワードの集合から表現 官邸、首相、ドローン、落下、カメラ 阿久津、AWAKE、将棋、棋士、投了 10 北陸、新幹線、金沢、開業、長野
  11. 11. トピック生成の流れ 1. トピックキーワードを生成 Elasticsearch Significant Terms Aggregation 2. トピックキーワードに関連する記事の収集 Elasticsearch Function Score Query 11 官邸、首相、ドローン、落下、カメラ ● 首相官邸にドローン落下 けが人はなし :日本経済新聞 ● 首相官邸の屋上にドローン落下、微量の放射線を検出| Reuters
  12. 12. Significant Terms Aggregation 重要語を取得できる機能 トピックキーワードの生成に利用 期間を区切って記事のタイトルや本文を対象に実行 話題のキーワードが取得できる スコア計算手法 JLH score, mutual information, Chi square, google normalized distance, Percentage 12 https://www.elastic.co/guide/en/elasticsearch/reference/1.6/search-aggregations-bucket- significantterms-aggregation.html
  13. 13. Significant Terms Aggregation "aggregations": { "sample": { "buckets": [ { "key": "シャリル", "doc_count": 55, "score": 2.502, "bg_count": 400 }, { "key": "スイスフラン", "doc_count": 57, "score": 1.802, "bg_count": 596 }, { "key": "ようじ", "doc_count": 48, "score": 1.511, "bg_count": 504 }, ... ] } } { “aggs”: { “sample”: { “significant_terms” : { “field”: “title”, “size”: 5 } } } } Request Response key: キーワード doc_count: 指定範囲でのキーワードの頻度 score: キーワードのスコア bg_count: 文書全体でのキーワードの頻度 13
  14. 14. JLH 全体と指定範囲の出現割合を利用 JLH = 絶対割合変化 × 相対割合変化 絶対割合変化 = 指定範囲での出現割合 - 全体での出現割合 相対割合変化 = 指定範囲での出現割合 / 全体での出現割合 14 指定範囲で頻出する単語のスコアが高くなる
  15. 15. { “query”: { “filtered”: { “filter”: { “bool”: { “must”: [ { “range”: { “created”: { “from”: “2015-01-13T00:00:00+09:00”, “to”: “2015-01-20T00:00:00+09:00” } } } ] } } } }, “aggs”: { “sample”: { “significant_terms” : { “field”: “title”, “size”: 5, “jlh”: {} }, “aggs”: { “sample2”: { “significant_terms”: { “field”: “title”, “size”: 5, “jlh”: {} } } } } } } Request 2015年1月13日 ~ 2015年1月20日 significant_termsを2層で利用 15
  16. 16. "aggregations": { "sample": { "buckets": [ { "key": "シャルリ", "score": 2.502, "sample2": { "buckets": [ { "key": "シャルリ", "score": 129926.04 }, { "key": "エブド", "score": 99737.62 }, { "key": "赦す", "score": 5522.22 }, { "key": "ムハンマド", "score": 4729.32 }, { "key": "風刺", "score": 4172.57 } ] } }, …, { "key": "スイスフラン", "score": 1.802, "sample2": { "buckets": [ { "key": "スイスフラン", "score": 89385.22 }, { "key": "急騰", "score": 1992.90 }, { "key": "上限", "score": 1391.56 }, { "key": "損失", "score": 1118.69 }, { "key": "暴騰", "score": 766.13 } ] } }, …, { "key": "ようじ", "score": 1.511, "sample2": { "buckets": [ { "key": "ようじ", "score": 80424.75 }, { "key": "つま", "score": 26207.62 }, { "key": "混入", "score": 4192.10 }, { "key": "スナック菓子", "score": 2759.62 }, { "key": "手配", "score": 2128.30 } ] } } ] } } Response 16
  17. 17. "aggregations": { "sample": { "buckets": [ { "key": "シャルリ", "score": 2.502, "sample2": { "buckets": [ { "key": "シャルリ", "score": 129926.04 }, { "key": "エブド", "score": 99737.62 }, { "key": "赦す", "score": 5522.22 }, { "key": "ムハンマド", "score": 4729.32 }, { "key": "風刺", "score": 4172.57 } ] } }, …, { "key": "スイスフラン", "score": 1.802, "sample2": { "buckets": [ { "key": "スイスフラン", "score": 89385.22 }, { "key": "急騰", "score": 1992.90 }, { "key": "上限", "score": 1391.56 }, { "key": "損失", "score": 1118.69 }, { "key": "暴騰", "score": 766.13 } ] } }, …, { "key": "ようじ", "score": 1.511, "sample2": { "buckets": [ { "key": "ようじ", "score": 80424.75 }, { "key": "つま", "score": 26207.62 }, { "key": "混入", "score": 4192.10 }, { "key": "スナック菓子", "score": 2759.62 }, { "key": "手配", "score": 2128.30 } ] } } ] } } Response トピックキーワード 17 シャルリ、エブド、赦す、ムハンマド、風刺 スイスフラン、急騰、上限、損失、暴騰 ようじ、つま、混入、スナック菓子、手配
  18. 18. トピックキーワードに関する記事の取得 生成されたトピックの単語が含まれていればよい? トピックと関連の強い単語が含まれることが重要 キーワードのスコアを利用 18 シャルリ、エブド、赦す、ムハンマド、風刺 "buckets": [ { "key": "シャルリ", "score": 129926.04 }, { "key": "エブド", "score": 99737.62 }, { "key": "赦す", "score": 5522.22 }, { "key": "ムハンマド", "score": 4729.32 }, { "key": "風刺", "score": 4172.57 } ] > 0.8 記事に含まれるトピックキーワードのスコアの和 トピックキーワードのスコアの和
  19. 19. トピックに属するエントリ取得 Elasticsearch function score query を利用 キーワードのスコアの和でソート 19 “function_score”: { “functions”: [ { “script_score”: { “params”: { “field”: “title”, “words”: [ "シャルリ", "エブド", "赦す", "ムハンマド", "風刺" ], “scores”: [ 129926.04, 99737.62, 5522.23, 4729.32, 4172.57 ] }, “lang”: “groovy”, “script”: “def score=0;for(i in 0..4) { if (_index[field][words[i]].tf() > 0) { score += scores [i]}; scores;” } } ] } トピックキーワードのスコアの和を計算
  20. 20. 20
  21. 21. トピックタイトル生成
  22. 22. タイトル生成とは 自然言語処理におけるタイトル生成 要約技術の一種 実際には人間でも、複数記事のタイトル、及び、 本文からうまくタイトルを作ることは難しい 要約に重要な部分とは? 各記事のタイトルと本文1文目 22
  23. 23. トピックタイトルの生成 23 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン、対ユーロで一時30%上昇 フラン上限廃止で | マネーニュース | 株式 市場 | Reuters ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン騒動で大儲けした人と大損した人の阿鼻叫喚の叫びまとめ #fx - NAVER まとめ ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● 投資家に巨額の損失 スイスフラン急騰の打撃 日本のFX業者らにも (産経新聞) - Yahoo!ニュース ● スイスフランの介入停止問題に関するまとめ - 株式、FXのまとめ解説ブログ
  24. 24. トピックタイトルの生成 24 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン、対ユーロで一時30%上昇 フラン上限廃止で | マネーニュース | 株式 市場 | Reuters ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン騒動で大儲けした人と大損した人の阿鼻叫喚の叫びまとめ #fx - NAVER まとめ ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● 投資家に巨額の損失 スイスフラン急騰の打撃 日本のFX業者らにも (産経新聞) - Yahoo!ニュース ● スイスフランの介入停止問題に関するまとめ - 株式、FXのまとめ解説ブログ
  25. 25. トピックタイトルどうやって作る? タイトルはキーワードの羅列でいい? キーワードをいい感じに並び替え? 並び替え考えるのも意外と大変 25 スイス、フラン、上限撤廃、急騰、介入
  26. 26. トピックタイトルどうやって作る? 前提 ・ トピックに含まれる記事は同じ話題 ・ 各記事のタイトルはある程度しっかりしている ・ いずれかの記事を使うとうまくいく可能性が高い 26 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport
  27. 27. トピックタイトルどうやって作る? 前提 ・ トピックに含まれる記事は同じ話題 ・ 各記事のタイトルはある程度しっかりしている ・ いずれかの記事を使うとうまくいく可能性が高い 27 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport 重要文(タイトル)を使えばよい 単語の順序を考えなくていい 単文の要約タスクにできる
  28. 28. トピックタイトル生成の流れ 1. 重要語を抽出 2. 重要文を選択 3. 文圧縮によるタイトル生成 28
  29. 29. 重要語抽出 タイトル生成に必要な単語を取得 Elasticsearch Significant Terms Aggregation トピックに属するエントリのタイトルを対象 29 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport スイスフラン、急騰、上限、撤廃
  30. 30. 重要文抽出 重要語を利用して重要文を選択 ● 各記事のタイトルのスコアを計算 ○ 含まれる重要語のスコアの合計 ● スコアが最大の記事のタイトルを取得 ○ スコアが同じ場合は短い方 30 ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters
  31. 31. 文圧縮 取得したタイトルの必要な部分のみを取得 どうやって? 先頭の単語から末尾の単語まで? 意味的な保証がされにくい 31 スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批 判  :日本経済新聞 スイスフラン上限撤廃、通貨急騰 スイスフラン上限撤廃、通貨急騰で波紋
  32. 32. 係り受け関係に基づく文圧縮 係り受け解析を利用 (Cabocha) ● 重要語を含む先頭文節から末尾の文節まで ● 非文を避けるためヒューリスティクなルールを用意 文節末尾が「助詞-格助詞-一般」なら係り先を取得など ● 前処理が必要 サイト名除去、「 」や「:」で強制的に文節を区切る 32 スイスフラン上限撤廃、 / 通貨急騰で / 波紋 時計大手首脳が / 批判 / :日本経済新聞
  33. 33. 33
  34. 34. 短いトピックタイトルの生成 トピックタイトルを短くしたい ● アプリなどでは表示できる文字数に 制限がある ● 全角10文字以下にしたい 生成の流れ ● 重要語の数を減らしながら要約 ● 指定した文字数制限を満たせば終了 ● 条件を満たすタイトルがない場合は 文字数を増やして再実行 34
  35. 35. 文字数制限ありトピックタイトル生成 35 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン、対ユーロで一時30%上昇 フラン上限廃止で | マネーニュース | 株式 市場 | Reuters ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン騒動で大儲けした人と大損した人の阿鼻叫喚の叫びまとめ #fx - NAVER まとめ ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● 投資家に巨額の損失 スイスフラン急騰の打撃 日本のFX業者らにも (産経新聞) - Yahoo!ニュース ● スイスフランの介入停止問題に関するまとめ - 株式、FXのまとめ解説ブログ スイスフラン、急騰、上限、撤廃
  36. 36. 文字数制限ありトピックタイトル生成 36 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン、対ユーロで一時30%上昇 フラン上限廃止で | マネーニュース | 株式 市場 | Reuters ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン騒動で大儲けした人と大損した人の阿鼻叫喚の叫びまとめ #fx - NAVER まとめ ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● 投資家に巨額の損失 スイスフラン急騰の打撃 日本のFX業者らにも (産経新聞) - Yahoo!ニュース ● スイスフランの介入停止問題に関するまとめ - 株式、FXのまとめ解説ブログ スイスフラン、急騰、上限
  37. 37. 文字数制限ありトピックタイトル生成 37 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン、対ユーロで一時30%上昇 フラン上限廃止で | マネーニュース | 株式 市場 | Reuters ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン騒動で大儲けした人と大損した人の阿鼻叫喚の叫びまとめ #fx - NAVER まとめ ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● 投資家に巨額の損失 スイスフラン急騰の打撃 日本のFX業者らにも (産経新聞) - Yahoo!ニュース ● スイスフランの介入停止問題に関するまとめ - 株式、FXのまとめ解説ブログ スイスフラン、急騰
  38. 38. 文字数制限ありトピックタイトル生成 38 ● スイス中銀、スイスフラン高抑制の無制限介入終了 :主要金融ニュース :マーケッ ト :日本経済新聞 ● スイスフラン、対ユーロで一時30%上昇 フラン上限廃止で | マネーニュース | 株式 市場 | Reuters ● スイスフラン突然の大暴騰!取引が成立しない状況に - Togetterまとめ ● スイスフラン騒動で大儲けした人と大損した人の阿鼻叫喚の叫びまとめ #fx - NAVER まとめ ● スイス中銀がフラン上限撤廃・中銀預金金利一段のマイナス:識者はこうみる | Reuters ● スイスフラン上限撤廃、通貨急騰で波紋 時計大手首脳が批判  :日本経済新聞 ● スイスフランショックで大儲けした人と大損した人。ファイナンススタジアムより抜粋。 - マネー報道 MoneyReport ● スイスフラン急騰、FX業者の経営に打撃  :日本経済新聞 ● 投資家に巨額の損失 スイスフラン急騰の打撃 日本のFX業者らにも (産経新聞) - Yahoo!ニュース ● スイスフランの介入停止問題に関するまとめ - 株式、FXのまとめ解説ブログ スイスフラン、急騰
  39. 39. まとめ
  40. 40. まとめ ブックマークに蓄積された過去10年のデータを 用いてトピック機能を実装 検索技術(Elasticsearch)と 自然言語処理技術の導入により実現 40
  41. 41. YAPC::Asia Topics ● YAPC::Asia 2006 Tokyo ● YAPC::Asia 2006 Tokyo 1日目 箇条書き ● YAPC::Asia 2007 ● Journal of acme YAPC::Asia 2008 Day 1 ● YAPC::Asia 2009 ● YAPC::Asia Tokyo 2010前夜祭の日です ● YAPC::Asia 2010スライドまとめ ● YAPC::Asia Tokyo 2011の1日目です ● YAPC :Asia 2012にフル参加してLTもしてきた #yapcasia ● YAPC::Asia 2013でPerlと結合テストについてはなします #yapcasia ● YAPC::Asia Tokyo 2013でトークしてきました ● YAPC::Asia 2014 1日目の感想とノート #yapcasia 編集後記 ● YAPC::Asia Tokyo 2015に応募した 41
  42. 42. 「YAPC::Asia Tokyo 2015」 トピックをお楽しみに!   感想ははてなブログに! 42

×