AirbnbのOSS, Knowledge Repo を触ってみた。

airbnb/knowledge-repo を触ってみたので流れや感想などを残します。

Knowledge Repoとは

Airbnbによって公開されたナレッジシェアの機能を提供するOSSです。

一般的な類似ツールとは異なりデータサイエンティストを中心としたデータ分析を行う技術職を想定ユーザーとしており、markdownで記述された記事だけでなくjupyter notebookやR markdownで記述されたファイルも記事として扱えるようになっています。

モチベーション

日々データ分析を行なっていく中でナレッジシェアは一つの課題に感じます。 Airbnb Engineering BlogのKnowledge Repoに関するポストでも詳しく触れられていますが、よくある場面としてはwikiのようなものにグラフや考察などは載っていますがデータ抽出や可視化のソースコードが見つからないケースです。

出ているデータに何かおかしいところを見つけたり、集計自体が過去に行われたもので現在の状況でも同じ傾向が続いているのかを確かめようとした時など、そのようなソースコードを参照したいケースは多くあります。wikiなどグラフの画像を貼り付けなければならないツールではグラフごとにこれらのソースコードを紐付けて置くのはそれなりに手間です。代案として、Jupyter notebookはどうでしょうか?

Jupyter notebookにはmarkdownも記述することができるので、やろうと思えば一つの.ipynbファイルで分析から得られた示唆とデータ抽出や可視化のソースコードをまとめることができます。しかし、どのようにそのファイルを共有すれば良いでしょうか?

一つ考えられるのは、GitHubに専用のリポジトリを作ってそこにipynbファイルを格納していくということです。GitHubにはipynbファイルのプレビュー機能があるのでこの方法であれば蓄積、共有という観点では十分に見えます。

しかし、ファイルサイズが大きかったりするとSorry, something went wrong. Reload?と表示されてしまい何度もリロードする羽目になることもあり、筆者の経験上そこまで体験の良いものではありません。また、GitHub自体はそうしたナレッジシェアのためのツールではないためナレッジとしての検索機能は弱いこともあります。

他にも様々な方策は考えられると思いますがそれぞれ一長一短なように思え、ちょうど良いツールはないものかと探していたところ、AirbnbのEngineering BlogでこのOSSを見つけ、良さそうだったので一通り触ってみることにしました。

以下ではドキュメントに沿ってKnowledge Repoにポストを追加しローカルでservingするというところまでをやっていきます。

ドキュメントはこちらから

knowledge-repo.readthedocs.io

Installation

$ pip install --upgrade "knowledge-repo[all]"

基本的に単一のリポジトリで作業することになるので、そのリポジトリ用の仮想環境にインストールするなどすると良いかもしれません。

Get Started

$ knowledge_repo --repo ./test_repo init

repoのinitializeをします。--repoディレクトリを指定します。この先もknowledge_repo コマンドを実行する場面が何度もありますが、毎回このオプションを渡す必要があります。煩わしければ、環境変数を登録しておくと省略できるようです。

export KNOWLEDGE_REPO=<repository uri/path>

次にポストを生成するための ipynb ファイルを追加します。

$ knowledge_repo --repo <path/uri_of_repo> create ipynb example_post.ipynb

他にもR MarkdownMarkdownも作成できます。テンプレートから作成すると、Knowledge Repoのポストを表示するのに必要なメタデータの入力欄が自動で補完されます。

---
authors:
- XXX
- YYY
created_at: 2016-06-29 00:00:00
tags:
- knowledge
- example
thumbnail: images/output_5_1.png
title: This is a Knowledge Template Header
tldr: This is short description of the content and findings of the post.
updated_at: 2022-01-16 18:14:58.994567
---

次に、作成した ipynb ファイルをKnowledge Repoのポストとして登録します。

$ knowledge_repo --repo <path/uri_of_repo> add example_post.ipynb -p project/example_ipynb

