-
[yongggg's] Span-based Joint Entity and Relation Extraction with Transformer pre-training (SpERT)Machine & Deep Learning 2022. 5. 24. 17:19
안녕하세요. 오늘은 자연어 처리 분석 중에서 text sentences의 entity 추출(NER)과 Relation 추출(RE)을 한 번에 예측하는 모델인 SpERT를 소개하겠습니다. 'span' 이라는 의미가 선형 대수학에서의 의미가 아니라 subset 의미로 받아들이시고 이해하시면 이해가 더 빠를 것 같습니다! 소개 시작하겠습니다!
Introduction
SpERT는 span-based joint entity and relation extractiontask를 처리하는 모델이다. 이 task는 두 개의 subproblems로 구성되며, 두 문제(NER, RE)를 분리하여 푸는 것이 아니라 한 번에 처리한다.
- namely the identification of entities (entity recognition)
- relations between them (relation classification)
SpERT는 pre-trained BERT 모델을 core로 사용하며, span-based approach 로 문제를 접근한다. span-based approach는 다음과 같으며, 본 연구의 모델에서는 이러한 두 가설에 대해 완전 검색을 수행한다.
- Any token subsequence (or span)을 potential entity로 설정한다.
- Relation은 위 spans의 어느 쌍 사이에서든지 발생할 수 있다.
Advantages
- span-based approach는 overlapping entities를 식별할 수 있다. 예를들어 “codeine intoxication”(마약 중독)안의 codeine(마약)을 식별할 수 있음.
- BERT와 같은 Transformer 기반의 모델은 계산량이 많지만, spert의 접근 법은 input sentence 당 오직 하나의 forward pass를 수행하고 결과를 내는 embedding에 대해 경량 추론을 수행함.
- 다른 최근의 접근 방식과 비교하여, 이 모델의 얕은 entity/relation 분류기를 사용하여 간단한 downstream 처리를 특징으로 함
- 또한 특정 마커를 사용하지 않고, 단일 bert 패스안의 동일한 문장에서 negative sample을 추출한다. 이는 효율적으로 학습하게하고 모든 spans을 search 할 수 있도록 함.
Contributions
- span-based approach의 새로운 접근 방법을 조사했고, 간단하지만 효율적이며, 선행 연구와 비교하여 일관적으로 2.6% 까지의 extraction F1 score를 올림.
- 본 연구의 모델이 성공할 수 있는 중대한 이유를 조사함.
- 동일한 문장의 특정 negative sample을 사용하지 않고 local context 표현을 사용하여 효율적인 학습을 수행하며, 충분한 수의 강력한 negative sample를 사용하는 것이 중요한 역할을 함.
- 국소적인 context representation은 특히 긴 문장의 경우에 유익함.
- 사전 훈련의 효과를 연구하고 사전 훈련 모델을 미세 조정하면, 처음 부터 훈련한 것보다 성능이 크게 향상 된다는 것을 보여줌.
Approach
[그림 1]에서 input sentence는 tokenize 되어 n-byte pair encoded (BPE)토큰 시퀀스를 얻는다. BPE token은 BERT 모델을 통과하여 $ (e_{1}, e_{2}, e_{3}, …, e_{n}, c) $ 의 n+1 길이의 embedding sequence 얻는다. (마지막 임베딩 c는 special classifier token으로 전체 문장의 context를 담고 있다.) 고전적인 relation classification과 달리 본 연구의 접근 방식은 모든 Token subsequence (or spans; entity 후보군 집합)에서 entity를 detect 한다.
ex) (we, will, rock, you) 는 (we), (we, will), (will, rock, you), etc..등의span으로 mapping되며 각 span을 [그림 1]의 (a) 단계에서 entity types으로 분류한다. 다음으로 non-entities를 filtering 하며 (b), 마지막으로 남아있는 entities들의 모든 쌍을 relation으로 분류한다.
[그림 1] SpERT structure (processing step) 각 (a), (b), (c) 단계를 상세히 설명하면, 다음과 같다.
a ) Span Classification
span classifier는 임의의 후보 span을 input으로 취한다. 이 때, 학습 시 임의의 후보 span은 positive sample과 hyperparameter로 세팅한 negative_entity_count와 max_span_size을 합하여 후보 span을 생성한다. 만약, negative_entity_count가 100이고 max_span_size가 10 이라면, 28개의 토큰을 갖는 문장의 후보 span은 다음과 같다.
- ex) (1,2) ; (1 부터 2), (2,3), ..., (27,28), (1,3) ; (1 부터 3), (2,3), ..., (26,28), ..., ...,(1,11) ; (1 부터 11 ), ... (8,28)
위의 집합에서, positive entity 집합과 겹치지 않는 랜덤 100개의 negative sample을 고른다.
$ s := (e_{i}, e_{i+1}, …, e_{i+k}) $ 를 span이라고 정의하고 $\xi$를 이미 정해진 entity categories의 집합이라고 했을 때, 이 span classifier는 span s를 $\xi \cup${none} 중의 하나의 class로 매핑한다. (none class는 entites를 이루지 않는 spans을 나타낸다.)
이 모듈의 Input은 세 부분으로 구성된다.
- fusion $f(e_{i}, e_{i+1}, e_{i+k})$를 사용하여 결합한 span의 BERT 임베딩 (붉은색)을 input으로 사용하며, "fusion function $f$"는 max-pooling이 가장 좋았음.
- width에 대한 고정 크기 embedding(푸른색)을 input으로 사용함. 예를 들어, width 가 k+1인 span이 주어졌을 때, 각 span width=1,2, … 에 대한 고정 크기 embedding이 담긴 전용 embedding matrix에서 width embedding $w_{k+1}$을 가져옴.
- 이 embeddings은 backpropagation으로 학습되며, 모델이 span width에 걸쳐 이전에 대한 것을 통합할 수 있도록 한다. (너무 긴 spans는 entity를 나타낼 가능성이 낮다는 점에 유의해야 함.
- 이는 다음과 같이 span representation 으로 나타낼 수 있다. ($ \circ $: concatenation)
$$ e(s) := f(e_{i}, e_{i+1}, …, e_{i+k}) \circ w_{k+1} \qquad \qquad (식 1) $$
- 마지막으로 전체적인 문장 context를 담고있는 classifier token c ([그림 1]의 초록색)를 추가함. (example) spouse or says와 같은 keywords는 entity classes에 대한 강력한 indicator 이기 때문에, 문맥은 모호함의 중요한 source를 형성함.
span classifier의 최종 input은 $x^{s} := e(s) \circ c$와 같으며, $ \hat{y^{s}} = softmax(W^{s} * x^{s} + b^{s}) $ 처럼 각 entity class의 사후 확률을 구할 수 있음.
b ) Span Filtering
가장 높은 점수를 받은 class, 즉 span을 살펴봄으로써 classifier의 output(위의 softmax 식)은 각 span이 속하는 class를 추정한다.
none class로 배정(예측)된 모든 spans을 걸러서(필터링하여) entity를 구성하는 것으로 추정되는 spans S 집합을 남긴다. 10 토큰보다 긴 spans을 사전에 걸러 span classification cost를 O(n)으로 제한한다.
c ) Relation Classification
사전 정의된 relation classes 집합을 $R$이라고 정의하면, relation classifier는 $S \times S$에서 추출한 entities의 각 후보 쌍 $(s_{1}, s_{2})$을 처리하고 $R$ 집합에서 어느 관계가 있는지 아닌지 여부를 추정한다. relation classifier 의 input은 다음과 같이 두 부분으로 구성된다.
- 두 entity 후보 $s_{1}, s_{2}$를 표현 하기 위해, (식 1)의 융합된 BERT/width embedding $e(s_{1}), e(s_{2})$를 사용함.
- spouse 나 president와 같은 context로 부터 나온 단어는 표현된 relation의 중요한 지표임.
물론, token c는 문맥을 담고 있을 것이지만, 본 연구에서는 다수의 relations을 표현하는 long sentences에는 이것이 적합하지 않다는 것을 발견함.
따라서, 이 token 대신에 entities의 직접적인 주위의 words로 부터 도출되는 more localized context를 사용함. [그림 1]에서 노란색 부분을 보면, 첫 번째 entity의 끝 부터 두 번째 entity의 시작이 span으로 주어졌을 때, 두 entity 사이의 context를 max-pooling으로 context representation $c(s_{1}, s_{2})$를 얻음. (만약 range 가 empty라고 하면, $c(s_{1}, s_{2})=0$으로 정한다.)
span classifier와 마찬가지로 relation classifier의 input은 위의 features를 concat하여 사용한다. relation은 대체로 비대칭이기 때문에, $(s_{1}, s_{2})$와 $(s_{2}, s_{1})$ 모두를 분류해야 한다. 즉 inputs은 다음과 같다.
$$ \begin{align} x^{r}_{1} = e(s_{1}) \circ c(s_{1}, s_{2}) \circ e(s_{2}) \\ x^{r}_{2} = e(s_{2}) \circ c(s_{1}, s_{2}) \circ e(s_{1}) \end{align}$$
$x^{r}_{1}$과 $x^{r}_{2}$는 모두 single-layer classifier를 통과한다.
$$ \begin{align} \hat{y}_{1/2} := \sigma (W^{r} * x^{r}_{1/2} + b^{r}) \\ where \, \sigma \, : \, sigmoid \, of \, size \, number \, of \, R \end{align} $$
이 값이 높으면 relation이 존재할 확률이 높다는 것이며, 실제 모델에서는 threshold $\alpha$ 이상이면, relation이 있다고 판별하고, threshold 미만이라면, relation이 없다고 예측한다.
Training
size embeddings $w$ ([그림 1]의 파란색) 뿐만 아니라 span/relation classifier의 parameters를 학습 하고 BERT를 fine-tune 한다. 지도 학습 이므로 문장에 annotated entities (entity type 포함) 과 relation이 존재해야 하며, joint loss (entity classification loss : $ L^{s} $, relation classification loss : $ L^{r} $의 합)으로 사용했다.
$$ L=L^{s} + L^{r} $$
$ L^{s} $ 는 none label을 포함한 span clssifier's의 cross-entropy loss 이며, $ L^{r} $ 는 relation classes에 걸친 binary cross entropy loss이다. 두 loss는 각 배치의 sample에 대해 평균되며, class 가중치는 적용되지 않는다. 훈련 batch는 B sentences로 구성되며, 여기서 두 classifier에 대한 sample을 추출한다.
- span classifier 에서는 positive samples의 labeled entities $ S^{gt} $를 이용하고 고정 개수의 negative samples로 random non-entity spans의 $ N_{e} $를 사용함. (예를 들어, "In 1913, Olympic legend [Jesse Owens]$ _{people} $ was born in [Oakville, Alabama] $ _{Location} $." 문장이 주어졌다면, negative sample은 "Owens" 혹은 "born in"이 되도록 함.)
- relation classifier를 학습하기 위해, positive sample의 ground truth relation을 사용했고 relation이 label 매겨지지 않은 entity pairs $ S^{gt} \times S^{gt} $ 로 부터 negative samples $ N_{r} $을 사용했다. (예를 들어, 주어진 문장에서 다음과 같은 두 relations이 있다고 하면 ("Marge", Mother, "Bart") and ("Bart", Teacher, "Skinner"), 연결이 되지 않은 entity pair 모든 ("Marge", *, "Skinner")에 해당하는 sample을 relation negative sample로 구성했다.
이는 무작위 span pairs를 샘플링하는 것과 반대로 강력한 Negative sample이 될 수 있었다.
위의 process는 문장 단위로 training examples을 sampling한다. 여러 문장에 흩어져 있는 샘플을 생성하는 대신 (계산 비용이 많이 드는 BERT 모델을 통해 모든 문장을 제공 해야함.) 각 문장을 BERT(single-pass)를 통해 한 번만 실행한다. 이러한 방식으로 여러 개의 postive/negative 샘플은 각각 entity와 relation classifier에 대한 하나의 얕은 linear layer를 통과하며, 이는 훈련 과정을 상당히 빠르게 할 수 있다.
Results
[그림 2] comparison with state of art [그림 2]의 결과 표를 보다 시피, 이 연구 이전의 SoTA를 뛰어 넘는 성능을 갖는 것을 알 수 있다.
Candidate selection and negative sampling
[그림 3] negative samples 수에 따른 F1 scores 증가량 또한 이 연구에서는 [그림 3] 처럼 negative samples 수에 따른 F1 scores 증가량을 나타냈다. 충분한 negative sample이 필수적임을 알 수 있으며, 높은 수의 negative samples를 가질 때에는 두 datasets 모두 performance가 정체됨을 알 수 있다. 하지만, 충분히 많은 $ N_{e}, N_{r} $ (entity negative sample, relation negative sample)을 사용했을 때, 성능이 더욱 안정적이었기 때문에 $ N_{e}=N_{r}=100 $ 으로 설정하였다.
이외에도, relation classification에서는 $ S \times S $로 부터 나온 strong negative relation samples 대신 weak negative relation samples을 사용하여 결과를 비교해 봤다. (weak negative samples: 어떠한 ground truth relation과도 일치하지 않게 하기 위하여, span filtering과 random training span pairs를 생략함.) 이 때, recall scores는 유지 됐으나, precision scores는 급격히 감소 했다.Weak negative samples의 예로 "[John Wikes Booth] $ _{head} $, who assassinated [President Lincoln] $ _{tail} $ was an actor" 문장에서, ("John", "President") or ("Wikes", Lincoln")의 쌍이 골라지며, 하나의 entity가 올바르고 다른 하나의 entity는 올바르지 않은 pairs가 선호됐다.
Localizer context
[그림 4] 다른 context representation에 따른 F1 scores 다음으로 이 연구에서는 long distance relation을 탐지하는데, 어떤 context를 사용 했을 때, 성능이 가장 높았는지에 대한 실험을 하였다.
- Localized context : 후보 entity 사이의 text tokens에 대한 max pooling vector
- Full context : 전체 tokens에 대한 maxpooling vector
- Cls Token : BERT의 cls token
[그림 4]와 같이 후보 entity 사이의 text tokens에 대한 max pooling vector를 context representation으로 한 실험의 모델이 가장 높은 성능을 가졌다.
pre-training and entity representation
또한, 본 연구에서는 완전한 pre-trained BERT를 사용한 것이 1. Layers parameters의 동결을 푼 경우, 2. Layers, Embeddings의 동결을 푼 경우 이 두 가지보다 성능이 좋았음을 밝혔다.
또한, entity의 representation으로는 maxpooling이 sum, average 처리보다 성능이 좋았음을 밝혔다.Error inspection
마지막으로 본 연구에서는 5가지 error의 예를 분석했다.
- Incorrect spans : 오류의 일반적인 원인은 가까운 단어를 추가하거나 GT에서 주석이 달린 단어를 누락하여 잘못된 entity 범위를 예측하는 것.
- Syntax : 두 entities 사이의 관계에 대한 예측의 오류. (예를 들어, ("Yevhen Saburov", a person, and "Black Sea Fleat", an employer)에서 사람 유형인 "Yevhen Saburov"와 고용주인 "Black Sea Fleet"과 관련될 수 있지만, 문장에서는 관련이 없음)
- Logical : 때떄로 relation은 문장에서 명시적으로 언급되지 않지만, 문맥에 기초하여 논리적으로 추론될 수 있는 것.
- Classification : 두 개의 relation entities를 정확하게 예측했지만 잘못된 relation type을 할당한 경우.
- Missing annotation : 정확한 예측의 경우가 ground truth를 누락한 경우. (두 개의 장소에서 잘못된 위치의 장소를 가져오는 경우)
이렇게 SpERT에 대한 자세한 review를 적어보았습니다. 아직까지 모호한 개념이 있는데, 이는 source 코드를 참고하여 더욱 자세하게 정리하려 합니다. 혹시 잘못된 사항이나 추가했으면 하는 부분이 있으시면, 댓글 남겨주세요 ^^!! 긴 글 읽어주셔서 감사합니다!!
'Machine & Deep Learning' 카테고리의 다른 글
[yongggg's] Graph Convolution (Neural) Networks : GCNs (0) 2022.08.11 [yongggg's] Graph Convolutional Networks for Text Classification (0) 2022.08.08 [Yongggg's] TinyBERT: Distilling BERT for Natural Language Understanding (1) 2022.04.07 [Yongggg's] Survey for Compression of NLP Model (0) 2022.04.04 [Yongggg's] Fast R-CNN & Faster R-CNN (1) 2021.06.07