ABOUT ME

Today
Yesterday
Total
  • Beam Search
    머신러닝 및 딥러닝 2020. 12. 22. 23:31

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

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

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

    def naive_beam_search_decoder(predictions, k):
    sequences = [[list(), 1.0]]
    for row in predictions:
    all_candidates = list()
    for i in range(len(sequences)):
    seq, score = sequences[i]
    for j in range(len(row)):
    new_seq = seq + [j]
    new_score = score * -log(row[j])
    candidate = [new_seq, new_score]
    all_candidates.append(candidate)
    ordered = sorted(all_candidates, key=lambda tup: tup[1])
    sequences = ordered[:k]
    return sequences
    view raw beam_search.py hosted with ❤ by GitHub
    import beam_search
    import random
    seq_len = 4
    V = 10
    predictions = [[random.random() for _ in range(V)] for _ in range(seq_len)]
    def main():
    beam_search.naive_beam_search_decoder(predictions , 5)
    if __name__ == "__main__" :
    main()
    view raw main.py hosted with ❤ by GitHub

    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를 이용할까?

     

    '머신러닝 및 딥러닝' 카테고리의 다른 글

    nn.Module에서 super  (1) 2021.01.10
    np.zeros 와 np.zeros_like 의 차이  (0) 2021.01.06
    NLP 에서의 embedding size  (0) 2021.01.01
    numpy의 rand와 randn의 차이  (0) 2020.08.09
    시계열 데이터란?  (0) 2020.08.08

    댓글