このコマンドを実行すると、指定したipynbから画像やmarkdownなどを抽出したのち指定したディレクトリに格納してくれます。実際にはここで生成されたファイルがKnowledge Repoの表示には使われるようです。

最後にローカルでサーバーを動かしてみます。

$knowledge_repo --repo <repo_path> runserver

表示されました!

f:id:yaginuuun:20220120224811p:plain

個別のポスト

f:id:yaginuuun:20220120224927p:plain

コードセルの折りたたみやLikeなどもできます。 UIも綺麗です。

所感

AirbnbOSS, Knowledge Repoをサクッと触ってみました。UIも綺麗ですし、機能もLikeやキーワード検索、フィルタリングなどリッチです。 Jupyter notebookやR Markdownをそのまま読み込んで表示できるのもやはり便利だと感じました。

一方でコマンドによる操作が前提になっている点はちょっと煩わしいなと思いました。UI上でポストの作成、編集やJupyter notebookなどの読み込みができればもっと便利なのかもしれません。 また、分析系のファイルをそのまま読み込めるのは便利ですが分析者によって分析環境が違うこともまあまああると思うので、そういった依存関係までも再現するには至っていないと少し課題も感じました。

使用者は意外と選ぶツールなのかもしれません。

References

medium.com

github.com

2021年の抱負

あけましておめでとうございます。久しぶりの更新です。
TLなどを見ていると多くの人が今年の目標を固定ツイートやブログ、noteなどに公開しているのを目にしました。そこで自分も書いてみようと思いました。

書き出してみると、全部で7個でした。(キリ良く10個書きたかったけどそんなに無かった)

1. 英語で仕事のコミュニケーションが取れるようになる

今も1h/dayほど投下して英語を学習していますが、まだまだ仕事でストレスなく使えるレベルには程遠いと感じます。今年も引き続き学習を継続していきます。

  • TOEIC 900点以上
  • 総学習時間 500h(現在150hくらい)

2. エンジニアリングの素養を付ける

現在、Data Analystとして比較的距離近くSWEの方と働いているのですが、技術的なことへの理解がなさすぎることを痛感させられています。 なるべく近い目線で話をできるように勉強しなければなりません。

  • Golangを習得し、仕事で使えるレベルにする(PR reviewをできたり、自分がownerのPRをマージされたい)
  • Kubernetes, 使用しているクラウド技術の理解
  • OSSのソースを読む

3. 統計分野の専門性を高める

2020年は、会社での役割もあってA/Bテストを中心にインプットを行ってきました。一方で統計モデルをちゃんと実務に応用したりといったことは後回しにしてきてしまいました。 今年は去年後回しにしてしまった部分ときちんと向き合って、自身の統計的なBackgroundをよりソリッドにする + 使える引き出しを増やすというところに重点を置きます。

  • 統計検定1級取得
  • edX Micro Masters 継続(受講したコースについてはCertificate取得)
  • 数理統計、統計モデリング、因果推論に関する課題図書を数冊決めて読む。
  • 週に最低一本関連分野の論文を読む
  • 統計モデルを仕事に使用し、数字的なインパクトを生む
  • 総学習時間 1000h(現在200hくらい)

4. 外へ向けてのアウトプットをする

去年は外へ向けてのアウトプットを全然できませんでした。自分の実力不足もありますが、そんなに意識してなかったのも大きいなと思います。 今年はしっかりアウトプットしていきたいですね。

  • 社テックブログ執筆
  • Podcastで技術的な内容の発信をする
  • 学んだ内容の当ブログでのアウトプット
  • TwitterでA/Bテストに関する発信を増やす

5. 1ヶ月ごとにKPTを行う

去年、1ヶ月ごとに目標を決めることはしていたのですが、時間をとって振り返りをするということはしていませんでした。 ちゃんとイテレーションしていきたいですね。

6. お金の勉強をする

