mlsys-lab-sogang / Social-Rec-Sys

Social recommendation using GNN
0 stars 0 forks source link

[Transformer_modified] dataset.py: IndexError 문제 #1

Closed skdbsxir closed 11 months ago

skdbsxir commented 12 months ago

social graph와 user-item graph에서의 user 수가 다르며, Ciao, Epinions 양측 모두 social graph에서의 user 수가 user-item graph에서의 user 수 보다 적음. $\rightarrow$ len(social['user']) < len(user_item['user'])

현재 Dataset에선 다음의 흐름으로 dataset을 구성하여 return함.

  1. 생성한 social random walk sequence 파일, user-item 상호작용 table 파일을 읽어와 ndarray로 변환 (이 파일들은 전체 사용자들에 대한 정보를 담고 있음)
  2. __getitem__() 에서 우선 random walk sequence와 degree sequence를 추출 $\rightarrow$ 이때 random walk sequence에 해당하는 값은 social graph에 존재하는 user_id 값임.
  3. 앞서 추출한 random walk sequence에 존재하는 user_id 값을 indexing 값으로 활용해, 각 user마다 상호작용한 item 정보를 담은 ndarray에서 indexing을 통해 해당하는 user_id에 대한 item 정보를 추출

문제점

접근방안

  1. 양쪽 데이터에서 존재하지 않는 사용자를 제거 후, user_id값을 다시 re-arange 한 후에 random walk sequence를 생성
  2. 존재하지 않는 사용자를 제거하지 않고 단순 indexing으로 호출 $\rightarrow$ 이 경우엔 자원을 더 소비하지만, user-item에 존재하지 않는 위치로 indexing을 하는 경우가 X. (Ciao, Epinions 모두)
    
       user_id product_id rating
    0            0        [0]    [0]
    1            1        [9]    [4]
    2            2       [26]    [3]
    3            3       [52]    [4]
    4            4       [65]    [5]
    ...        ...        ...    ...
    22160    22162    [30953]    [4]
    22161    22163   [236586]    [5]
    22162    22164      [386]    [3]
    22163    22165    [65913]    [5]
    22164    22166    [41790]    [3]

[22165 rows x 3 columns] user_id degree 0 15373 82 1 9831 969 2 4247 31 3 4644 14 4 6823 59 ... ... ... 18093 21383 2 18094 13181 1 18095 15645 1 18096 897 1 18097 8000 1

[18098 rows x 2 columns]

skdbsxir commented 11 months ago

batch_size를 작게 하는 경우 올바르지 않은 id로 접근하는 경우가 적지만, 일반적인 크기로 늘리는 경우 문제가 자주 발생.

skdbsxir commented 11 months ago

작업중이던 rating.csv 파일이 예전 social graph에 없던 사용자들을 제외 시켰던 파일인 것으로 확인. .mat 을 이용해 처음부터 다시 생성한 결과 문제가 없던 것으로 확인됨 (230906)

skdbsxir commented 11 months ago

rating엔 존재하지만 trustnetwork에 존재하지 않는 사용자를 filtering하고, 남은 사용자들에 대해 user_id를 re-arrange하는 함수를 통해 handling. (230912)

https://github.com/mlsys-lab-sogang/Social-Rec-Sys/blob/6315b2052d316fcf74c2f2941904d83813e4635d/Transformer_modified/data_utils.py#L89C1-L89C90