LangExtract: A Gemini powered information extraction library

TMT

https://developers.googleblog.com/en/introducing-langextract-a-gemini-powered-information-extraction-library/

오늘날 데이터가 풍부한 세상에서, 귀중한 인사이트는 종종 상세한 임상 기록, 긴 법률 문서, 고객 피드백 스레드, 변화하는 뉴스 보도와 같은 비정형 텍스트에 숨겨져 있습니다. 이러한 정보를 수동으로 선별하거나 데이터를 처리하기 위한 맞춤형 코드를 작성하는 것은 시간 소모가 크고 오류가 발생하기 쉽습니다. 최신 대형 언어 모델(LLM)을 무작정 사용하는 것도 오류를 유발할 수 있습니다. 필요한 정보를 프로그래밍적으로 정확하게 추출하면서, 결과가 구조화되고 신뢰성 있게 원본에 연결되도록 할 수 있다면 어떨까요?

오늘 저희는 개발자들이 바로 그 일을 할 수 있도록 돕는 새로운 오픈소스 Python 라이브러리 LangExtract를 소개하게 되어 기쁩니다. LangExtract는 Gemini 모델 등 다양한 LLM에 가벼운 인터페이스를 제공하여, 대량의 비정형 텍스트를 사용자의 맞춤 지침에 따라 구조화된 정보로 처리할 수 있도록 하며, 유연성과 추적 가능성을 모두 보장합니다.

의료 보고서, 재무 요약, 또는 그 밖의 텍스트 중심의 모든 분야에서 LangExtract는 데이터의 가치를 끌어내는 유연하고 강력한 방법을 제공합니다.

LangExtract가 정보 추출에 효과적인 이유

LangExtract는 정보 추출에 유용한 독특한 기능 조합을 제공합니다:

  • 정확한 원본 연결: 추출된 모든 엔티티는 원본 텍스트의 정확한 문자 오프셋에 매핑됩니다. 아래 애니메이션에서 볼 수 있듯이, 이 기능은 원본 텍스트에서 각 추출 결과를 시각적으로 강조하여, 추출된 정보를 평가하고 검증하는 과정을 훨씬 쉽게 만듭니다.
  • 신뢰할 수 있는 구조화된 출력: 원하는 출력을 LangExtract의 데이터 표현 방식으로 정의하고 “few-shot” 예시를 제공합니다. LangExtract는 이를 활용해 스키마를 강제하며, Gemini와 같은 지원 모델에서 Controlled Generation을 통해 일관된 구조의 출력을 보장합니다. 이는 로미오와 줄리엣 전체 텍스트 분석에서 견고한 결과를 보여줍니다.
  • 최적화된 장문 정보 추출: 대형 문서에서 정보를 검색하는 것은 복잡할 수 있습니다. 예를 들어, LLM은 많은 벤치마크에서 강력한 성능을 보이지만, 수백만 토큰의 컨텍스트에서 여러 사실을 동시에 검색하는 “needle-in-a-haystack” 테스트에서는 리콜이 감소할 수 있습니다. LangExtract는 청킹 전략, 병렬 처리, 더 작고 집중된 컨텍스트에 대한 다중 추출 패스를 통해 이를 처리하도록 설계되었습니다.
  • 인터랙티브 시각화: 원시 텍스트에서 인터랙티브하고 독립적인 HTML 시각화로 몇 분 만에 전환할 수 있습니다. LangExtract는 추출된 엔티티를 컨텍스트 내에서 검토할 수 있도록 하며, 수천 개의 주석을 탐색하는 것도 지원합니다.
  • 유연한 LLM 백엔드 지원: Google의 Gemini 패밀리와 같은 클라우드 기반 LLM이나 오픈소스 온디바이스 모델 등, 선호하는 모델을 사용할 수 있습니다.
  • 도메인에 구애받지 않는 유연성: 잘 선택된 몇 개의 예시만으로 어떤 도메인에 대해서도 정보 추출 작업을 정의할 수 있으며, LLM을 별도로 파인튜닝할 필요가 없습니다. LangExtract는 사용자가 원하는 출력을 “학습”하고, 이를 대규모 신규 텍스트 입력에 적용할 수 있습니다. 약물 추출 예시에서 그 작동 방식을 확인할 수 있습니다.
  • LLM의 세계 지식 활용: 원본에 근거한 엔티티 추출 외에도, LangExtract는 모델의 세계 지식을 활용해 추출 정보를 보완할 수 있습니다. 이 정보는 명시적(즉, 원본 텍스트에서 도출)일 수도 있고, 암시적(즉, 모델의 내재적 세계 지식에서 도출)일 수도 있습니다. 이러한 보완 지식의 정확성과 관련성은 선택한 LLM의 성능과 추출을 안내하는 프롬프트 예시의 정밀도에 크게 좌우됩니다.