自己啓発系の本や技術書は去年も読んでいたのですが、お金関連の本を全く読んでいませんでした。 子供も大きくなってきていて、家を買う系の話もちょこちょこ考えなければならないと感じているので、お金、不動産系の勉強をしたいです。

  • 月に最低一冊はお金、不動産系の本を読む
  • 貯金する

7. 子供にいろんなものに触れてもらう

今年で子供が4歳になります。どんどん自分でできることが増えて来ていて、好奇心の扉が大解放されているな〜と感じることが多くなりました。 そんな今だからこそ、いろんなものに触れて欲しいなと思っています。コロナ情勢もありますが危険のない範囲でやっていければと思います。

  • 水族館に行く
  • 美術館に行く
  • スポーツ教室に行く
  • 勉強を手伝う

そんな感じです。どれだけ達成できるか、今年の自分に期待しています!

【イベントレポ】RecSys論文読み会(2019/10/4)に参加しました。

connpass.com

RecSysは推薦システム系のトップカンファレンスです。 今回のイベントは日本からRecSysに参加された方+実際に論文を発表された方がスピーカーで論文を紹介していくイベントでした。 イベント主催のWantedlyさん、Gunosyさんありがとうございます。 休日に五時間という長丁場にも関わらず会場は満員でした。(熱量がすごい)

論文の紹介数が10本と多かったので、本記事では僕自身の印象に残ったもの(+理解が追いついたもの)のみメモと感想を書いていこうと思います

Uplift-based evaluation and optimization of recommenders by @masatoh73

Uplift-based evaluation and optimization of recommenders

  • 従来は精度を重視した推薦システムを重視していたが、Uplift(売り上げの増加)を重視したものを見ていく必要もあるのでは?という問題提起と実データに対する適用方法の話
  • 例えば、レコメンドしなくてもユーザーが購入する商品はレコメンドしても売り上げの増加は無い。一方でレコメンドしなければ買わなかった商品はレコメンドすることによって売り上げの増加がある。
  • 商品は、買われた/買われなかった, レコメンドされた/されてない の4パターンの組み合わせで表現でき、上手く計算するとレコメンドされなければ買わなかった商品を推定可能(因果推論的アプローチ?)

感想

レコメンドの主な機能としてユーザーが好むであろうアイテムを先回りして提示することによるユーザー負担の軽減セレンディピティのあるアイテムの提示があると思っているのですが、今回の発表は後者寄りかなと思いました。どちらが重要視されるかは、サービスによって変わってくると思いますが、今担当している案件のレコメンドのオフライン評価において、前者を重視しすぎているなと思いつつも後者をどうやって測定すれば良いのかわかっていなかったので、ヒントとなる論文になりそうでした。

Predicting online performance of job recommender systems with offline evaluation

Predicting online performance of job recommender systems with offline evaluation

  • レコメンドの優劣は最終的にオンライン評価(A/Bテストなど)でやることが多いが、A/Bテストは制約が多い
  • オンライン評価でのパフォーマンスをオフライン評価の時点で見積もれないか?というのがモチベーション
  • 使用したモデルは、userのinteractionに対してWord2vecを適用し類似度を計算したもの
  • 結果、様々なオフライン評価の指標とオンライン評価の指標の散布図を取ると相関しているものがあることがわかった。
  • 何のオフライン評価の指標とオンライン評価の指標が相関するかはサービスにより異なるので色々試してみると良さそう

感想

規模の大きなサービスであればA/Bテストの優劣をつけるのにそんなに時間はかからないかもしれませんが、規模が小さめなサービスの場合A/Bの期間が長くなってしまい、試行錯誤を効率的に回せないという状況が発生しがちな気がするので、有用だと思いました。 あと単純にWord2vecをレコメンドに適用できるのを知らなかったので学びになりました。

DualDiv: diversifying items and explanation styles in explainable hybrid recommendation

