본문 바로가기

AI

[논문리뷰] TaBERT: 텍스트 & 표 데이터 인식을 위한 사전학습

** 논문: https://arxiv.org/pdf/2005.08314.pdf

** 깃헙: https://github.com/facebookresearch/TaBERT

 

자연어(Natural Language, NL) 문장과 표 데이터에 대한 representation을 동시에 학습할 수 있는 사전학습 기법


Figure 1

TaBERT 학습에 대한 전체 학습도 : (A) 표 내용에 대한 스냅샷은 자연어 발화에 기반해 생성 (B) 스냅샷에 있는 각 행은 Transformer로 인코딩 되어 토큰과 셀에 대한 행별(row-wise) 인코딩을 생성함 (C) 모든 행별 인코딩은 vertical self-attention layer V로 처리되어 열 representation을 생성함


모델

3.1 자연어 발화와 테이블 스키마에 대한 representation 계산

Figure 1의 예시와 같이 자연어 질의 u와 표가 주어질 때 TaBERT는 먼저 T에 대한 내용 스냅샷을 생성한다. 이 스냅샷은 표 내용 중 인풋 질의와 가장 관련이 높은 행을 샘플링한 것으로 구성된다. 이후 각 행을 선형으로 이어붙인 후 각 행과 인풋 질의를 concat하여 Transformer(BERT)을 통해 질문 토큰과 셀에 대한 행별 인코딩 벡터를 얻는다. 각 행에 대한 인코딩은 vertical self-attention layer에 집어넣는데, 이 레이어는 열 별로 같은 열에 있는 벡터에 대해 연산을 한다. 마지막으로 pooling layer을 통해 각 질의 토큰과 열에 대한 representation을 생성한다.

 

Content Snapshot

- TaBERT의 가장 큰 특징은 단순히 열 이름 뿐만 아니라 표의 내용을 이용한다는 점

- 이는 열에 대한 정보는 단순히 열 이름만 사용하는 것보다 훨씬 많은 정보를 포함하기 때문

- 그러나 DB 표는 열의 개수가 많을 수 있고, 그 중 몇 개 만이 인풋 발화를 답변하는 데에 관련 있는 정보를 가짐

  > 따라서 인풋 질의와 가장 관련이 높은 몇 개의 열만 이용해 셀 값들로부터 필요한 것만 계산

  > n-gram overlap을 통해 열들 중 관련이 높은 top-K개 열만을 선택 (n-gram 룰을 사용한 부분이 아쉽 ㅠㅠ...)

  > K=1일 경우, 정보를 최대한 많이 포함하기 위해 각 열에서 n-gram 기준으로 가장 많이 겹치는 셀들을 모아 한 행을 구성

  > 이는 WikiTableQuestions 특성상 질문과 관련이 있는 정보를 여러 열에서 끌어올 수 있는 데에서 기인한 것으로 보임

 

Row Linearization

- 인풋 질문, 열이름, 그리고 그에 해당하는 셀 값을 concat 하여 transformer 인풋에 넣음

- 이때 셀의 데이터 타입을 그 실제값과 함께 concat하여 정보를 줌

- 예를 들어 Figure 1에서 (2,1) 셀은 다음과 같이 인코딩 됨:

- 열에 대한 linearization은 위의 정보에 대한 인코딩을 concat 하여 생성하되, 각 정보는 [SEP] 토큰으로 분리해 넣음

- 이후 선형화 된 행을 인풋 질의와 concat 해 Transformer 인풋으로 넣음

 

Vertical Self-Attention Mechanism

- TaBERT의 기본 Transformer 모델은 각 행의 셀 & 질문에 대한 인코딩을 아웃풋으로 리턴

- 이러한 행 단위의 벡터는 독립적으로 계산되기 때문에, 다른 행간의 정보를 교환하기 위해 vertical self-attention을 이용

