- TF-IDFでデータベース内の類似テキストを検索する Part 1 (基本機能編)
http://pgsqldeepdive.blogspot.jp/2016/07/tf-idf-part-1.html - TF-IDFでデータベース内の類似テキストを検索する Part 2 (実践編)
http://pgsqldeepdive.blogspot.jp/2016/07/tf-idf-part-2.html
そのため、本エントリではこの UDF をもう少し詳細に見ながら、パフォーマンスを改善する方法を探ります。
■euclidean_distanceの性能分析
処理時間がかかっていることが分かった euclidean_distance 関数ですが、改めて処理を詳細に見ていきます。
CREATE OR REPLACE FUNCTION euclidean_distance(tfidf_a jsonb, tfidf_b jsonb) RETURNS float8 AS $$ from sklearn.metrics.pairwise import euclidean_distances import json aa = json.loads(tfidf_a) bb = json.loads(tfidf_b) w = list(set(aa.keys()).union(set(bb.keys()))) vec_a = [] vec_b = [] for t in w: if t in aa: vec_a.append(aa[t]) else: vec_a.append(0) if t in bb: vec_b.append(bb[t]) else: vec_b.append(0) distance = euclidean_distances([vec_a], [vec_b]) return distance[0][0] $$ LANGUAGE 'plpython2u';まず、ボトルネックの確認のため、少しずつこの関数のコードをコメントアウトして実行時間を比較してみると、