DualDiv

  • 推薦理由を生成し、どのように多様化させていくか?という話
  • レコメンドの説得力を高めるのに推薦理由の提示は有用
  • しかし、推薦理由が画一的なものになってしまうとその効果は薄れてしまう → 上手く多様化できないか?
  • HyPERという手法で推薦理由候補を生成
  • 推薦上位のアイテムに選ばれていない理由を選択

感想

レコメンドに限らず、機械学習の説明性というのは最近よく聞く話題だなと感じていましたが、その具体的な方法についてはあまり知りませんでした。 今自分が関わっている案件でも、推薦理由を提示できた方がユーザー体験が向上すると感じているので、実際の論文を読んでみて適用を考えていきたいと思います。

全体通して

素直に、このようなイベントはめちゃくちゃありがたいと思いました。 とりあえずバンディット系の話は全然わからなかったので勉強しようと思います。あとはここで論文全て公開されているようなので気になるのを読んでみようと思います。またメモを書きます。

【学習ログ】MIT OCWのSingle Value Calculusを修了しました

ocw.mit.edu

8月頭くらいから受講していた講義を完了しました。 モチベーションや内容の感想、次にやること等を書いていきます。

ちなみにOCWはOpen Course Wareの略で、大学が講義映像や課題を公開する場所のことです。 日本でも東大や東工大などいろんな大学がOCWを持っていて色々な講座が公開されていますが、もともとはMITが一番初めにこの取り組みを始めたらしく、通常の講義だけでなくOCWで学ぶように編集されたコースが用意されていたり、実際の試験問題やテキストが公開されていたりすごい量のコンテンツが蓄積されています。

また、チュートリアルでは設立の背景、思いや使い方などが説明されているのでもしサイトを利用する際にはご一読するのをおすすめします。

Get Started with OCW | MIT OpenCourseWare | Free Online Course Materials

個人的にこの辺の文言が好きでした。

There's no signup, no enrollment, and no start or end dates. The entire OCW collection is always here for you. Freely browse and use it at your own pace.

取り組み始めた背景

まず大前提として自分は高校時代そこそこ勉強頑張って大学時代めちゃくちゃ研鑽をさぼった人間です。なので数学などはほぼ高校時点での知識で止まっています。 現在の仕事では数学わかってなくても困る場面はあまりないのですが、ふと、そういう数学とかそういう難しいことを理解せずにできる仕事 = 誰にでもできる仕事 なので今後駆逐されそうだなと危機感を抱きました。

難しいことって数学以外にもあるよね?という話にもなるのですが、自分としてはデータサイエンス系のキャリアを歩んでいきたいと思っているので、MLPシリーズやPRMLを読解したり論文を読んだり、今後その道でキャリアを積んで行くには数学は必須だと思いました。

なぜ今のタイミングか?というと、今まで数学重要と思いつつも応用的なものの方が具体的でわかりやすい(イメージしやすい)ので、数学やらなきゃなーと思いつつも、オライリー機械学習系の本を読んだりとかなんとなく数学そのものからは逃げてきました。 しかし、ふと今やらなかったら、この先ずっと数学やらなきゃなーと頭のどこかで考え続けるだろうなと思い、であればなるべく早く取り組み始めるのが良いだろうと思い、すぐに取り組み始めることにしました。

なぜ書籍などではなくMIT OCWなのか?というと、海外の先端企業に就職するような人が学んだソースと同じソースで学びたいというのが大きかったです。かつ無料で授業中の演習や試験問題、回答解説まで揃っていると探していくと、MIT OCW以外無い気がしました。

内容の感想

Single Value Calculusの内容は理系であれば日本の高校3年生でやる微積と重複する部分が80%, 残り20%がそれより少し進んだ内容といった感じでした。 講義もわかりやすく、更にResitationという講義で重要なポイントを例題交えて解説してくれる動画、演習問題+解説付きで綺麗にSection分けされていて、無料とは思えないクオリティでした。ただ、MITでは1semester(4ヶ月くらい?)かけてやる内容みたいなので、分量はかなりありました。

