SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Hivemallで
類似ニュース記事を抽出してみる
株式会社mediba
野崎幹男
2018/04/17(火)
第4回 Apache Hivemall Meetup
アジェンダ
❖ はじめに
➢ 自己紹介
➢ 会社の説明など
❖ 類似ニュース記事の抽出
❖ まとめ
自己紹介
■氏名 : 野崎幹男
■所属 : 株式会社 mediba システム本部 システム開発1部コミュニケーション開発 G
■担当業務 : バックエンドエンジニア
■趣味 : フットサル / サッカー観戦 / 登山
企業概要
■会社名 : 株式会社 mediba
■会社設立年月 : 2000年12月6日
■本社 : 渋谷
■従業員数 : 415名(※2017年1月現在)
■業務内容 :
- KDDIグループの一員
- モバイルデバイス向けのメディア事業など
- Mission「ヒトに"HAPPY"を」
medibaのサービスの紹介
担当サービス
■au Webポータル (https://auone.jp)
● auスマートフォンのデフォルトホームページ
● 2017/04にリニューアル
● ポータルサイト
○ ポータル
○ ニュース
○ 天気
○ 占い
○ 乗り換え
○ ..etc
● 技術要素
○ PHP, Golang, Node etc..
○ AWS, オンプレ etc..
○ MySQL, Elasticsearch, memcached etc..
○ Lambda, Docker etc..
medibaとTreasure Dataの関わり
■ トレジャーデータサービス by IDCFを利用
■ 複数サービスのアクセスログなどを収集している
■ 別部署PRJのプライベートDMP構築のため
■ これまで : とりあえずデータ収集 (した or している)
■ これから: データの分析・活用(していきたい)
サービスA サービスB サービスC
● 2017/04にリニューアル時にTDへのデータ収集開始
● 2017/04〜にて、簡単な集計を実施
○ Digdag / Redash / PostgreSQL
● 2017/12〜 Hivemall on TDを個人的に触ってみる
○ これがHivemallとの出会い
○ minhashを使ってユーザレコメンドしてみる
○ 弊社の技術ブログにまとめた (※1)
○ 油井さんの目に留まり、本日の発表に至る・・・
担当サービスとTreasure Dataの関わり
※1
https://ceblog.mediba.jp/post/170605665442/treasure-data%E3%81%AEhivemall%E3%81%A7%E9%A1%9E%E4%BC%BC%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%AC%E3%82%B3%E3%83%A1%
E3%83%B3%E3%83%89%E3%82%92%E8%A9%A6%E3%81%99
アジェンダ
❖ はじめに
➢ 自己紹介
➢ 会社の説明など
❖ 類似ニュース記事の抽出
❖ まとめ
発表内容
■ 発表ネタどうしよう・・
● Hivemallほとんど使っていないし、、分析業務しているわけでもない
し、、
● でも、ドキュメント見ると NLP系の関数があるぞ・・
■ 関連記事(リリース済み)
● ある記事に対してコンテンツベースで類似した記事を表示
● ElasticsearchのMLTQuery(More Like This Query)を利用
● ElasticsearchクラスタはEC2でクラスタ構築
↓
関連記事抽出をHivemall on TDのみで実現出来るか試して
みる・・!
[補足]MLT(More Like This)Queryについて
■処理概要
● index時
○ タイトルや本文のfieldにsimilarityを設定しておく (※1)
○ アルゴリズムが選べる
■ BM25 (ES5系以降でデフォルト)
■ Classic(TF/IDF) (ES2系でデフォルト)
※1 https://www.elastic.co/guide/en/elasticsearch/reference/6.2/similarity.html#similarity
index時
query時
[補足]MLT(More Like This)Queryについて
■処理概要
● query時
○ 記事表示時にMLT Queryを投げる
■ 単語長, 文書長などに関するパラメータが設定できる
○ score順に記事IDのリストが返却される
※1 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-mlt-query.html
index時
query時
[補足]tf-idfとBM25について
● tf-idf
○ tf (term frequency) : 単語出現頻度
■ ある単語Tiの文書Dj中の重み
■ TF (i,j) = (文書Djにおける単語Tiの出現回数) / 文書Djの総単語数
■ 文書中において出現頻度の高い単語は重要
○ idf(inverse Document Frequeyncy) : 逆文書頻度
■ n : 単語Tiが出現する文書数 / N: 文書の総数
■ IDF(i) = log(N/n)
■ 多くの文書において出現頻度の高い単語は重要ではない
● BM25
○ DL(j) = 文書Djの総単語数 / NDL(j) = DL(j) / (すべての文書の平均 DL)
○ CW(i,j) = [ TF(i,j) * IDF(i) * (K1 + 1) ] / [ K1 * (1 - b + (b * NDL(j)) + TF(i,j) ]
○ tf-idf プラス より短い文書において出現回数が大きいものが重要
http://sonickun.hatenablog.com/entry/2014/11/12/122806
https://ja.wikipedia.org/wiki/Tf-idf
https://en.wikipedia.org/wiki/Okapi_BM25
● 記事データ投入
○ 適当なニュース記事を 1000件 タイトルと本文
○ embulkでTDに投入
● 油井さんのtf-idfサンプルを利用させていただきました
○ https://github.com/treasure-data/workflow-examples
/tree/master/machine-learning/tf-idf
● 前処理
○ タグ/改行削除
○ 1文字の単語削除
○ アルファベット2文字削除
○ 形態素解析 (関数 : tokenize_ja() )
■ kuromoji / neologd
■ 特定の品詞のみ利用
処理概要1
記事データ
投入
前処理
記事数など取得
スコア計算
https://hivemall.incubator.apache.org/userguide/misc/tokenizer.html#japanese-tokenizerl
処理概要1
記事データ
投入
前処理
記事数など取得
スコア計算
query/explode_japanese.sql
tfidf.dig
処理概要1
記事データ
投入
前処理
記事数など取得
スコア計算
● 以下2つを計算
○ 記事数
■ tf-idf用
○ DL(document length)
■ 文書Nの総単語数
■ すべての文書の平均 DL
■ BM25用
処理概要2
記事データ
投入
前処理
記事数など取得
スコア計算
https://hivemall.incubator.apache.org/userguide/misc/tokenizer.html#japanese-tokenizerl
tfidf.dig
スコア(tfidf/BM25)を計算
● tfidfは以下の関数を利用
○ tf(), tfidf()
● BM25は定義を利用
○ CW(i,j) = [ TF(i,j) * IDF(i) * (K1 + 1) ] / [ K1 * (1 - b + (b * NDL(j)) + TF(i,j) ]
○ K=1, b=0.25
処理概要3
記事データ
投入
前処理
記事数など取得
スコア計算
tf-idf
BM25
類似記事を抽出してみる・・
結果 ⇢ 同じパターン
tf-idf
BM25
類似記事を抽出してみる・・
結果 ⇢ 異なるパターン
tf-idf
BM25
アジェンダ
❖ はじめに
➢ 自己紹介
➢ 会社の説明など
❖ 類似ニュース記事の抽出
❖ まとめ
◎ : hivemall onTDで類似記事を得ることが出来た!
△ : 結果の評価を得るには記事数が少なかった
◎ : Elasticsearchクラスタの構築, 運用が不要
◎ : Neologdの利用が簡単
?:tokenize_ja() の返り値に品詞が含まれない・・?
? : パラメータのチューニングがElasiticsearchより簡単にできそう?
まとめ
これからやりたいこと
● 機能開発
○ ユーザベースのニュース記事レコメンド
■ Matrix Factorization / Factorization Machine ?
○ ニュース記事のラベリング
■ word2vec / fastText ?
○ ユーザのクラスタリング
■ k-means など
● ユーザ分析
○ 行動分析
○ ABC分析
⇛などなど沢山あるが、人手が足りていません・・
http://www.mediba.jp/recruit/career/joblist.html#engineer
なので、分析・機械学習などしたいエンジニアの方
絶賛募集しています!
ご清聴
ありがとう
ございました!

Weitere ähnliche Inhalte

Ähnlich wie Hivemallで類似ニュース記事を抽出してみる

Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Takuya Iwatsuka
 
Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Kentaro Takeda
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Koichiro Matsuoka
 
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...Insight Technology, Inc.
 
Node-REDのノードの日本語化でOSSコミュニティへ貢献してみよう
Node-REDのノードの日本語化でOSSコミュニティへ貢献してみようNode-REDのノードの日本語化でOSSコミュニティへ貢献してみよう
Node-REDのノードの日本語化でOSSコミュニティへ貢献してみようHitachi, Ltd. OSS Solution Center.
 
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...Insight Technology, Inc.
 
Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93
Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93
Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93hiyohiyo
 
最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925小川 雄太郎
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokaiGo Sueyoshi (a.k.a sue445)
 
Drupal business consortiam in Japan:DBCJ 20140909
Drupal business consortiam in Japan:DBCJ  20140909Drupal business consortiam in Japan:DBCJ  20140909
Drupal business consortiam in Japan:DBCJ 20140909Hidekazu Ikeda
 
Node-REDの開発に参加しよう
Node-REDの開発に参加しようNode-REDの開発に参加しよう
Node-REDの開発に参加しようnodered_ug_jp
 
ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側Riou Tomita
 
ソフトウェアエンジニアと高位合成
ソフトウェアエンジニアと高位合成ソフトウェアエンジニアと高位合成
ソフトウェアエンジニアと高位合成Kenichiro MITSUDA
 
僕の考える最強のビックデータエンジニア
僕の考える最強のビックデータエンジニア僕の考える最強のビックデータエンジニア
僕の考える最強のビックデータエンジニアYu Yamada
 
Oss magic
Oss magicOss magic
Oss magicK5_sem
 
新卒採用を、まっとうに ー面接者への通信簿ー
新卒採用を、まっとうに ー面接者への通信簿ー新卒採用を、まっとうに ー面接者への通信簿ー
新卒採用を、まっとうに ー面接者への通信簿ー慧悟 岩本
 
n次請けSIerでもできること
n次請けSIerでもできることn次請けSIerでもできること
n次請けSIerでもできること陽一 滝川
 
IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門陽一 滝川
 

Ähnlich wie Hivemallで類似ニュース記事を抽出してみる (20)

CpawCTF Q22 Writeup
CpawCTF Q22 WriteupCpawCTF Q22 Writeup
CpawCTF Q22 Writeup
 
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応
 
Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法
 
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
 
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
[db tech showcase Tokyo 2017] E35: 12台でやってみた!DWHソフトウェアアプライアンス Db2 Warehouse ~...
 
Node-REDのノードの日本語化でOSSコミュニティへ貢献してみよう
Node-REDのノードの日本語化でOSSコミュニティへ貢献してみようNode-REDのノードの日本語化でOSSコミュニティへ貢献してみよう
Node-REDのノードの日本語化でOSSコミュニティへ貢献してみよう
 
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
 
Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93
Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93
Visual Studio Community 2013 で始めるプログラミング Win32/MFC #clrh93
 
最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925最近のディープラーニングのトレンド紹介_20200925
最近のディープラーニングのトレンド紹介_20200925
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
 
Drupal business consortiam in Japan:DBCJ 20140909
Drupal business consortiam in Japan:DBCJ  20140909Drupal business consortiam in Japan:DBCJ  20140909
Drupal business consortiam in Japan:DBCJ 20140909
 
Node-REDの開発に参加しよう
Node-REDの開発に参加しようNode-REDの開発に参加しよう
Node-REDの開発に参加しよう
 
Dll Injection
Dll InjectionDll Injection
Dll Injection
 
ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側ゲームの裏側を支える人たちの裏側
ゲームの裏側を支える人たちの裏側
 
ソフトウェアエンジニアと高位合成
ソフトウェアエンジニアと高位合成ソフトウェアエンジニアと高位合成
ソフトウェアエンジニアと高位合成
 
僕の考える最強のビックデータエンジニア
僕の考える最強のビックデータエンジニア僕の考える最強のビックデータエンジニア
僕の考える最強のビックデータエンジニア
 
Oss magic
Oss magicOss magic
Oss magic
 
新卒採用を、まっとうに ー面接者への通信簿ー
新卒採用を、まっとうに ー面接者への通信簿ー新卒採用を、まっとうに ー面接者への通信簿ー
新卒採用を、まっとうに ー面接者への通信簿ー
 
n次請けSIerでもできること
n次請けSIerでもできることn次請けSIerでもできること
n次請けSIerでもできること
 
IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門IT技術者でも1から学べるビジネスモデルキャンバス入門
IT技術者でも1から学べるビジネスモデルキャンバス入門
 

Hivemallで類似ニュース記事を抽出してみる