mlsys-lab-sogang / Social-Rec-Sys

Social recommendation using GNN
1 stars 0 forks source link

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

Closed skdbsxir closed 1 year ago

skdbsxir commented 1 year 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 1 year ago

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

skdbsxir commented 1 year ago

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

skdbsxir commented 1 year 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