次に何をやるのか?

体系的に学ぶためMITの応用数学科の学部カリキュラムに沿って進めていこうと考えていて、次はMulti Value Calculusを進めていきます。

Mathematics (Course 18) < MIT

お給料が上がったらいつかDonationしたいです。

【論文メモ】Personalized News Recommendation Based on Click Behavior

エムスリーのブログ記事で言及されていて、良さそうだったので読みました。

Factorization Machineの実装と数値検証 - エムスリーテックブログ

読んだ論文

Personalized News Recommendation Based on Click Behavior

著者、所属

Jiahui Liu, Peter Dolan, Elin Rønby Pedersen Google Inc.

f:id:yaginuuun:20190909192206p:plain

f:id:yaginuuun:20190909192255p:plain

f:id:yaginuuun:20190909192320p:plain

f:id:yaginuuun:20190909192346p:plain

どんなもの?(著者は何をやりたかったの?)

ニュースのレコメンデーションを改善するために、情報フィルタリングと協調フィルタリングを統合したような方法でモデルを作ったら性能が改善したよ

先行研究と比べてどこがすごい?

協調フィルタリングに加えてベイズの定理を用いてユーザーのカテゴリへの興味度合いをモデルに組み込んだこと(多分)

技術、手法のキモはどこ?

ユーザーの現在の興味を、ログからユーザーの住んでいる地域全体のトレンドによる部分と、ユーザーが本来的に好んでいるものとに分けて算出したこと

どうやって有効だと検証した?

事前分析でログを分析し、以下のファクトを得た * ユーザーの興味は時間とともに移り変わる * ユーザーの興味は全体としてのトレンドの影響を受ける * 全体としてのトレンドは地域によって異なる

単純なスプリット型のA/Bテストで検証した。検証には以下の指標を見ている * レコメンドセクションのCTR * トップページのCTR * ユーザーの一日当たりの来訪回数

議論はある?

特になし

次に読むべき論文はなに?

  • Jensen, V. Bayesian Networks and Decision Graphs. Springer, 2001
  • Hyoung R. Kim , Philip K. Chan, Learning implicit user interest hierarchy for context in personalization, Proceedings of the 8th international conference on Intelligent user interfaces, January 12-15, 2003.
  • Carreira, R., Crato, J. M., Gon?alves, D., Jorge, J. A. Evaluating adaptive user profiles for news classification, Proceedings of the 9th international conference on Intelligent user interfaces, 2004.
  • Billsus, D., & Pazzani, M. A hybrid user model for news story classification. In Proceedings of the Seventh International Conference on User Modeling. 1999.

Tex Yoda IIを買った

きっかけは今年の8月中盤に差し掛かった頃、何気なくTwitterを見ていたら流れてきたこの記事を見たこと。

www.m3tech.blog

見た当初は、自分はアナリスト寄りだしそんなにキーボードにこだわる必要もないかなと思って特に何も思わなかったが、お世話になっているyukinagaeさんがLilyを買ったり、ふと会社で周りを見渡してみるとHHKBやらReal Forceやら他自作キーボードやらかっこいいなと思い始めた。

そこでふともう一度記事を見返すと懐かしい赤ポチ付きのキーボードが目に入った。(自分は大学3年生の時初めて行ったインターンで支給されたのがThinkPadだった) 思ったより値段が高くて躊躇したけど、最終的に購入に踏み切った。

ちなみに自分はここから買った(はんだ付けはハードル高かったので完成済みを購入した)

mechanicalkeyboards.com

到着待ちの時は他のレビュー記事なんかも見て待つ時間も楽しかった。

TEX Yoda IIを作る - kobtea.net

最終兵器トラックポイント付きメカニカルキーボード「TEX Yoda II」レビュー - たけぞう瀕死ブログ

そして待つこと2週間弱、本当は明日到着の予定だったけど今日届いた。 早速試しに叩いてたら楽しくなってきて、こんなブログ記事まで書いてしまった。(この記事ももちろんTex Yodaで書いている)

