
DyGIE++는 여러 최신 NLP 기술을 통합하여 구현된 모델이다.
DyGIE++는 사전학습 언어모델을 활용하여 문맥 임베딩(contextual embedding)을 생성한다. 초기 버전에서는 ELMo를 사용했지만, 이후 BERT와 같은 Transformer 기반 모델도 지원한다. 이러한 임베딩은 단어의 의미가 주변 문맥에 따라 어떻게 달라지는지를 반영할 수 있다.
단어 단위가 아닌 span 단위로 정보를 추출하는 것이 DyGIE++의 핵심 아이디어이다. 예를 들어 "Barack Obama"는 하나의 단어가 아닌 두 단어로 구성된 엔티티이며, span 단위로 처리하면 훨씬 더 정확한 엔티티 추론이 가능하다.
Span 표현은 시작/끝 위치, 길이, 내부 단어들의 평균 임베딩, 위치 정보 등을 조합하여 계산된다.
문서 내의 모든 span들을 노드로 간주하고, 이들 사이의 잠재적 관계를 엣지로 연결하여 문서 전체를 그래프 형태로 모델링한다. GCN은 이 그래프에서 정보를 전달하며 각 노드의 표현을 업데이트한다.
이러한 구조는 특히 멀리 떨어져 있는 문장 간 관계나 상호참조(co-reference) (ex. “he”, “she”, “the company” 등)의 의미 해석에 매우 효과적이다.
DyGIE++는 NER, RE, EE 세 가지 작업을 하나의 네트워크에서 동시에 학습한다. 이로 인해 각 작업이 서로에게 유익한 신호를 전달할 수 있으며, 학습 데이터가 제한된 경우에도 보다 일반화 성능이 우수하다.
DyGIE++는 다양한 도메인에서 문서 수준 정보 추출을 평가하기 위한 대표적인 데이터셋에서 실험되었으며, 그 중에서도 다음 데이터셋이 자주 사용된다.
ACE 2005는 문서 전체를 입력으로 받으며, 하나의 엔티티가 여러 문장에서 등장하거나 관계가 문장 밖에서 형성되는 경우가 많다. DyGIE++는 이러한 복잡한 구조를 잘 처리할 수 있도록 설계되었다.
Task, Method, Material 등), 과학적 개념 간 관계 추출SciERC는 특히 과학적 문서의 정보 추출 문제에 초점을 맞춘 데이터셋으로, 복잡한 문장 구조와 도메인 특화 용어 때문에 기존 모델로는 높은 성능을 내기 어려웠다. 하지만, DyGIE++는 문서 전반의 논리적 흐름을 추론할 수 있어 해당 데이터셋에서 우수한 성능을 보여준다.
GENIA 데이터셋은 생명과학 및 의학 분야에 특화된 정보 추출 태스크를 위해 구축된 대표적인 데이터셋이다. PubMed에 등재된 실제 생의학 논문 요약(Abstract)을 기반으로 하며, 일반 언어보다 훨씬 복잡하고 전문적인 어휘와 문장 구조를 포함한다.
이 데이터셋은 특히 복잡한 명사구 처리, 도메인 지식 기반 엔티티 분류, 약어 해석 등의 문제를 동반하므로, 일반 정보 추출 모델에 비해 난이도가 높은 편이다. 하지만, DyGIE++는 span 단위 처리와 그래프 구조 기반 학습을 통해 이러한 복잡성을 효과적으로 처리할 수 있는 구조를 가지고 있어, GENIA와 같은 도메인 특화 데이터셋에서도 좋은 성능을 보여준다.
➡️ DyGIE++는 이처럼 도메인 특화된 문서에서도 뛰어난 유연성을 보이며, 다양한 태스크와 어휘, 관계 구조에 쉽게 적응할 수 있다는 것을 보여준다.
DyGIE++는 문서 내 정보를 추출하기 위해 총 네 개의 주요 구성 요소로 구성되어 있으며, 각 구성은 서로 유기적으로 연결되어 작동한다.
DyGIE++는 문서 내 각 단어의 문맥 정보를 반영하기 위해 사전 학습된 언어 모델(BERT 또는 ELMo)을 활용한다. 이 계층에서는 입력 문서 내 모든 단어에 대해 문맥 기반 임베딩(contextualized embedding)을 생성하며, 각 단어가 위치한 문장과 주변 문맥에 따라 서로 다른 의미 표현을 갖게 된다.
이 임베딩은 단어 간의 의미적 유사성, 문법적 관계, 그리고 문서 전체의 흐름까지도 반영할 수 있으므로, 이후의 정보 추출 과정에서 매우 중요한 역할을 하게 된다. 특히, DyGIE++는 문장 경계를 넘나드는 관계까지 고려해야 하기 때문에 이 문맥적 표현은 모델 성능의 핵심 요소이다.
단어가 아닌 span(연속된 단어 구간)을 단위로 정보 추출을 수행하는 것이 DyGIE++의 중요한 특징이다. 이 층에서는 문서 내 가능한 모든 span(ex. 1~5 token 길이)을 고려하고, 각 span에 대해 다음과 같은 정보를 결합하여 벡터 표현을 생성한다.
이러한 span 표현은 이후 NER, RE, EE와 같은 downstream task에서 후보 엔티티 및 관계 후보로 사용된다. Span 기반 접근 방식은 단순히 토큰 레벨에서 엔티티를 분류하는 기존 방식보다 훨씬 더 유연하고 정밀한 추론이 가능하다.
각 span에 대해 DyGIE++는 다음과 같은 세 가지 작업을 동시에 수행한다.
이러한 다중 작업(multitask learning)은 서로 보완적인 정보를 학습하게 하여 모델의 일반화 성능을 높이는 데 기여한다.
DyGIE++의 핵심 강점은 바로 이 그래프 기반 전파 구조(Graph-based Propagation)이다. 이 계층에서는 각 span을 노드(node)로 간주하고, 노드 간의 다양한 관계(ex. 등장 순서, 문법 구조, 후보 관계 등)를 엣지(edge)로 연결하여 문서 전체를 그래프로 모델링한다.
이후 GCN(Graph Convolutional Network)을 활용하여 각 span 노드가 주변 노드들과 정보를 주고받으며 representation을 업데이트한다. 이를 통해 문서 전반의 장거리 의존성(long-range dependency)이나 간접적 연결 정보를 포착할 수 있으며, 이는 문서 전체에서 발생하는 복잡한 이벤트나 관계를 인식하는 데 매우 효과적이다.
| 강점 | 설명 |
|---|---|
| 문서 수준 모델링 | 문장 단위를 넘어, 문서 전반에 걸친 컨텍스트를 고려하여 관계를 정밀하게 추출 |
| 멀티태스크 학습 | NER, RE, EE를 통합적으로 수행함으로써 각각의 작업 간 상호 시너지를 활용 |
| 그래프 기반 구조 | GCN을 통한 정보 전파로 장거리 관계나 간접 연결까지 효과적으로 학습 |
| 구조적 유연성 | 다양한 정보 추출 태스크에 맞춰 손쉽게 커스터마이징 가능 |
| 강력한 성능 | 기존 모델 대비 다수의 문서 수준 IE 벤치마크에서 최고 성능 기록 |
➡️ 이처럼 DyGIE++는 단순한 정보 추출을 넘어, 문서 구조 전반을 이해하고 복잡한 추론까지 가능하게 하는 고성능 모델이다.
"Steve Jobs founded Apple in 1976. He led the company to revolutionize the personal computer industry."
기존의 문장 기반 관계 추출 모델은 두 문장을 별개로 처리하기 때문에, “He”가 “Steve Jobs”를 지칭하고, “the company”가 “Apple”이라는 것을 명확히 연결짓지 못할 수 있다. 하지만, DyGIE++는 문서 전반의 연결성과 상호참조(co-reference)를 파악하여 다음과 같은 복합 관계를 추론할 수 있다.
이처럼 DyGIE++는 단순한 엔티티 식별을 넘어서, 문서 내 의미 흐름을 따라가는 정교한 추론이 가능하다.
AllenNLP
: 자연어 처리(NLP) 연구를 위해 설계된 오픈 소스 Python 라이브러리
Allen Institute for AI(AI2)에 의해 개발되었으며, 특히 연구자들이 최신 NLP 모델을 빠르게 프로토타입하고 실험할 수 있도록 지원
DyGIE++는 AllenNLP 프레임워크 위에서 동작하는 모델이다.
따라서, 실행에는 AllenNLP, config 파일, 학습 데이터가 필요하다.
다음은 DyGIE++를 사용하여 문장 내 관계를 추출하는 최소한의 파이프라인 예시이다.
# 설치
```bash
git clone https://github.com/dwadden/dygiepp.git
cd dygiepp
conda create -n dygiepp python=3.8
conda activate dygiepp
pip install -r requirements.txt
# 예시 인퍼런스 코드 → 단일 문장 추론
from dygie.data.dataset_readers import DygieppDatasetReader
from allennlp.models.archival import load_archive
from allennlp.predictors import Predictor
# 사전 학습된 모델 아카이브 로드 (ex. SciERC 학습 모델)
archive = load_archive("models/scierc.tar.gz")
predictor = Predictor.from_archive(archive, "dygiepp_predictor")
# 예시 문장 입력 (논문 요약 문장 등)
input_data = {
"doc_key": "example_doc",
"dataset": "scierc",
"sentences": [
["BERT", "is", "a", "pre-trained", "language", "model", "developed", "by", "Google", "."]
]
}
# 예측 수행
output = predictor.predict_json(input_data)
# 결과 확인
print(output["predicted_ner"]) # Named Entity 결과
print(output["predicted_relations"]) # 관계 추출 결과
print(output["predicted_events"]) # 이벤트 추출 결과
'''
# 예측 결과 예시
# predicted_ner
[[[0, 0, "Method"], [6, 6, "Method"]]]
# predicted_relations
[[[0, 6, "Used-for"]]]
# predicted_events
[[[6, "Develop"], [6, [0], ["Tool"]]]]
'''
➡️ 이처럼 DyGIE++는 문장 내부 또는 문서 전체에서 엔티티, 관계, 이벤트를 동시에 추론해주는 End-to-End 구조로 동작한다. 실제 사용 시에는 전체 문서 단위 데이터셋(.jsonl)을 넣고 allennlp train 또는 predict 커맨드를 사용하여 학습/추론을 수행하게 된다.