GLiNER: 라벨 이름으로 개체 찾기
GLiNER — Urchade Zaratiana 외
목차
문서에서 사람·조직·제품 이름을 추출하는 개발자에게는 개체 유형이 바뀔 때마다 모델을 다시 학습해야 하는 부담이 있다. GLiNER는 찾을 유형의 이름을 문장과 함께 입력해 그 유형에 맞는 텍스트 구간을 고른다. 이 글에서는 이 방식이 고정 라벨 분류와 어떻게 다르며 어느 평가 범위까지 유효했는지 살펴본다.
Urchade Zaratiana·Nadi Tomeh·Pierre Holat·Thierry Charnois의 GLiNER: Generalist Model for Named Entity Recognition using Bidirectional Transformer을 읽었다. 기준 판본은 2023년 11월 14일의 arXiv v1이다. 논문 당시 모델과 수치를 다루며 후속 GLiNER 배포 모델의 성능을 이 수치로 대신하지 않는다.
라벨을 출력층에 고정하면 생기는 문제
전통적인 개체명 인식, NER 모델은 훈련 때 정한 라벨을 출력한다. 사람·조직·지역으로 학습한 모델에 제품명을 요청해도 출력층에 제품 라벨이 없으면 그대로 처리하기 어렵다. 새로운 라벨과 정답 예시를 준비해 미세 조정해야 한다.
생성형 LLM에 자연어로 추출을 요청하면 유형을 유연하게 바꿀 수 있다. 대신 출력 토큰을 차례로 생성하고 그 출력을 원문 구간과 맞추는 처리가 필요하다. GLiNER는 유형 이름과 원문 구간을 같은 인코더 안에서 비교해 두 방식을 잇는다.
다음은 설명용으로 만든 입력이다. 문장 자체는 그대로 두고 추출할 유형만 바꾼다.
text = "Mina works at Acme and uses Orion."
labels = ["person", "organization"]
의도한 추출: Mina → person, Acme → organization
labels = ["person", "organization", "product"]
추가로 원하는 추출: Orion → product여기 적은 추출은 예제의 정답으로 정한 것이며 실제 모델 실행 결과가 아니다. 문장만으로 Orion이 제품인지 사람인지 애매할 수도 있다. 유형 이름을 입력으로 받는 구조가 라벨의 의미나 부족한 문맥까지 보장하지는 않는다.
구간과 유형을 어떻게 연결하는가
입력 앞에는 각 유형을 나타내는 특별 토큰 [ENT]와 유형 이름을 놓고 [SEP] 뒤에 원문을 넣는다. 양방향 인코더가 유형과 문장 토큰을 함께 읽는다. 유형 표현도 이번 문장의 영향을 받고 문장 표현도 요청한 유형의 영향을 받는다.
원문에서 Mina, Acme, at Acme 같은 연속 구간들을 후보로 만든다. 각 구간의 시작·끝 단어 표현을 연결한 뒤 작은 신경망으로 구간 표현을 만든다. 유형 표현도 별도 신경망을 거친다. 둘의 내적에 sigmoid를 적용하면 구간·유형별 매칭 점수가 나온다(GLiNER의 구조).
| 계산 대상 | 예제의 후보 | 판단할 질문 |
|---|---|---|
| 구간 표현 | Mina, Acme, at Acme | 이 구간은 문장에서 어떤 역할인가 |
| 유형 표현 | person, organization | 이번 요청의 유형은 어떤 의미인가 |
| 구간·유형 점수 | Mina × person, Mina × organization | 이 구간이 해당 유형과 맞는가 |
후보 구간의 최대 길이는 원 논문에서 12단어다. 길이를 제한해 후보 수의 증가를 줄인다. 유형이 늘면 구간·유형 조합도 늘고 유형 이름이 차지하는 입력 길이도 늘어난다. 한 번에 처리한다는 사실이 입력 규모와 무관한 고정 비용을 뜻하지는 않는다.
논문의 디코더는 점수 0.5를 넘는 후보를 대상으로 높은 점수부터 구간을 선택한다. 평면 NER에서는 겹치는 구간을 허용하지 않고 중첩 NER에서는 완전히 포함되는 구간을 허용하되 부분 겹침은 피한다. 가령 Acme Labs와 Labs를 둘 다 고를지는 점수뿐 아니라 이 출력 규칙에도 달려 있다.
유연성은 출력 공간을 어떻게 제한했는지와 함께 읽는다
GLiNER의 학습에서는 정답 구간·유형 쌍의 점수를 높이고 나머지 쌍의 점수를 낮추는 이진 교차 엔트로피를 사용한다. 설명용 문장의 Mina × person은 양성이고 at Acme × person은 음성이다. 각 쌍에 sigmoid를 쓰므로 한 구간의 유형 점수들을 반드시 합계 1로 만들지는 않는다. 이 점수와 겹침을 처리하는 디코더는 다른 단계다. 높은 점수를 여러 개 얻더라도 최종 출력 규칙에 따라 일부는 제외된다. GLiNER 학습과 디코딩
생성형 추출과 비교하면 답을 원문 안의 구간으로 제한한 것이 중요한 선택이다. 없는 문자열을 새로 생성하는 오류는 출력 형식상 피할 수 있지만 틀린 구간을 고르거나 유형을 잘못 붙이는 오류는 남는다. 또한 후보 밖의 답은 점수가 아무리 좋아도 나오지 않는다. 개체가 연속된 12단어를 넘거나 불연속 구간으로 표현된다면 이 후보 설계의 지원 범위를 벗어난다. 원문에서 관찰한 성능과 별개로, 출력 공간 자체가 만드는 한계다.
이렇게 제한한 출력 공간에서 라벨 이름을 고정된 출력층 대신 입력으로 옮겼다는 것이 이 연구의 실용적인 기여다. 새 라벨을 추가할 수 있다는 유연성과 어떤 형태의 개체든 추출한다는 능력은 구분해야 한다.
없는 개체를 찾지 않는 것도 학습해야 한다
훈련 자료 Pile-NER는 ChatGPT로 생성한 개체 주석을 포함한다. 원문 설명에 따르면 정제 후 44,889개 문단에 약 24만 개체 구간, 약 1만 3천 유형이 있다. 다양한 유형을 접하지만 생성된 주석의 누락과 오류도 훈련 신호가 될 수 있다.
특히 이 자료에는 문장에 실제 있는 유형이 주로 들어 있다. 요청받은 유형이 문장에 없는 경우까지 배우려면 다른 예제에서 유형을 가져와 음성 유형으로 넣는다. 다음은 저자가 보고한 음성 유형 비율 소거 실험이다. 정밀도는 찾은 개체 중 맞은 비율, 재현율은 정답 개체 중 찾은 비율이다.
| 훈련의 음성 유형 비율 | 정밀도 (%) | 재현율 (%) | F1 |
|---|---|---|---|
| 0% | 49.3 | 58.1 | 53.3 |
| 50% | 62.3 | 59.7 | 60.9 |
| 75% | 61.1 | 56.5 | 58.6 |
원문의 음성 유형 비교를 수치 변경 없이 옮겼다. 50%는 이 실험의 훈련 혼합 비율이다. 실제 요청에서 절반의 유형이 없어야 한다는 배포 조건이나 보편적인 최적값은 아니다.
이 실험은 person을 요청하면 항상 인물을 하나 내놓는 동작을 피하는 데 음성 예제가 도움이 된다는 근거다. 75%에서는 재현율이 내려간다. 잘못 추출하는 개체와 놓치는 개체의 비용을 함께 살펴야 한다.
음성 유형을 더하는 방법에도 전제가 있다. 다른 예제에서 가져온 유형이 이번 문장에는 실제로 없어야 한다. 또 정답 주석이 빠진 구간·유형 쌍은 학습에서 음성으로 취급될 수 있다. 그러면 모델은 발견해야 할 개체를 억제하는 신호도 받는다. 이는 생성 주석과 이진 손실의 조합에서 따라오는 위험이며 논문의 데이터에서 그 오류율을 직접 측정한 결과는 아니다. 유형의 다양성뿐 아니라 주석의 완전성이 일반화를 제한할 수 있다.
평균 점수보다 언어와 개체 경계를 먼저 본다
GLiNER의 평가는 개체 구간과 유형이 정확히 일치해야 맞은 것으로 세는 F1을 사용한다. 문장의 주제를 맞혔다고 개체 추출에 성공한 것은 아니다. 다음은 영어 도메인 밖 7개 데이터셋의 평균과 다국어 평가 중 한국어 행을 각각 추린 것이다. 두 묶음은 데이터와 모델 조건이 다르다.
| 평가 묶음 | 모델·조건 | F1 |
|---|---|---|
| 영어 OOD 7개 데이터셋 평균 | ChatGPT, 선행 연구의 보고값 | 47.5 |
| 같은 영어 OOD 평균 | GoLLIE 7B, 선행 연구의 보고값 | 58.0 |
| 같은 영어 OOD 평균 | GLiNER-L, DeBERTa-v3 large, 약 0.3B | 60.9 |
| MultiCoNER 한국어 | ChatGPT, 선행 연구의 보고값 | 30.0 |
| 같은 한국어 평가 | GLiNER-En, 영어 DeBERTa-v3 large | 20.5 |
| 같은 한국어 평가 | GLiNER-Multi, mDeBERTa-v3 base | 28.7 |
| 같은 한국어 평가 | 한국어 정답으로 학습한 XLM-R 기준선 | 55.8 |
출처는 영어 OOD 비교와 언어별 비교다. 모델·데이터셋 일부만 발췌했다. ChatGPT·GoLLIE·지도 학습 기준선은 논문이 선행 연구에서 가져온 값이며 현재 API와 같은 하드웨어로 다시 측정한 결과가 아니다. 마지막 행은 정답 데이터를 사용한 지도 학습이라 위의 zero-shot 행과 조건이 다르다.
영어 평균에서 GLiNER-L이 앞서더라도 한국어 zero-shot 행에서는 ChatGPT의 보고값이 더 높다. 다국어 모델로 바꾸면 영어 모델보다 개선되지만 한국어 정답으로 학습한 기준선과는 차이가 남는다. “유형을 자유롭게 요청한다”와 “모든 언어에서 더 정확하다”를 같은 주장으로 읽으면 안 된다.
여기서 zero-shot은 목표 벤치마크의 정답으로 추가 학습하지 않았다는 조건이다. 목표 유형의 이름이나 비슷한 의미를 훈련에서 한 번도 보지 않았다는 더 강한 조건과는 다르다. 다양한 유형의 Pile-NER로 학습했다는 사실과 함께 읽으면 설득력 있는 결과는 라벨 이름으로 요청한 추출을 다른 데이터셋에 옮길 수 있었다는 것이다. 완전히 새로운 개념의 정의까지 이해한다는 주장은 이 평가만으로 확인되지 않는다.
문장 안의 개체와 실제 대상은 구분한다
GLiNER가 Acme를 조직으로 찾았다고 해서 그 문자열을 실제 기업 식별자로 연결한 것은 아니다. 동명이인·동명 기업을 구분하는 개체 연결, 개체 사이의 관계 추출, 지식 그래프의 중복 병합은 추가 과제다. 원문 구간을 찾는 단계의 성능을 뒤의 전체 파이프라인 품질로 확대하지 않아야 한다.
새 유형의 주석을 많이 만들기 어려울 때 이 구조를 검토할 만하다. 판단에 쓸 작은 평가 집합에는 유형이 없는 문장, 긴 개체 이름, 겹치는 구간, 실제 사용할 언어를 넣자. 같은 문장에 organization을 추가했을 때 기존 person 추출도 달라지는지 살피면 유형 목록을 함께 읽는 구조의 영향을 확인할 수 있다. 0.5 임계값의 정밀도·재현율도 그 데이터에서 다시 읽어야 한다.
원문
- Urchade Zaratiana, Nadi Tomeh, Pierre Holat, Thierry Charnois. GLiNER: Generalist Model for Named Entity Recognition using Bidirectional Transformer. arXiv v1, 2023년 11월 14일, PDF.