ちょっと高かったけど、キーを打つのがこんなに楽しくなるなんて思わなかった。買ってよかった。

【イベントレポ】Data Platform Meetupに参加しました(2019/9/5)

data-platform-meetup.connpass.com

こちらのイベントに参加してきました。
DWHとマートの切り分けやメタデータ管理、ワークフローなど近頃気になってはいるもののあまりオープンに情報共有されているわけではない印象を持っていたので、とても有難い機会でした。

イントロ

会の趣旨、Rettyさん主催だったのでRettyさんの紹介など。
スライドはもし公開されれば追加します。

発表1「カルチャーとエンジニアリングを繋ぐデータプラットフォーム」(by @takegue さん)

speakerdeck.com

Rettyのデータ基盤を作っていく上でどのようなことを意識しているのか、どうやって価値を発揮していくのかと言うお話でした。質を担保するためにアナリストがSQLにテストを書くと言う取り組みが新鮮でした。自社でもクエリの質の担保が一つの課題感だったりするので参考にしたいです。

他、Rettyさんの技術ブログでも取り組みがしっかりまとめられているのでもしご興味あればご覧ください。

engineer.retty.me

engineer.retty.me

発表2「データレイク構築後の四方山話」(by @yuzutas0 さん)

speakerdeck.com

ゆずたそさんの発表でした。内容は実際に経験した中で多かったデータ基盤周りのお悩みに対して解決策を説明していくと言う感じで、自分にも当てはまるものが多く、とても勉強になりました。

特に印象に残ったのは、データの質の担保のためにSQLPythonでラップしてunittestを書くとか、クエリ文を集計分析してよく使われているテーブルを中間テーブルとして持たすなどです。

10分の発表でスライドが150枚超...スピード感がすごかったです。

履歴データの保持について、発表内で引用されていたスライドです。後で読もう。。

履歴を持つデータの設計 - Speaker Deck

発表3「DataPlatform構築プロジェクト推進の事例と学び」(by @ tamaki0506 さん)

speakerdeck.com

エウレカのBIチームリーダーの方のお話でした。エウレカさんでのデータ基盤アーキテクチャのお話、構築PJの立ち上げのお話など広い範囲を途中で踏んだアンチパターン含めて語って下さった発表でした。

個人的に印象に残ったのは、データマートは誰でも使えることを前提においているから、BIツールなどの手段と共に提供するということです。自分の中でDWHとマートって何が違うのかあまり理解していなかったので、一つの実例を知ることができてよかったです。

発表4「大規模サービス開発における分析用データの必要要件」(by @shoei さん)

speakerdeck.com

メルカリのBIチームリーダーの方のお話でした。 メルカリさんが現在進行形で遭遇している課題やそれに対して講じている解決策のお話でした。日本において有数の規模のデータを有している企業の方の実例を交えたお話を聞くことができたのはすごく貴重な機会でした。

現在アナリストが目的別のチームにアサインされて各々仕事をしているということで、モニタリングしている指標がMECEではないという問題に対する解決策として、横断での可視化PJをやられているということでした。このPJでは相当網羅的にKGIに紐づくKPIをモニタリングしていくということでした。ここで質疑の際に、みるべき数値を絞るという観点と矛盾するという話が出ましたが、目的の違いで、横断PJではプロダクトのヘルスチェックを目的としているので網羅的に見ている、分析の際には出来るだけ見るべき数値を減らして効果的なポイントだけ見ていくというお話をされていて、僕自身ダッシュボードを作成する際はなるべく見る数字を絞っていくということに重きをおいていたので、印象的でした。

終わりに

今回第一回目とのことでしたが、普段なかなか聞くことのできないお話ばかり聞くことができ、参加することができて良かったです。 改めまして会場、食事等ご準備いただいた主催のRettyさんに感謝申し上げます。ありがとうございました。