Day3 (10.27, 수)

  • reader 방향성 잡기

  • 흐름 이해하기

팀원들과 대회 진행과 관련하여 회의를 진행하였는데 흐름이 내가 생각했던 것과 다소 차이가 있었다. 혼란의 연속 😫

아침 동안에는 SQuAD2.0 와 관련된 논문을 보았으나, 생각해보니 우리는 정답이 무조건 있는 task다 보니 SQuAD 1.1을 기준으로 생각하는게 맞다고 생각이 들었다.

내가 지금까지 이해한 흐름으로는 Retriever와 Reader의 구조로 우선 Test진행 방식은

  1. Question을 Retriever에 넣는다.

  2. Retriever는 그로부터 context를 추출하여 Reader에게 전달한다.

    1. 이 과정에서 top-k 식으로 추출이 가능하다. (k개의 context)

  3. Reader는 전달받은 k개의 context로부터 각각 answer를 찾아 추출한다.

    1. 각 context 별로 start logit, end logit 값을 구한다.

  4. 가장 높은 logit 값 쌍을 정답으로 추출하기

라고 생각했었다. 추가로 Reader 학습시에도 stride를 통해 나눠서 체크하게 되는데 여기서도 A context를 A1, A2, A3으로 max_length, stride를 통해 나눠지게 되면 A1, A2, A3에서 answer로 추측되는 start logit, end logit을 추출하고 위 3번과 마찬가지로 가장 높은 logit값을 가지는 index를 context 별로 추출하게 된다고 생각했다.

지금 팀 내에서 진행하기로 한 방식은 retriever 단에서 max_length 기준으로 split 하고 그걸 하나의 context단위로 나누게 된다. 그 나눠진 context중 top-k를 Reader 단에 전달하게 되고 Reader는 굳이 split하지않고 그 안에서 answer를 추출하게 된다. k개의 context 중 어느 값을 정답으로 할 지에 대해서는 연구를 진행하기로 하였다.

Reader 단에서 context단위가 아니라 split 된 context를 전달받게된다면, 결국 전달 받아서 탐색할 수 있는 데이터의 총량이 줄어들게 된다고 생각이 되었다. 이는 k를 늘려주게되면 해소될 수 있겠다고 생각이 들었다.

궁금한 것으로 Reader단이 잘려진 문장으로 학습이 되고 있었던건지, 아니면 자르고 그 값을 다시 합쳐서 학습을 한건지 체크가 필요할 것 같고, 실제로 logit값이 어떻게 형성되고 top-k를 두고 추출했을시 어떤것을 선택하게끔 구현되어있는지 검증이 필요할 것 같다.

오늘은 고민하느라 시간을 보낸 하루...

Last updated