[開発者向け]Geminiでテキストを宝の山に:GoogleのOSSライブラリ「LangExtract」解説

目次

はじめに

 現代社会は、メール、日報、医療記録、顧客からのフィードバックといった、決まった形式を持たない「非構造化テキスト」で溢れています。これらのテキストには価値ある情報が眠っていますが、その情報を手作業で抽出・整理するのは多大な時間と労力を要する作業です。

 本稿では、この課題を解決するためにGoogleが発表したオープンソースのPythonライブラリ「LangExtract」について解説していきます。

参考記事

GitHub

要点

  • LangExtractは、GoogleのGeminiをはじめとする大規模言語モデル(LLM)を活用し、自由記述のテキストから構造化データを抽出するためのオープンソースPythonライブラリである。
  • 最大の特徴は、抽出した情報の根拠を原文中で正確に示す「ソースグラウンディング機能」であり、これにより高いトレーサビリティ(追跡可能性)と信頼性を実現する。
  • ユーザーが定義したデータ形式(スキーマ)に従って一貫した出力を保証し、特に長い文書の処理に最適化された設計がなされている。
  • 大量の学習データを必要とせず、少数の用例(few-shot)を提示するだけで、医療や金融といった専門分野のタスクにも柔軟に対応可能である。
  • 抽出結果をインタラクティブなHTML形式で可視化する機能も備えており、結果の検証やデモンストレーションを容易にする。

詳細解説

LangExtractとは? – テキストの海から情報を釣り上げる道具

 私たちの周りにある情報の多くは「非構造化テキスト」です。これは、特定のフォーマットを持たない自由な文章のことを指します。例えば、報告書に書かれた文章や、顧客からの問い合わせメールなどがこれにあたります。一方、Excelの表のように、行と列で綺麗に整理されたデータは「構造化データ」と呼ばれます。

 ビジネスにおいて、非構造化テキストに含まれる「顧客の要望」や「製品の不具合報告」といった重要な情報を抜き出して分析することは非常に価値があります。しかし、これを人手で行うのは大変な作業です。LangExtractは、この「情報抽出」のプロセスを自動化するために開発されました。

 このライブラリは、大規模言語モデル(LLM)、特にGoogleのGeminiの能力を利用して、人間が文章を読んで意味を理解するように、テキストから指定された情報を探し出し、整理された「構造化データ」として出力してくれます。

LangExtractを支える重要な5つの特徴

 LangExtractが情報抽出タスクにおいて効果的である理由は、以下の5つの特徴的な機能にあります。

  1. 正確なソースグラウンディング:情報の出所を明確に
     LangExtractが抽出したすべての情報は、元のテキストのどの部分から取得されたのかが正確に記録されます。これは「ソースグラウンディング」と呼ばれる機能で、抽出結果の横に元の文章がハイライト表示されるため、その情報が正しいかどうかを瞬時に検証できます。特に、医療記録や法的文書など、正確性が極めて重要な分野で非常に有用な機能です。
  2. 信頼性の高い構造化出力:欲しいデータを思い通りの形で
     「この文章から『人物名』と『その人の感情』を抜き出してほしい」といった指示を出す際に、どのような形式で出力してほしいかを定義できます。LangExtractは、Geminiモデルが持つ「制御された生成(Controlled Generation)」という機能を活用し、指定されたデータ構造(スキーマ)を厳密に守って出力します。これにより、後続のプログラムで扱いやすい、一貫性のあるデータを得ることができます。
  3. 長文コンテキストへの最適化:長い文書も効率的に処理
     一般的に、LLMは非常に長い文章の中から特定の情報を見つけ出すのが苦手な場合があります。LangExtractは、長い文書を適切な長さの「チャンク(塊)」に分割し、それぞれを並列で処理します。そして、複数回にわたって情報を抽出することで、文書全体から網羅的かつ正確に情報を抜き出すことを可能にしています。
  4. インタラクティブな可視化:結果を直感的に確認
     抽出タスクを実行すると、その結果を自己完結型のインタラクティブなHTMLファイルとして出力できます。このファイルを開くと、元のテキスト内で抽出された箇所が色付きでハイライトされており、マウスカーソルを合わせると詳細情報を確認できます。これにより、抽出の品質評価や関係者へのデモンストレーションが非常に簡単になります。
  5. 専門分野への柔軟な適応:Few-shot学習の力
     LangExtractの優れた点の一つは、特定の分野に適応させるためにLLMを再学習(ファインチューニング)する必要がないことです。開発者は、数個の「お手本」(few-shot example)を提示するだけで、ライブラリにタスクの内容を「学習」させることができます。これにより、医療、金融、法律、工学といった様々な専門分野のテキストに迅速に対応させることが可能です。

簡単な使い方:シェイクスピアの戯曲を例に

 実際にLangExtractがどのように使われるのか、公式ドキュメントにあるシェイクスピアの『ロミオとジュリエット』の一節から情報を抽出する例を見てみましょう。

 まず、ライブラリをインストールします。

pip install langextract  

 次に、Pythonコードで抽出タスクを定義します。

import textwrap
import langextract as lx

# 1. LLMへの指示(プロンプト)を定義する
prompt = textwrap.dedent("""
 登場人物、感情、関係性を出現順に抽出してください。
 抽出には正確なテキストを使用してください。言い換えやエンティティの重複は避けてください。
 各エンティティには文脈を追加するための意味のある属性を提供してください。""")

# 2. 高品質な「お手本」を1つ提供する
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"
 )

# 4. 抽出処理を実行する
result = lx.extract(
  text_or_documents=input_text,
  prompt_description=prompt,
  examples=examples,
  model_id="gemini-1.5-pro", # ここで使用するモデルを指定
 )

# 5. 結果をJSONLファイルに保存し、可視化HTMLを生成する
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)

 このコードは、まずLLMにどのような情報を抽出したいか(プロンプト)を伝え、次に具体的なお手本(examples)を見せています。このお手本を参考に、LLMは新しい入力テキスト(input_text)から同様の情報を抽出し、最終的にvisualization.htmlというファイルに結果を出力します。

まとめ

 本稿では、Googleの新しいオープンソースライブラリ「LangExtract」について解説しました。このライブラリは、Geminiなどの強力なLLMを活用することで、これまで多大な労力を要した非構造化テキストからの情報抽出を、信頼性高く、かつ効率的に行うことを可能にします。

 情報の出所を明確にする「ソースグラウンディング」や、専門分野にも柔軟に対応できる「few-shot学習」といった特徴は、多くの開発者やデータサイエンティストにとって、テキストデータ活用のハードルを大きく下げるものとなるでしょう。

 LangExtractは、単なるツールに留まらず、ビジネスにおけるデータ駆動型の意思決定を加速させ、新たな洞察を得るための強力なパートナーとなり得ます。ご興味を持たれた方は、ぜひ公式のGitHubリポジトリを訪れ、その可能性を探求してみてください。

この記事が気に入ったら
フォローしてね!

  • URLをコピーしました!
  • URLをコピーしました!
目次