빠른 시작: 셰익스피어에서 구조화된 객체로

셰익스피어의 한 구절에서 등장인물 정보를 추출하는 방법은 다음과 같습니다.

먼저 라이브러리를 설치합니다:

자세한 설치 방법(가상 환경, API 키 설정 등)은 프로젝트 README를 참고하세요.

pip install langextract

다음으로, 추출 작업을 정의합니다. 명확한 프롬프트와 고품질 “few-shot” 예시를 제공해 모델을 안내합니다.

import textwrap
import langextract as lx

# 1. 간결한 프롬프트 정의
prompt = textwrap.dedent("""\
Extract characters, emotions, and relationships in order of appearance.
Use exact text for extractions. Do not paraphrase or overlap entities.
Provide meaningful attributes for each entity to add context.""")

# 2. 모델을 안내할 고품질 예시 제공
examples = [
    lx.data.ExampleData(
        text=(
            "ROMEO. But soft! What light through yonder window breaks? It is"
            " the east, and Juliet is the sun."
        ),
        extractions=[
            lx.data.Extraction(
                extraction_class="character",
                extraction_text="ROMEO",
                attributes={"emotional_state": "wonder"},
            ),
            lx.data.Extraction(
                extraction_class="emotion",
                extraction_text="But soft!",
                attributes={"feeling": "gentle awe"},
            ),
            lx.data.Extraction(
                extraction_class="relationship",
                extraction_text="Juliet is the sun",
                attributes={"type": "metaphor"},
            ),
        ],
    )
]

# 3. 입력 텍스트에 대해 추출 실행
input_text = (
    "Lady Juliet gazed longingly at the stars, her heart aching for Romeo"
)
result = lx.extract(
    text_or_documents=input_text,
    prompt_description=prompt,
    examples=examples,
    model_id="gemini-2.5-pro",
)

result 객체에는 추출된 엔티티가 포함되어 있으며, 이를 JSONL 파일로 저장할 수 있습니다. 이후, 주석을 확인할 수 있는 인터랙티브 HTML 파일을 생성할 수 있습니다. 이 시각화는 데모나 추출 품질 평가에 매우 유용하며, 소중한 시간을 절약해줍니다. Google Colab과 같은 환경에서 원활하게 작동하며, 독립적인 HTML 파일로 저장해 브라우저에서 볼 수도 있습니다.

# 결과를 JSONL 파일로 저장
lx.io.save_annotated_documents([result], output_name="extraction_results.jsonl")

# 파일에서 인터랙티브 시각화 생성
html_content = lx.visualize("extraction_results.jsonl")
with open("visualization.html", "w") as f:
    f.write(html_content)

Image

특화된 도메인을 위한 유연성

위에서 설명한 원칙들은 의학, 금융, 공학, 법률과 같은 특화된 도메인에도 동일하게 적용됩니다. LangExtract의 아이디어는 처음에 의료 정보 추출에 적용되었으며, 임상 텍스트를 처리하는 데 효과적일 수 있습니다. 예를 들어, 약물명, 용량, 기타 약물 속성을 식별하고, 이들 간의 관계를 매핑할 수 있습니다. 이러한 기능은 이 라이브러리의 개발로 이어진 연구의 핵심 부분이었으며, 의료 정보 추출 가속화에 관한 논문에서 자세히 확인할 수 있습니다.

아래 애니메이션은 LangExtract가 임상 텍스트를 처리하여 약물 관련 엔티티를 추출하고, 이를 원본 약물에 그룹화하는 과정을 보여줍니다.

Image

구조화된 영상의학 보고 데모

LangExtract의 강력함을 특수 분야에서 보여주기 위해, Hugging Face에서 RadExtract라는 구조화된 영상의학 보고용 인터랙티브 데모를 개발했습니다. 이 데모는 LangExtract가 자유 형식의 영상의학 보고서를 처리하여 주요 소견을 자동으로 구조화된 형식으로 변환하고, 중요한 소견을 강조 표시하는 과정을 보여줍니다. 이러한 접근 방식은 영상의학 분야에서 중요합니다. 이는 보고서의 명확성을 높이고, 완전성을 보장하며, 연구 및 임상 진료를 위한 데이터 상호운용성을 개선하는 데 중요합니다.

Image

HuggingFace에서 데모를 체험해보세요: https://google-radextract.hf.space

LangExtract 시작하기: 자료와 다음 단계

개발자들이 LangExtract를 활용해 텍스트에서 인사이트를 얻는 혁신적인 방법을 기대하고 있습니다. 문서를 참고하고, GitHub 저장소의 예시를 살펴보며, 지금 바로 비정형 데이터를 변환해보세요.

Edit this page

On this Page