- 위의 그림에서 볼 수 있듯 V층의 stacked vertical 단위의 self-attention layer을 가진다. 

  > vertical attention에 대한 align 된 인풋을 생성하기 위해, (i, j) 위치에 있는 각 셀에 대한 고정된 길이의 initial vector 계산

  > 이 벡터는 각 셀에 대한 열 이름 [SEP] 데이터 타입 [SEP] 셀 값 [SEP] 의 Transformer 아웃풋을 mean-pooling 하여 만듦

  > 이후 자연어 질의에 있는 토큰 벡터의 시퀀스를 셀 벡터와 concat 하여 vertical attention layer의 인풋으로 사용한다.

  > 각 vertical attention layer은 Transformer layer과 같은 파라미터를 사용하지만, vertical 하게 align 된 (같은 질문 토큰과 열에 해당하는 자연어 질의와 셀) 벡터에 대해서만 작동

 

Utterance and Column Representations

- 열 c_j에 대한 representation은 vertically aligned 셀 벡터들에 대한 mean-pooling을 이용해 계산

- 또한 자연어 질의의 각 토큰 x_j에 대한 토큰도 비슷한 방식으로 계산

- 이 representation들은 다운스트림 자연어 처리 태스크에 사용

- 또한 [CLS] 토큰을 통해 표에 대한 고정된 representation T를 얻을 수 있고, 이는 여러 DB 표에 대한 parser로 사용 가능

 

3.2 사전학습 과정

데이터

잘 구축된 자연어 택스트와 구조화 테이블에 대한 대량의 코퍼스를 얻기 힘들기 때문에, 웹에 존재하는 semi-structured 테이블을 사전학습 데이터로 사용한다. 첫 번째로 영어에 대한 parallel 데이터를 수집하였는데, 영문 위키피디아와 WDC WebTable Corpus에 대해 표와 그 주변에 있는 자연어 텍스트를 수집하였다. 이 데이터는 매우 noisy 하기 때문에, relational table이 아닌 표(header가 없는 표), HTML 스니팻 등 불필요한 데이터를 aggressive 하게 클렌징하여 사용하였다.

 

사전학습용 데이터는 총 26.6백만 코퍼스를 포함한다.

 

목적함수

- 자연어 텍스트: Masked LM을 통해 사전학습

- 열 representation:

  > 이 결과물은 △열에 대한 일반적인 정보(열 이름/ 데이터 타입 등..) △자연어 텍스트와 관련 있는 셀 값을 포함해야 함

  > Masked Column Prediction(MCP) - 마스킹된 열의 이름과 데이터 타입을 복원하는 태스크

    . 컬럼 중 랜덤하게 20%의 열을 선택하고, 각 행의 linearization에 대해 열 이름과 데이터 타입 부분을 마스킹

    . Column representation c_j가 주어질 때, TaBERT는 마스킹된 토큰에 대해 multi-label classification 수행

  > Cell Value Recovery(CVR) - vertical self-attention 이후에 컨텐츠에 대해 필요한 정보가 남아있게 하기 위한 태스크

    . 마스킹된 컬럼 c_j에서 CVR은 셀 벡터에 조건부로 생성된 content 스냅샷으로부터 각 셀의 원래 토큰 s_{i,j}을 복원해야 함

    . 예를 들어 셀 s_{2,1}에 대해 셀 벡터를 이용해 그 값 2005를 복원해야 함

    . 하나의 셀에는 여러 개의 토큰이 포함되어 있을 수 있으므로, span기반의 predictiopn objective를 적용

    . 즉, 셀 토큰 s_{i,j}_k를 예측하기 위해, 이 셀에 대한 위치 임베딩 e_k와 셀 representation 벡터 s_{i,j}를 두 층의 네트워크 f(.)에 GeLU activation을 사용해 통과시키고, f(.)네크워크의 결과로 나온 아웃풋에 softmax를 태워 원래 토큰  s_{i,j}_k를 예측하게 함.


결과

WikiTableQuestions & SPIDER 데이터셋에 적용