Slide 1

Slide 1 text

© 2024 Wantedly, Inc. コサイン類似度の いろんな書き方 みんなのPython勉強会 #103 Apr. 25 2024 - @nogawanogawa

Slide 2

Slide 2 text

自己紹介 © 2024 Wantedly, Inc. - 角川拓也 - X: @nogawanogawa - 所属 - ウォンテッドリー株式会社 データサイエンティスト - ex. - ITコンサル @コンサル会社 - SE @金融系SIer

Slide 3

Slide 3 text

コサイン類似度 © 2024 Wantedly, Inc. - 機械学習の分野ではよく使用される計算 - テキストや画像など情報を embedding (埋め込み、高次元のベクトルのこと )で表現することが多い - こうしたテキストや画像の類似している度合いをコサイン類似度を使って表現 - こうした状況では大量にコサイン類似度を計算することがある

Slide 4

Slide 4 text

コサイン類似度計算のパターン © 2024 Wantedly, Inc. 今回は こちらを中心に お話します

Slide 5

Slide 5 text

多くのライブラリで効率的に計算できるようになっている © 2024 Wantedly, Inc. それぞれどうやって書くのかやってみたい!

Slide 6

Slide 6 text

Baseline: Numpyでの最もポピュラーな書き方 © 2024 Wantedly, Inc.

Slide 7

Slide 7 text

行列計算で書き換え © 2024 Wantedly, Inc. cos cos cos cos cos cos cos cos 書き換え イメージ

Slide 8

Slide 8 text

scikit-learnの関数を使う書き方 © 2024 Wantedly, Inc. 関数にわたすだけ

Slide 9

Slide 9 text

Numpyの計算をJAXで置き換えた書き方 © 2024 Wantedly, Inc. jnp.*の関数を使う

Slide 10

Slide 10 text

PyTorchで提供されているコサイン類似度関数を使った書き方 © 2024 Wantedly, Inc. 関数にわたすだけ

Slide 11

Slide 11 text

Numba(Python/NumpyのコードのJITコンパイラ)を使った書き方 © 2024 Wantedly, Inc. Numbaの 書き方で関数を定義

Slide 12

Slide 12 text

速度測定 © 2024 Wantedly, Inc. 実験の詳細: https://www.nogawanogawa.work/entry/cos_sim_cpu 適切な書き方をすると baselineの4倍ほど高速 今回測定した中では Numbaが最も高速

Slide 13

Slide 13 text

まとめ © 2024 Wantedly, Inc. ● コサイン類似度にも書き方はたくさんある ● そもそも想定する計算パターンが異なっていることも ○ ライブラリによって計算パターンが違ったりする ○ 調べた中ではsklearnは全ての組み合わせを計算することが想定されていそう に見えた ● 書き方次第で実行速度がかなり変わる ○ Numpyだけでも行列計算を用いれば十分高速に計算できる ○ 今回CPUで実行した中ではNumbaが最も高速な結果に ○ 計算部分だけ見ればJAXのほうが高速になることも見られた