Closed Minsu-Song closed 1 year ago
안녕하세요 @Minsu-Song 님, LDA의 경우 기본적으로 ParallelScheme.PARTITION
알고리즘을 사용합니다. 다른 알고리즘과의 속도를 비교해보고 싶으시다면 아래와 같이 parallel 옵션을 바꿔가며 실험해보시면 되겠습니다.
model.train(1000, parallel=tp.ParallelScheme.NONE) # 병렬화 사용 안함
model.train(1000, parallel=tp.ParallelScheme.COPY_MERGE) # Copy & merge 사용
model.train(1000, parallel=tp.ParallelScheme.PARTITION) # Partition 사용 (기본값)
이와는 별개로 토픽의 개수가 수백만개 이상이라고 말씀하셨는데, 사실 토픽 모델링은 (document, vocab)
행렬을 (document, topic) * (topic, vocab)
행렬로 압축하는 것이기 때문에 어휘의 개수보다 토픽의 개수가 더 많으면 의미가 없습니다. 보통 문헌에 나오는 어휘들이 수 만개에서 많아봐야 십여만개 정도 되는걸 감안할때, 그보다 훨씬 많은 수 백만개의 토픽을 가지고 토픽 모델링을 수행하는건 잘못된 접근이라고 생각합니다. 토픽 개수는 수 백개에서 수 천개 정도가 현실적으로 의미있는 범위일듯합니다.
GPU로 돌리는 시도도 해봤는데요, 사실 LDA의 경우는 샘플링 연산은 단순하고 메모리 접근이 많은 편이라 GPU에서 다소 비효율적으로 돌아갑니다. Neural Topic Model 계열이라면 GPU에서 돌리는게 유리할 수 있습니다만 tomotopy에서는 이에 대한 계획이 없습니다.
안녕하세요.
빠르고 정확한 답변 감사합니다.
죄송합니다. 제가 잘못말씀드렸네요.
토픽이 아닌 어휘가 수백만개라는 말씀을 드린것이었습니다.
GPU에 대한 답변도 감사합니다!
안녕하세요,
tomotopy에서 LDA model을 돌리는 중에 궁금한 점이 있어서 여쭤봅니다.
제가 부족한 부분이 많아 기본적인 질문이라도 양해 부탁드립니다.
여쭤보고 싶은 것은 두 가지 입니다.
Q1. 제가 시도한 부분은 수 백만개 이상의 토픽으로 tp.LDAModel로 모델 설정 후 train을 할 때 속도를 향상시키는 것입니다. 이를 위해서, 0.5.0 버전 이후에 추가된 parallel 옵션과 ParallelScheme.PARTITION 알고리즘을 사용해 보려고 model.train(0, parrell = 숫자), model.train(0, PARTITION = 4) 등의 여러가지 시도를 해보았는데 에러가 뜨거나 속도 향상을 체감(및 측정)하지 못했습니다. 혹시, tomotopy API documentation의 train 함수에서 "병렬화의 기본값은 디폴트로 최적의 방법을 tomotopy가 선택"해준다고 하는데 그럼 속도를 더 향상시킬 수는 없다고 해석해야 될까요? 구글링도 해봤지만 원하는 답을 찾지 못하여 여쭤보게 되었습니다.
Q2. tomotopy를 GPU 환경(CUDA같은)에서 돌리는 것도 고려가 되고 있나요?
Topic Modeling에 있어 만들어주신 좋은 코드 잘 사용하고 있습니다.
감사합니다.