u++の備忘録

「ML@Loft #6」参加メモ

「ML@Loft #6」に参加しました。

ML@Loft は AWS 上で機械学習ワークロードを運用しているデベロッパー/データサイエンティストのための、お悩み相談会です。 第6回は MLPP #4 との共催で、これまでも人気だった "自然言語処理 (NLP) / レコメンド" や "時系列解析" をテーマに、サービス導入する際のポイントや悩みについて議論します。

mlloft6.splashthat.com

machine-learning-pitch.connpass.com

発表

LT1 - 富士通研の時系列データ解析技術

梅田 裕平さん(株式会社富士通研究所

LT2 - ゼロベースからの論文レコメンドシステムの構築

河合 俊典さん(エムスリー株式会社)

  • 医者向けの論文のレコメンドシステムの構築
  • 製薬企業が医療情報を勉強するためにも使われる
  • 要件
    • 基本的にはML業界と同じ
    • 分野の重なりの大小が激しい
      • 糖尿病などの合併症の範囲絵が広い病気
      • 希少疾患
      • ワードの揺れ(MRという略語が複数の意味を持つ)
    • 年間数万件です最新の論文に対応したい(コールドスタート問題)
    • ある程度ユーザ行動に応じて動的に動く
    • 医療関係者に納得感のある評価
  • 手法
    • 医師と論文の名寄せ
      • 決定木でユニークIDを振る
    • お医者さんの興味ワードの生成
      • Label Propagation
    • Elasticsearchに投げる
    • レコメンドエンジンの作成
      • content-based citation recommendation
    • コールドスタート問題に対処すべく、ユーザが興味のある単語の情報だけではなく、citation情報や過去に医師が書いた論文の情報も複合的に利用して推薦する
  • 評価
    • 最初はM3の編集部にアドバイスを貰いつつモデル化
    • 実データを用いて、CTR、MRR、MAPを算出
      • データ数、カテゴリ数に課題はある

LT3 - 社内の XX に詳しい人を知りたい

押条 祐哉さん(ストックマーク株式会社)

  • Anews
    • ビジネスニュースの配信
    • チームの人が読んだ記事も読める
    • 記事にコメントも付けられる
    • チームの共通知のアップデート
  • Anewsの刷新にあたり、特定のキーワードやニュースで検索した時に詳しい社内人物1人を推薦するシステムの構築
    • 「Who knows what?」
  • 記事データとユーザ行動ログが使える
  • 推薦アルゴリズム
    • 協調フィルタリングではなく、コンテンツベーツ
    • ユーザベクトルと記事ベクトルのcos類似度ベースのスコアを利用
    • 記事ベクトルの閲覧数が最も多いクラスタの中心をユーザベクトルにして、dynamodbへ格納
      • 記事のタイトルと最初の名詞数単語の入力として、fastText
  • 課題
    • ユーザベクトルの定義方法
      • コールドスタート問題
      • 他にも取れるデータで有用なものがあるかも
    • 評価指標
      • A/Bテストやオンラインテストなど検討中

LT4 - ESG評価を支える自然言語処理基盤の構築

久保 隆宏さん(TIS株式会社)

  • ESG投資、持続可能な発展の可能性を考慮
  • 7つの手法があるが、何らかの「ESG評価」をしている
    • さまざまな評価機関が存在
    • 各機関の評価に相関がなさすぎる
  • 人力での評価には限界がある→NLPの利用
  • 支援レベル
    • 文書データの収集(CSR報告書・結合報告書)
      • AWS上に仕組みを構築、Lambdaを起動
      • StepFunctionで構築してGlue Crawlerを呼ぶ方式を採用
      • ビューはAthena
      • 作成したデータ5年分を近日公開予定
    • 評価対象となる文・段落の絞り込み
      • プロトタイプ検証予定
    • 自動評価
  • 課題
  • 所感
    • 「見た目ではESG評価はレポートの見た目では変わらない」
    • 書きっぷりを頑張ってほしい
    • その辺に転がっているデータで価値が出ることはほぼ無い
    • 地道なアノテーションが大切

パネルディスカッション

Slidoで寄せられた質問に答える形式でした。具体的な議論内容については、twitterハッシュタグ #mlpp #mlloft である程度確認できるかと思います。

AI×愛知の「AIchi勉強会」でKaggleの魅力について発表しました

愛知県名古屋市で開催された「AIchi勉強会」で、Kaggleの魅力について発表しました。愛知県出身という縁でお声がけいただいた形です。

愛知県の製造業の異なる会社で働く、AI・機械学習に興味を持つメンバー3人中心に「愛知県で会社を越えてAIに興味ある人、AIを使っている人と繋がれるイベントを開催してみたい!」という思いから始まったイベントです。今回が初回となります。

connpass.com

自分の発表

主に初心者〜中級者の方向けを想定したイベントとのことで、Kaggleを紹介しつつ魅力を少しでもお伝えできる内容を心がけました。

具体的には次の三本立てで、Kaggleを知らない方も対象に、ある程度体系立てたお話をしたつもりです。発表の冒頭でお尋ねしたところ、Kaggleに一度でも提出した経験のある方は2割弱、聞いたことある方は約7割でした。

発表の中では教師あり学習の例として、以前に作成した「名古屋/東京」を判定する画像分類アプリもご紹介しました。

upura.hatenablog.com

懇親会

懇親会では、何人の方に「Kaggle始めます!」と言っていただいたり、twitterで存じ上げていた方にお会いできたりと、有意義な時間を過ごすことができました。

おわりに

大学入学の上京とともに離れた地元・名古屋にて、このような形で帰省し少しでもコミュニティに貢献できたことは非常に感慨深いです。お声がけいただき、本当にありがとうございました。

参加者・登壇者・運営の方々、会場をご提供くださったヤフーさんにお礼申し上げます。

f:id:upura:20190907222452j:plain

f:id:upura:20190907222656p:plain

f:id:upura:20190907222708p:plain

「なんでデータサイエンティストやってるの?」に登壇しました&全発表メモ

「なんでデータサイエンティストやってるの? 〜 思い描いていた自分を思い出すために。 vol.4」というイベントに登壇しました。

イベントの概要

企業で働くデータサイエンティストが、各々の内的動機を語るイベントでした。

nan-d-vol4.peatix.com

発表

自分の発表


小副川 健さん(ユーザベース)

数学が専門の博士課程→富士通→ユーザベースと、黎明期からデータサイエンティストの経験を積んできた小副川さんの発表でした。事業会社の中の人として分析する価値や面白さについて語ってくださり、自分としても同意できる部分が多いお話でした。

吉田 勇太さん(ブレインパッド)

受託分析会社で5年間データサイエンティストとして働いている吉田さんの発表でした。受託分析では分析部分に専念するように見えますが、実は本当に喜ばれるのはビジネス課題設計や意思決定という点が興味深かったです。「分析はただの道具」「単なるお金をもらっている業務ではなく、自分の生き方そのものにしたい」というメッセージが印象的でした。

マスクドアナライズさん(フリーランス

大学卒業以来IT業界で働き、現在フリーランスとしてマスクドアナライズさんの発表でした。「IT業界はヤクザと同じくらいエキサイティング」と話す中で、データサイエンティストのキャリア論について、笑いをはさみながら議論してくださいました。聴衆の期待通り、プロレス業界の獣神サンダー・ライガーさんの生涯を紹介しつつ「自分の道は自分で作るしか無い」という(思いのほか?)至極まっとうな話が展開されていました。

樫田 光さん(メルカリ / メルペイ)

メルカリ/メルペイでデータアナリストとして働く樫田さんの発表でした。企業に務めてからの遍歴を語りながら「英語はできなくても、データ・数字は世界共通言語だと知った」「自分の武器となるものを求めた」「自分の測りで物事を見ていても、周りは待ってくれない」「Yes, Noはほぼ決まっていて、実は今やるか先延ばしするかという問いが多いかもしれない」など、含蓄に富むメッセージが多かったです。現在35歳の樫田さんがプログラミング未経験だった10年前のご自身を振り返って「何かを始めるのに遅すぎることはない」とお話されていたのは非常に力強く心強いなあと感じました。

おわりに

改めて自分のキャリアを見つめ直す良い機会となりました。皆さんのお話がそれぞれ興味深く、1人の聴衆としても満足度が高かったです。

個人的に、自分が今の会社を選んだ理由はどこかで語ってみたいと常々思っていたので、このような登壇の機会を頂けて非常に光栄でした*1

参加者・発表者・運営の方々や、素敵な会場をご提供いただいたユーザベースさんにお礼申し上げます。

f:id:upura:20190906193550p:plain

*1:以前にキャリア論について登壇した際には社外活動の話が主でしたupura.hatenablog.com

csv化で文字列になったlistやdictを元に戻す

csv化すると文字列になってしまう仕様があるのでpickle形式などで保存するのが良いですが、諸般の事情でcsvで読み込む想定の場合の一つの解決策として、ast.literal_eval() *1*2 を使う方法を紹介します。

具体例

冒頭でastとpandasをimportします。astは標準ライブラリに含まれているので、pip installなどは不要です。

import ast
import pandas as pd

今回は次のような単純なDataFrameを題材にします。

df = pd.DataFrame({
    'sample': [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
})
df

f:id:upura:20190903190136p:plain

要素を確認すると、list型になっています。

df['sample'][0], type(df['sample'][0])
([1, 2, 3], list)

このDataFrameを一旦csvに吐き出した後に改めて読み込むと、要素は文字列型に変換されています。

df.to_csv('sample.csv', index=False)
df2 = pd.read_csv('sample.csv')
df2['sample'][0], type(df2['sample'][0])
('[1, 2, 3]', str)

文字列を split() して分割する方法もありますが、ここでは ast.literal_eval() を使うことで list 型から文字列型に変換しました。ast.literal_eval() はdict型への変換にも対応しています。

df2['sample_list'] = [ast.literal_eval(d) for d in df2['sample']]
df2

f:id:upura:20190903190804p:plain

df2['sample_list'][0], type(df2['sample_list'][0])
([1, 2, 3], list)

おわりに

本記事では、ast.literal_eval() を用いて csv 化で文字列になった list や dict を元に戻す方法を紹介しました。実装はNotebook形式でGitHubでも公開しています*3

Poincaré Embeddings でJ1リーグのチーム・選手を可視化

ふと「Poincaré Embeddings」*1で遊んでみたいと思い立ち、サッカーJ1リーグのデータで試してみました。

Poincaré Embeddings

Poincaré Embeddingsに関する説明は、ABEJA*2やscouty*3のブログに譲ります。

Poincaré Embeddings は端的に言うと word2vec の埋め込み先をユークリッド空間ではなく双曲空間にするという手法で、階層構造やべき分布をもつデータを埋め込むという問題設定において、低次元でもよい表現を与えられるという特徴があります。

Poincaré Embeddings による職種の類似度計算とその利用 - LAPRAS AI LAB

gensimでの実装とデータセット

Poincaré Embeddingsを手軽に試すに当たって、gensimでの実装*4が存在します。

この実装に渡すデータセットの形式は次の通りです。データセットはタプルを要素に持つリスト形式で、各タプルは('選手名', 'チーム名')のような関係性を持っています。

[('アウグスト ペドロ デ ソウザ', '鹿島アントラーズ'),
 ('アウグスト ペドロ デ ソウザ', '川崎フロンターレ'),
 ('アジエル アモリム', '湘南ベルマーレ'),
 ('アジエル アモリム', '浦和レッズ'),
 ('アデミウソン', '横浜F・マリノス'),
 ('アデミウソン', 'ガンバ大阪'),
 ('アドリアーノ フェヘイラ', 'セレッソ大阪'),
 ('アドリアーノ フェヘイラ', 'ガンバ大阪'),
 ('アマラオ', 'FC東京'),
 ('アマラオ', '湘南ベルマーレ')]

一般にこのような形式で存在しているデータセットはさほど多くなく、今回も全工程の中で特にデータセットを作る部分に苦心しました。

今回は「J1リーグの各チームの歴代所属選手の可視化」という題材に落とし込むことで、Poincaré Embeddingsに適した階層構造を持つデータセットを準備できました。収集には「FootballGEIST」*5を利用しています。具体的には、J1リーグ全18チームそれぞれの歴代所属選手のページからデータを収集し、gensimの実装に渡せる形式にpandasで加工しました。

Poincaré Embeddingsの学習

パッケージのインポートをします。ここでplotlyのバージョンが3以上だと可視化の際にエラーが出ます*6

from gensim.models.poincare import PoincareModel
from gensim.viz.poincare import poincare_2d_visualization
from IPython import display
from plotly.offline import init_notebook_mode, iplot
import pandas as pd
 
init_notebook_mode(connected=True)

環境に入っているバージョンを確認し、必要ならば2.7.0辺りのバージョンを入れておきます。

# import plotly
# plotly.__version__
# '2.7.0'

!pip install plotly==2.7.0

先の節で用意したデータセットを用いて、Poincaré Embeddingsの学習を実行します。今回の場合、epochsは2000回程度で十分なようでした。

model = PoincareModel(train_data, size=2, negative=8)
model.train(epochs=5000)

次のコードでplotlyでの可視化を実行できます。show_node_labelsにはラベルを付ける項目を指定します。

relations_set = set(train_data)
figure_title = ''
iplot(poincare_2d_visualization(
    model,
    relations_set,
    figure_title,
    num_nodes=0,
    show_node_labels=['浦和レッズ'] + urawa
))

可視化の結果は次の通りです。チーム名が中心に来て、円周側に選手が配置されています。 gensimの実装では正則化の影響で周囲にノードが集結しすぎないような工夫がなされているため、ある程度の数のノードが中心付近に残っている模様です*7

f:id:upura:20190901021328p:plain

浦和レッズ所属経験のある選手にラベルを付与したところ、大半は右下に固まりました。興味深いのは、チーム名としての「浦和レッズ」の近くに「サンフレッチェ広島」が配置されている点です。森脇・柏木・槙野・西川・闘莉王など、サンフレッチェ広島から浦和レッズに移籍した選手の影響ではないかと推察しています。

次の図では、インタラクティブにデータを閲覧できます。

ちなみに、次のtwitterの投稿の際は学習が不十分だった模様です。


活用方法

個々のベクトルの値は、次のような形で参照できます。

model.kv['浦和レッズ']
array([ 0.64337554, -0.49962734])

得られたベクトルの活用方法としては、例えば一定の括りで少数派に当たるデータをまとめ上げる、類似するデータを検索するなどの方法が考えられます。Kaggleなど教師あり学習の文脈では、カテゴリ変数の粒度が粗い場合などに、活用の余地があり得るかなと思いました。

おわりに

本記事では、Poincaré Embeddings でJ1リーグのチーム・選手を可視化しました。実装はNotebook形式でGitHubにて公開しています*8

データサイエンティストが活躍する系の映画をオススメしてもらった

私のtwitterでのしょうもない呟きに思いの外たくさんのリプライを頂戴したので、自分用の整理として推挙された映画をまとめます。広範な意味でのデータサイエンスを扱う映画も含まれていると思います。

既に観た映画

次の3作品は、既に私が鑑賞済の映画です。

マネーボール』(2011)


メジャーリーグの貧乏球団アスレチックスを、常勝軍団に作り変えた男ビリー・ビーン
野球の常識を覆し球史に刻まれた「マネーボール理論」が起こした奇跡。完全映画化!

『マネーボール』予告編 - YouTube

イミテーション・ゲーム/エニグマと天才数学者の秘密』(2014)


第2次世界大戦時、ドイツの世界最強の暗号エニグマを解き明かした天才数学者アラン・チューリングの波乱の人生を描いた伝記ドラマ。劣勢だったイギリスの勝利に貢献し、その後コンピューターの概念を創造し「人工知能の父」と呼ばれた英雄にもかかわらず、戦後悲劇の運命をたどったチューリングを、ベネディクト・カンバーバッチが熱演する。

映画『イミテーション・ゲーム/エニグマと天才数学者の秘密』予告編 - YouTube

アルキメデスの大戦』(2019)


1933年(昭和8年)、戦艦大和の建造をめぐる“机の上の大戦”が始まる。
これは、帝国海軍という巨大な権力に立ち向かい、数学で戦争を止めようとした男の物語。

映画『アルキメデスの大戦』予告【7月26日(金)公開】 - YouTube

ネタバレ要素を含みますが、以下に鑑賞録を記しています。

upura.hatenablog.com

オススメしてもらった映画

『NUMBERS 天才数学者の事件ファイル』(2005)

www.happyon.jp

犯罪者の行動を予測する公式を作る天才数学者の弟の協力で、さまざまな難しい犯罪を解明するFBIエージェントを描くドラマシリーズ。

NUMBERS 天才数学者の事件ファイル が見放題! | Hulu(フールー) 【お試し無料】

『ミッション: 8ミニッツ』(2011)


列車爆破事故の犯人を見つけるべく、犠牲者が死亡する8分前の意識に入り込み、爆破直前の列車内を追体験していく男の運命を描く。困難なミッションを課せられた主人公を、『ブロークバック・マウンテン』のジェイク・ギレンホールが熱演。巧妙に練り上げられたプロットと先の読めないストーリー展開に引き込まれる。

映画『ミッション:8ミニッツ』特報 - YouTube

エクス・マキナ』(2014)


人間と人工知能が繰り広げる駆け引きを、限られた登場人物と舞台設定や目を引くビジュアルで活写する。

映画『エクス・マキナ』予告編 - YouTube

『ドリーム』(2016)


2017年 第89回アカデミー賞3部門(作品賞、助演女優賞、脚色賞)ノミネート
宇宙開発史上の偉業を支え、新しい時代を切り開いた知られざる3人の女性がいた――

映画『ドリーム』予告A - YouTube

『メッセージ』(2016)


ある日突然、巨大飛行体が地球に。
その目的は不明―
未知なる飛行体が突如出現、彼らは人類に何を伝えようとしているのか?

映画『メッセージ』本予告編 - YouTube

『スノーデン』(2016)


米国最大の機密を暴いた男。彼は、英雄か。犯罪者か―。
元CIA職員エドワード・スノーデンの知られざる人物像に迫るヒューマンドラマ。

映画『スノーデン』 予告編 - YouTube

「Sports Analyst Meetup #4」を開催&LTしました #spoana

はじめに

「Sports Analyst Meetup #4」を開催しました。前回に引き続き、自分自身もLTで発表しました。

spoana.connpass.com

発表資料

発表資料はこちらにまとまっています(今後、資料が公開され次第追加していきます)。

spoana.connpass.com

togetter

Twitterの #spoana タグの付いた投稿は、下記にまとめています。

togetter.com

ロングトーク①高久侑也さん(株式会社Sportip)

  • Sportip*1のCEOを務める高久さんによるお話でした
  • Sportipは、競技者の動きや姿勢など個人のデータを収集・分析できるような仕組みを提供しています
  • デモも含めて、Sportipの取り組みやビジョンなどを語っていただきました

なお今回の会場は、Sportipが入居しているNTTドコモベンチャーズ*2にご提供いただきました。ありがとうございました。

ロングトーク② TKB84さん

  • 「スポーツ分析業界に飛び込んで半年で見えてきた、現状の概観と今後の展望」という題目での発表でした
  • スポーツ分析業界で実際に働き始めたTKB84さんに、ご自身の経歴や現状の分析、そして「今後どのような人材が求められるか」という展望などの生々しい話も含めて語っていただきました。

LT

今回もどれも面白い12本のLTが実施されました。LTの内容については、発表資料やtogetterをご参照ください。

自分の発表

私の発表は、以前にブログで公開した内容*3*4*5*6をまとめたものです。GitHub*7で実装も公開しています。

おわりに

第4回は数理系な話が多く、個人的な満足度が高い回となりました。また以前の登壇の反響をご共有くださった方や、自分の第3回での発表*8を追加検証してくださった方もいて、一定回数を重ねてきたことを実感した場面も多かったです。参加してくださった皆さま、ご登壇してくださった皆さま、会場をご提供いただいたSportipとNTTドコモベンチャーズの皆さまに、改めて御礼申し上げます。