AlgoPoolJa 2020. 12. 22. 23:31

NLP(자연어처리)에서 많이 사용되는 Beam Search에 대해서 알아보고자 한다.

나는 이번 논문 주제인 챗봇에 대한 모델을 만들때 해당 알고리즘을 사용했다. 마침 이번학기 때 (3-2학기) 알고리즘 수업을 들었는데 Greedy search 그리고 DFS 와 비슷한 느낌을 받았다. 

Beam Search 어떻게 생겼고 어떠한 이유때문에 NLP에서 사용되는지 알아보자

main.py 로 인하여 prediction은 2차원 리스트가 만들어 진다. 즉, 형태가 [[10개의 랜덤숫자], [10개의 랜덤숫자], [10개의 랜덤숫자], [10개의 랜덤숫자]] 으로 만들어진다. 

여기서 beam_search를 호출한다. beam_size(여기서는 k에 해당한다)는 5로 놓았다.

차근차근히 봐보자. 원래 남의 코드 보는게 진짜 인내의 과정이다. 나도 천천히 설명해 보겠다.

beam_search.py 에서는 방금 만든 prediction과 beam_size인 5를 인풋으로 받는다. 그 후 prediction의 하나인 row 즉, [10개의 랜덤숫자]를 for문에 

하고 있던 도중 수학 재시험을 본다고 한다. 다 하고 돌아오겠다. 그럼 안녕

 

왜 그럼 log를 이용할까?