SlideShare a Scribd company logo
1 of 27
2018/6/23 第6回 とっしんの会
 石山 賢也(いしやま かつや)
GitHub: Katsuya-Ishiyama
Qiita: @kishiyama
Blog: https://kishiyama.hatenablog.com (最近始めました)
 ソーシャルアプリ・ゲームを企画・開発・運営する会社にてデータサイエンティスト
 最近の興味
- 画像データの人気度を定量化する
- テキストマイニング
- 因果推論
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 2
 arXivの更新情報を毎日チェックしたい。
⇒ feedlyを試してみたが、あまり開かない。
 職場で使っているチャットにBotが更新情報を流してくれると読みやすい。
⇒ Slackが適している。
 RSSで得られるすべての論文を流しても興味があるものを探すのが苦労する。
※「それぐらいやれよ」と言われそうですが、推薦システムの勉強なので、それは考えないことにします。
 論文の要旨 (abstract) が自分の興味に近いものをレコメンドして読むものを減らす。
 ただし、煮詰まっているときは興味に近いものばかりでも息が詰まるので、専門領域
から少し逸れて気付きが得られるような論文もレコメンドしてほしい。
⇒ それを興味が遠い論文をあえてレコメンドすることで達成できないか?
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 3
 自分の興味がある事柄を簡単な文に起こし、それに近い要旨の論文を1本と遠い要旨
の論文を1本の合計2本を投稿する。
 投稿頻度は毎日1回。
 扱える興味がある事柄は1つのみとする。
 自分の興味がある事柄を説明する文は英語で書くこととする。
※ arXivの論文は英語で書かれているので、興味の説明文も英語の方が扱いやすい
 論文の分野は自分で予め指定しておく。
※複数可。
(例)cs (コンピューターサイエンス), stat (統計学)
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 4
 利用言語
python 3.5以上
※ Type Hintsを使っているため。
(参考)https://docs.python.jp/3/library/typing.html
 依存ライブラリ
requests, scikit-learn, pandas, BeautifulSoup4, PyYAML
 推薦アルリズム
TF-IDFとcosine類似度を使って内容ベース
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 5
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 6
レコメンド部分
類似度計算部分
RSSダウンロード部分
クエリは手打ち…
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 7
RSSは http://arxiv.org/rss/{your interested field} から取得できる。
 RSSScraperクラスを実装する。
 main.pyでパッケージとして読み込まれることを想定。
 RSSのダウンロードは fetch_rss メソッドで行う。
 extract_paper_abstractで論文に関する下記の情報をXMLから抽出する。
date: RSSの更新日時
lang: 論文が書かれた言語(e.g. english)
publisher: 出版元 (e.g. arxiv.org)
subject: 分野 (e.g. Statistics)
title: 論文のタイトル
description: 論文の要旨
link: この論文が掲載されているWebサイトのURL
authors: 論文の著者
 詳細は https://github.com/Katsuya-Ishiyama/paper_recommend/blob/master/scraper.py
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 8
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 9
Cosine類似度は内積を
取るため、ベクトルの
長さを同じにしたい。
そのため、クエリ文と
論文の要旨のリストは
一緒にしてベクトル化
する。
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 10
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 11
先程保存したWebhook
のURLを入力して保存
 main.pyから類似度と論文のタイトルなどの情報を受け取って、興味に近い論文と興
味から最も遠い論文を抽出し、Slackに投げる。
 詳細は https://github.com/Katsuya-Ishiyama/paper_recommend/blob/master/recommend.py
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 12
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 13
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 14
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 15
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 16
 最も近い論文は、興味に近いものの少し的が外れている印象を持った。
 自分の興味を精度良く説明できる文章が書ければ、レコメンドの精度も上がるものと
考えられる。
 最も遠い論文には、たとえ自分の専門領域の中であっても、まったく興味が無い論文
が推薦される。
 「興味があって、かつ、こんな方法があるのか」という体験をするには、類似度で論
文をクラスタ分けして、その中から代表的な1本を選ぶほうが良さそう。
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 17
 arXivのRSSから自分の興味に最も近い論文と最も遠い論文を1本ずつレコメンドす
るSlack Botを作った。
 TF-IDFとcosine類似度を使って内容ベースの推薦アルゴリズムを実装した。
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 18
 自分の興味はSlack Botに投げられるようにしたい。
 同様に専門分野についてもSlack Botに投げられるようにしたい。
 今回は1つだったが、複数の興味ある事柄についても対応できるようにしたい。
 より洗練された推薦アルゴリズムを採用する。
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 19
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる
20
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる
21
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 22
アカウントはすでに持っているものとします。
https://api.slack.com/ にアクセスして右上の ”Your Apps” をクリックします。
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 23
1. クリック
2. アプリの名前を入力
※ ここではtestにしていますが、
実際に作ったアプリの名称は
arXiv Botです。
3. 投稿先のワークス
ペースを選択
4. クリック
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 24
Incoming Webhooksを設定する
これをアクティベートすることで
外部からの投稿が可能になります。
クリック
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 25
Onにして、一番下
の”Add New Webhook
to Workspace”を
クリックする
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 26
1. 投稿先を選択
2. クリック
2018/6/23第6回 とっしんの会 興味から遠い論文を"あえて"レコメンドするSlack Botを作成してみる 27
許可をクリックして遷移した先
の一番下のこの部分をコピーし
て、テキストファイルに保存し
ておく。

