Skip to content

엔티티 링킹

Potato의 스팬 어노테이션을 외부 지식 베이스(Wikidata, UMLS, 맞춤형 엔티티 API)에 연결하며, 타입어헤드 검색과 구성 가능한 신뢰도 점수를 제공합니다.

엔티티 링킹을 사용하면 어노테이터가 스팬 어노테이션을 Wikidata나 UMLS 같은 외부 지식 베이스(KB)에 연결할 수 있습니다. 이를 통해 텍스트 멘션과 정규 엔티티 사이에 의미적 연결이 만들어지며, 개체명 인식, 개념 정규화, 지식 그래프 구축에 유용합니다.

작동 방식

스팬 어노테이션 스키마에서 엔티티 링킹이 활성화되면 다음과 같이 동작합니다.

  1. 어노테이터가 텍스트를 강조하고 레이블(예: "PERSON", "ORGANIZATION")을 지정합니다
  2. 스팬의 제어 막대에 링크 아이콘이 나타납니다
  3. 아이콘을 클릭하면 일치하는 KB 엔티티를 찾는 검색 모달이 열립니다
  4. 선택한 엔티티 ID가 스팬 어노테이션과 함께 저장됩니다
  5. 연결된 스팬은 채워진 아이콘을 표시하고, 커서를 올리면 엔티티 세부 정보를 보여줍니다

빠른 시작

스팬 스키마에 entity_linking 구성을 추가하여 엔티티 링킹을 활성화합니다.

yaml
annotation_schemes:
  - annotation_type: span
    name: ner
    description: Named Entity Recognition with KB linking
    labels:
      - name: PERSON
        tooltip: "People's names"
      - name: ORGANIZATION
        tooltip: "Companies, agencies, institutions"
      - name: LOCATION
        tooltip: "Places, cities, countries"
    entity_linking:
      enabled: true
      knowledge_bases:
        - name: wikidata
          type: wikidata
          language: en

구성 옵션

옵션유형기본값설명
enabledbooleanfalse이 스키마에 엔티티 링킹을 활성화
knowledge_baseslist[]KB 구성 목록
auto_searchbooleantrue모달이 열릴 때 자동으로 검색
requiredbooleanfalse스팬을 저장하기 전에 엔티티 링크를 필수로 요구
multi_selectbooleanfalse여러 엔티티에 연결 허용

지식 베이스 구성

옵션유형기본값설명
namestring필수이 KB의 고유 식별자
typestring필수KB 유형: wikidata, umls, rest
api_keystringnull인증이 필요한 서비스용 API 키
base_urlstringnullREST API의 기본 URL
languagestring"en"검색 결과의 언어 코드
timeoutinteger10요청 제한 시간(초)

지원되는 지식 베이스

Wikidata

1억 개 이상의 엔티티를 가진 무료 오픈 지식 베이스입니다. API 키가 필요하지 않습니다.

yaml
entity_linking:
  enabled: true
  knowledge_bases:
    - name: wikidata
      type: wikidata
      language: en

다국어 레이블, 엔티티 별칭(예: "NYC"를 입력하면 "New York City"를 찾음), 위키백과 문서 링크를 제공합니다.

UMLS

포괄적인 의학 및 생의학 용어 체계입니다. UTS에서 발급하는 무료 API 키가 필요합니다.

yaml
entity_linking:
  enabled: true
  knowledge_bases:
    - name: umls
      type: umls
      api_key: ${UMLS_API_KEY}

의학 개념, 약물, 질병, 시술과 200개 이상의 출처 어휘(SNOMED CT, ICD-10, MeSH, RxNorm)에 대한 상호 참조를 포함합니다.

맞춤형 REST API

REST API를 갖춘 모든 지식 베이스에 연결할 수 있습니다.

yaml
entity_linking:
  enabled: true
  knowledge_bases:
    - name: internal_kb
      type: rest
      base_url: https://api.example.com
      api_key: optional_api_key
      extra_params:
        search_endpoint: /search
        entity_endpoint: /entity/{entity_id}
        search_query_param: q
        results_path: data.results
        entity_id_field: id
        label_field: name
        description_field: description

여러 지식 베이스

여러 KB를 구성하여 어노테이터가 가장 적합한 출처를 선택하도록 할 수 있습니다.

yaml
entity_linking:
  enabled: true
  knowledge_bases:
    - name: wikidata
      type: wikidata
      language: en
    - name: umls
      type: umls
      api_key: ${UMLS_API_KEY}
    - name: company_entities
      type: rest
      base_url: https://internal.company.com/api/entities

검색 모달의 드롭다운을 통해 어노테이터가 구성된 지식 베이스 사이를 전환할 수 있습니다.

다중 선택 모드

다중 선택을 활성화하면 하나의 스팬을 여러 엔티티에 연결할 수 있어, 모호한 멘션에 유용합니다.

yaml
entity_linking:
  enabled: true
  multi_select: true
  knowledge_bases:
    - name: wikidata
      type: wikidata
      language: en

데이터 형식

엔티티가 연결된 스팬은 출력에 추가 필드를 포함합니다.

json
{
  "id": "instance_001",
  "text": "Albert Einstein was born in Ulm, Germany in 1879.",
  "annotations": {
    "ner": {
      "spans": [
        {
          "text": "Albert Einstein",
          "start": 0,
          "end": 15,
          "label": "PERSON",
          "kb_id": "Q937",
          "kb_source": "wikidata",
          "kb_label": "Albert Einstein"
        },
        {
          "text": "Ulm",
          "start": 28,
          "end": 31,
          "label": "LOCATION",
          "kb_id": "Q3012",
          "kb_source": "wikidata",
          "kb_label": "Ulm"
        }
      ]
    }
  }
}

모범 사례

  1. 자동 검색을 활성화하세요 - 효율을 높이며, 스팬 텍스트로 검색을 미리 채웁니다
  2. 꼭 필요한 경우가 아니면 링크를 필수로 요구하지 마세요 - 엔티티를 찾지 못했다고 해서 어노테이션을 막지 마세요
  3. 적절한 제한 시간을 설정하세요 - 느린 네트워크를 고려하세요
  4. KB를 엔티티 유형에 맞추세요 - 일반 엔티티에는 Wikidata, 생의학 용어에는 UMLS, 도메인 특화 엔티티에는 맞춤형 API를 사용하세요
  5. 모호한 멘션에는 다중 선택을 사용하세요 - 약어, 흔한 이름, 다의어 등

더 읽어보기

구현 세부 사항은 원본 문서를 참조하세요.