2025年8月9日土曜日

【新登場】LangExtract:LLMを活用して非構造テキストから構造化データを抽出する最先端のPythonライブラリ

 近年、医療記録、法律文書、カスタマーレビュー、ニュース記事など、非構造化テキストが膨大に存在する中で、「本当に必要な情報」を正確かつ効率的に抽出することは非常に困難です。手動での分析は時間がかかり、独自コードの構築もエラーが発生しやすく、最新の大規模言語モデル(LLM)をそのまま使用するだけでは誤解や誤抽出のリスクもあります。

そんな課題を解決するために登場したのが、LangExtract(ラング・エクストラクト)。これは、GoogleのGeminiモデルを含む様々なLLMと連携できる軽量かつ柔軟なPythonオープンソースライブラリで、非構造化テキストから信頼性の高い構造化データをプログラム的に抽出可能にします。


LangExtractの注目ポイント

🔍 1. ソースとの正確な紐づけ(Source Grounding)

LangExtractは、抽出したすべての情報を元テキスト内の文字単位の位置情報とともに記録。抽出結果を原文上にハイライト表示できるため、情報の出所を可視化・検証しやすく、透明性のある情報抽出が実現します。

📊 2. 安定した構造化出力

「few-shot」形式で例を与えることで、出力スキーマを指定可能。GeminiのようなモデルではControlled Generationによって、フォーマットが崩れない正確な出力を得られます。

📚 3. 大規模文書に最適化された分割処理

100万トークン級の巨大文書でも、LangExtractはチャンク分割・並列処理・多段階抽出を駆使して、必要な情報を正確に抽出します。特に複数の事実を取り出す「針の山から針を探す」ようなケースに強みがあります。

🌐 4. インタラクティブな可視化機能

抽出結果をHTML形式で可視化可能。Google Colabなどでもすぐに使えるビジュアライゼーションで、レビューやデモに最適です。

🧠 5. モデル知識の活用

LangExtractは、ソーステキストに明示された情報だけでなく、モデルが持つ「世界知識」を活用して、推論ベースの補完情報も抽出可能。たとえば、患者の記録に現れた症状から、疾患の可能性を補足表示することも可能です(あくまで参考情報として)。


Shakespeare作品から始めるLangExtractの使い方(Quick Start)

✅ インストール


pip install langextract

✅ コード例:ロミオとジュリエットからキャラクター情報を抽出


import textwrap import langextract as lx # プロンプト定義 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.""") # Few-shot例 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"}, ), ], ) ] # 実行対象テキスト 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", ) # 抽出結果を保存 & 可視化 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)

このコードを実行するだけで、抽出された情報を含むインタラクティブなHTMLビジュアライゼーションを数分で生成できます。


医療・法務・金融分野など専門領域でも活用可能

LangExtractはもともと医療分野の情報抽出を目的として開発されており、たとえば診療記録から薬剤名や用量、副作用などの情報を抽出し、それらの関連性を視覚的に表示できます。

さらに、**放射線レポートの構造化デモ(RadExtract)**もHugging Faceで公開中。非構造なレポートを読み取り、重要な所見を構造化して表示することで、医療データの整合性や研究活用を大幅に加速させます。

🔗 RadExtractデモはこちら(Hugging Face)

※注意:このデモや医療情報抽出の例はあくまでLangExtractの可能性を示すものであり、医療判断を支援する正式な製品ではありません。


まとめ:LangExtractで非構造テキストの新しい可能性を

LangExtractは、非構造なテキストに眠る価値ある情報を、LLMの力を活かして正確かつ効率的に引き出す、革新的なツールです。医療、法務、ビジネス、エンタメなど、あらゆる分野に応用が期待できます。

🔧 今すぐ始めるには:

  • GitHubでコードとドキュメントをチェック

  • Colabでクイックデモを試す

  • 自分のドメインに合わせた抽出ルールを定義するだけ!


📘 詳細ドキュメント・サンプルコードはGitHubにて公開中
👉 LangExtract GitHubページ

0 件のコメント:

コメントを投稿