코사인 유사도 탐색할때 시간 줄이기

빔밀·2023년 4월 17일
import csv
import math
import time

import pandas
import pyarrow as pa
import pyarrow.parquet as pq
import pyarrow.csv as pc

from numpy import genfromtxt
start = time.time()
data = genfromtxt('sim.csv', delimiter=',', encoding='UTF-8')
end = time.time()

def rec(idx, vect=data):
    sim_scores = list(enumerate(vect[idx]))
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
    sim_scores = sim_scores[0:10]
    recomend = [idx[0] for idx in sim_scores]
    print(sim_scores)
    print(recomend)
    
rec(1)

print(f"{end - start:.5f} sec")

이렇게 실행하면 늦고
대략 17 초

import csv
import math
import time

import pandas
import pyarrow as pa
import pyarrow.parquet as pq
import pyarrow.csv as pc



from numpy import genfromtxt
start = time.time()
py_table = pc.read_csv('sim.csv',read_options = pc.ReadOptions(skip_rows=None)) 
data = py_table
end = time.time()

def rec(idx, vect=data):
    
    sim_scores = list(enumerate(vect[idx].to_pylist()))
    print(len(sim_scores))
    print(sim_scores)
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
    sim_scores = sim_scores[0:10]
    recomend = [idx[0]+1 for idx in sim_scores]# 여기서 +1해준 이유는 정확하게는 모르겠으나 csv를 읽을 때 맨앞에 열은 날라가서 인덱스를 맞춰 줘야하기 때문에 붙힌 것이다.
    print(sim_scores)
    print(recomend)
    
rec(1)


print(f"{end - start:.5f} sec")

이렇게 실행하면 빠르다.
대략 1초

여기서 주의해야할 부분은 to_pylist() 부분이다.
이 부분은 chunkedarray를 파이썬의 list 로 변환해주는 기능을 수행한다.

이렇게 변환 해주어한다.
pyarrow에서 사용하는 table은 표시되는 수가 원래 행렬 표시와는 반대이다. 이점 주의
행과 열이 반되이다.

profile
의미있는 한줄

0개의 댓글