More Related Content

What's hot

Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27Shinichi Nakagawa
 
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)Yukinori KITADAI
 
Getting started with MLOps
Getting started with MLOpsGetting started with MLOps
Getting started with MLOpsyusuke shibui
 
Rで野球のデータ解析がしたい (データが欲しい)
Rで野球のデータ解析がしたい (データが欲しい)Rで野球のデータ解析がしたい (データが欲しい)
Rで野球のデータ解析がしたい (データが欲しい)Takuma Hatano
 
Electron + Mithril Async File Search
Electron + Mithril Async File SearchElectron + Mithril Async File Search
Electron + Mithril Async File Search和晃 西澤
 
ギークを目指すエンジニャーの 情報収集方法 mohikan Slack
ギークを目指すエンジニャーの 情報収集方法 mohikan Slackギークを目指すエンジニャーの 情報収集方法 mohikan Slack
ギークを目指すエンジニャーの 情報収集方法 mohikan SlackKota Kanbe
 
Launchable and efficient test execution
Launchable and efficient test executionLaunchable and efficient test execution
Launchable and efficient test executionyusuke shibui
 
Google cloudnext recap_DataAnalytics
Google cloudnext recap_DataAnalyticsGoogle cloudnext recap_DataAnalytics
Google cloudnext recap_DataAnalyticsYu Yamada
 
MLOps failure(1_108)
MLOps failure(1_108)MLOps failure(1_108)
MLOps failure(1_108)yusuke shibui
 
Railsではじめる野球プログラミング
Railsではじめる野球プログラミングRailsではじめる野球プログラミング
Railsではじめる野球プログラミングShinichi Nakagawa
 
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT Shinichi Nakagawa
 
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化Shinichi Nakagawa
 
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...Shinichi Nakagawa
 

What's hot (17)

Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27Pythonではじめる野球プログラミング  - kawasaki.rb #15 2014/8/27
Pythonではじめる野球プログラミング - kawasaki.rb #15 2014/8/27
 
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
 
Getting started with MLOps
Getting started with MLOpsGetting started with MLOps
Getting started with MLOps
 
Rで野球のデータ解析がしたい (データが欲しい)
Rで野球のデータ解析がしたい (データが欲しい)Rで野球のデータ解析がしたい (データが欲しい)
Rで野球のデータ解析がしたい (データが欲しい)
 
Django learning Part2
Django learning Part2Django learning Part2
Django learning Part2
 
Electron + Mithril Async File Search
Electron + Mithril Async File SearchElectron + Mithril Async File Search
Electron + Mithril Async File Search
 
ギークを目指すエンジニャーの 情報収集方法 mohikan Slack
ギークを目指すエンジニャーの 情報収集方法 mohikan Slackギークを目指すエンジニャーの 情報収集方法 mohikan Slack
ギークを目指すエンジニャーの 情報収集方法 mohikan Slack
 
Launchable and efficient test execution
Launchable and efficient test executionLaunchable and efficient test execution
Launchable and efficient test execution
 
Google cloudnext recap_DataAnalytics
Google cloudnext recap_DataAnalyticsGoogle cloudnext recap_DataAnalytics
Google cloudnext recap_DataAnalytics
 
Hachiojipm31
Hachiojipm31Hachiojipm31
Hachiojipm31
 
MLOps failure(1_108)
MLOps failure(1_108)MLOps failure(1_108)
MLOps failure(1_108)
 
Railsではじめる野球プログラミング
Railsではじめる野球プログラミングRailsではじめる野球プログラミング
Railsではじめる野球プログラミング
 
黄色いゾウさんと愉快な仲間たちの近況報告 #hadoopreading
黄色いゾウさんと愉快な仲間たちの近況報告 #hadoopreading黄色いゾウさんと愉快な仲間たちの近況報告 #hadoopreading
黄色いゾウさんと愉快な仲間たちの近況報告 #hadoopreading
 
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT
Pythonではじめる野球プログラミング(続き)PyCon JP 2014 LT
 
強化学習その5
強化学習その5強化学習その5
強化学習その5
 
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化
【Inception-Deck】野球Hack! - Pythonを用いたデータ分析と可視化
 
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
Python Professional Baseball Programming Open Data Edition #bpstudy 91(2015/3...
 

興味から遠い論文を”あえて”レコメンドするSlack Botを作成してみる