Skip to content

Latest commit

 

History

History
79 lines (53 loc) · 4.12 KB

SciREX.md

File metadata and controls

79 lines (53 loc) · 4.12 KB

SciREX: A Challenge Dataset for Document-Level Information Extraction

References

Summary

example

  • 대부분의 Information Extraction 모델들은 문장 혹은 문단 단위에서 엔티티 간 관계 추출
  • Papers-with-Code 데이터 활용해 SciREX 데이터셋 구축: 488개의 Annotated 문서
  • 문서 단위에서 과학적인 엔티티를 추출하고, 엔티티 간 관계를 이해할 수 있는 베이스라인 모델 제안

Notes

arch

  • 과학을 이해할 수 있는 자연어 이해 기술을 꿈꾸는 Allen AI의 후속 연구
  • SciBERT, SCIERC에 이은 Scientific NLU 연구의 세 번째 시리즈
  • SciBERT를 활용해 섹션 단위로 Chunking 된 Passage 임베딩 (Section 너무 크면 512개 토큰 기준으로 다시 나누어줌)
  • 앞서 SciBERT를 통해 임베딩 된 각 Token Representation을 문서 단위로 늘어 놓아, Bi-LSTM 태워 문서 간 문맥 정보 공유
  • 기본적으로 다음과 같은 모듈들이 Multi-task Learning을 통해 학습
    • Mention Identification and Classification: Token Representation들을 CRF에 태워 identify-then-classify
    • Salient Mention Classification: 앞서 추출된 Mention들이 문서에서 중요한지 판별
    • Pairwise Coreferece Resolution: 추출된 Mention들 간 Coreferring 하는지 판별
    • Mention Clustering: Coreference Score 높은 Mention들 간 Hierarchical Clustering
    • Relation Extraction: Cluster 간 4-ary Relation 여부 판별 (4개 엔티티가 동일 문서에서 나타날 것들인가?)
  • 데이터셋 구축은 SCIERC에 대해 훈련된 SciBERT를 활용해 Mention Candidate 들을 다 뽑아낸 후, (high Recall)
  • Candidate이 해당 문서에서 실제로 Entity 역할을 수행하는 Span인지 사람이 검수하는 과정을 거침: 가이드라인
# Jaccard Similarity 활용해 Mention 걸러주는 로직 (to preserve minimum precision)

clean_text = lambda w: re.sub(r"\s+", " ", re.sub(r"[^\w\s\.]", " ", w)).lower().split()

def char_sim(w1: str, w2: str, ng: int = 3, with_abbr: bool = False) -> float:
    char1, char2 = clean_text(w1), clean_text(w2)
    if len(char1) == 0 or len(char2) == 0:
        print(char1, w1, char2, w2)
        return 0.0
    ng = min(min(max([len(x) for x in char1]), max([len(x) for x in char2])), ng)
    char1, char2 = (
        get_n_grams_with_abbr(char1, ng, with_abbr=with_abbr),
        get_n_grams_with_abbr(char2, ng, with_abbr=with_abbr),
    )
    if len(char1) == 0 and len(char2) == 0:
        print(char1, char2, clean_text(w1), clean_text(w2), ng)

    return max(jaccard_similarity(char1, char2), match_abbr(" ".join(clean_text(w1)), " ".join(clean_text(w2))))

entity_similarity_metric = {
    "Material": (lambda x, y: char_sim(x, y, 3, True), 0.101010),
    "Method": (lambda x, y: char_sim(x, y, 3, False), 0.31),
    "Task": (lambda x, y: char_sim(x, y, 3, True), 0.353535),
    "Metric": (lambda x, y: char_sim(x, y, 3, True), 0.111111),
}

Result

subtask

  • 논문에서 제시한 모든 태스크를 End-to-end로 수행하던 선행 연구 없으므로, 서브 태스크들에 대해서만 비교
  • 문서 내 관계 파악할 수 있어야 하는 SciREX에서는 논문에서 제시한 모델이 좋은 성능을 보이지만,
  • 문서 혹은 문단 단위 내 관계 파악을 통해 태스크를 수행할 수 있는 SciERC에서는 선행 연구가 더 좋은 모습 보임

subtask

  • SciREX 단일에 대한 성능 평가를 보면 어떤 Entity가 Salient한지 파악하는 태스크에 어려움을 느끼는 것으로 확인