この動画では、Googleのオープンソースプロジェクト「LangExtract」について詳しく解説されている。非構造化テキストから構造化データを抽出し、カスタムスキーマを定義して必要な情報を抽出する機能を持つPythonパッケージである。エンティティ抽出だけでなく、関係性の発見も可能で、カスタムナレッジグラフの作成によってRAGシステムでの活用が期待できる。実例として企業情報、決算データ、医療記録などから情報を抽出し、視覚化する方法が示されている。

LangExtractの概要
よっしゃ、これがLangExtractやで。Googleの新しいオープンソースプロジェクトで、非構造化データを構造化データに変換するのを手伝ってくれるんや。このプロジェクトで特に気に入っとるんは、カスタムスキーマが定義できることや。つまり、探しとる情報を抽出できるっちゅうことやな。それに、抽出した情報の視覚化もめっちゃええ感じになっとる。
GitHubで利用できるオープンソースプロジェクトやで。エンティティ抽出だけやなくて、関係性も見つけられる使い方を見せたるから、後でRAGなんかに使えるカスタムナレッジグラフも作れるんや。まず最初にこのプロジェクトが何をするかを見せて、それから色んな機能を見せて、実際の例も見ていこうや。
プロジェクトの基本機能
これは、大規模言語モデルを活用して非構造化データから構造化情報を抽出するオープンソースのPythonパッケージやで。言うたように、スキーマと一緒に短い例をいくつか提供したら、その情報を抽出してくれるんや。Geminiみたいなプロプライエタリモデルでもオープンソースモデルでも使えるで。
オープンソースモデルではテストしてへんから、Geminiの例だけ見せるわ。ただし、これが機能するには長いコンテキストのLLMが必要やで。
まず、pipを使ってパッケージをインストールする必要があるな。使い方はめっちゃ簡単や。ここに情報抽出に使いたいテキストがあるで。RAGや検索拡張生成で使う予定やったら、必ず完全な文書を提供せなあかん。
エンティティ抽出をチャンク単位でやるんやなくて、最初に文書レベルでやって、そのメタデータをチャンク レベルに接続したいんや。
実装の詳細
まず、高品質な例をいくつか設定する必要があるで。これによってLangExtractに正確に何が必要かを教えるんや。例のテキストを提供して、そのテキストからどの属性やエンティティを抽出したいかを特定するんやで。
それからテキスト内で例を提供するんや。このエンティティに属性があるなら、それも提供できるで。この属性は、異なるエンティティ間の関係抽出をしたい時にめっちゃ役に立つんや。ビデオの後半で具体的な例を見せたるわ。
これを設定して、入力テキストを提供し、提供した少数の例と一緒にプロンプトを使ってLangExtractで実行するだけや。
めっちゃ簡単に設定できるけど、ちょっと訂正があるで。これが実際に抽出を駆動するプロンプトやねん。実際の入力はここやで。抽出後は、生成されるきれいなHTML文書内で全てを視覚化できるんや。
基本例の実演
LangExtractの異なる機能を紹介するために、いくつかの簡単な例を説明していくで。興味があったら教えてや。検索拡張生成システムでLangExtractをどう使うかについて、もっと詳しいビデオを作るから。
まず、必要な異なるパッケージを全てインストールしてインポートする必要があるな。ここに基本的な例があるで。Appleに関連するこのテキストがあって、そこから特定の情報を抽出したいんや。
プロンプトは「企業、人、製品、日付、場所、価格を抽出せよ」や。この場合の例はMicrosoftに関連したものになるで。ここから情報を抽出する基準として使われる、めっちゃ高品質な例か例のセットを提供したいんや。
この例では、異なるエンティティを定義するだけや。例えば、企業、人、タイトルで、ここで提供したテキスト例に基づいとるんや。ここから具体的な情報を提供するで。これが少数例として使われるんや。複数の例を持てるで。単一の例である必要はないんや。
LangExtractで抽出関数を呼び出す時に必要なのは、入力テキスト、使いたいプロンプト、生成した例、使いたいモデルを提供することだけや。
実行結果の確認
そうしたらエンティティ抽出プロセスが実行されるんや。視覚化したかったら、このJSONLファイルが作成される。視覚化関数を呼び出してJSONLファイルを読み込めば、HTMLファイルが作成されるで。
まず、これの実行方法を見せたるわ。Pythonを使って、基本例やと思うで。これを実行すると、こんな感じの出力が見られるで。1つのチャンクが作成されて、ここに望んだ通りの形式で抽出された情報があるんや。文字境界も教えてくれるから、これはめっちゃええな。
構造化出力でこれを実行したかったら、文書レベルでやりたいんや。チャンクレベルではやったらあかん。そうしたらHTMLファイルが生成される。ここに例がある。これを通してみたら、抽出された全てのエンティティとその属性が見られるで。
この基本例では、属性は追加してへんかった。でも、特定された異なるエンティティが見られるで。また、単一のテキストには、単一タイプの単一エンティティだけやなくて、複数の異なるエンティティが含まれることもあるんや。
属性付きエンティティ抽出
今度は、エンティティだけやなくて、その属性も抽出するもっと具体的な例を見せたるわ。ここに四半期決算があるで。これは作成されたデータや。プロンプトはその四半期決算から特定の情報を抽出するんや。
この場合、例のプロンプトはデータ企業関連や。2つのレベルに入っていくで。基本的にエンティティである抽出クラスがあって、それから対応する属性があるんや。例えば、ティッカーと取引所は企業名の属性や。財務指標には期間、値、変化が属性として含まれとるんや。
これは1つの例だけや。ここにニュース記事の別の例があるで。この場合、資金調達イベント、競争的な動きを抽出したくて、それぞれに対応する属性もあるんや。
ここに顧客レビューの別の例もあるで。顧客レビューで作業しとるなら、例のテキストを提供して、構造化出力として正確に何を抽出したいかを示すこんな例を設定できるんや。
関係性抽出とナレッジグラフ
でも、メインのパワーはエンティティ抽出してから関係性を把握することやと思うで。これがナレッジグラフや関係グラフの作成に役立つんや。その方法の簡単な例を見せたるわ。
ここに薬物の例があるとしよう。これは患者による特定の薬物の投与量に関連しとるんや。薬物関連情報を抽出したいんや。これには投与量、経路、薬物頻度、持続時間が含まれる。これは今まで見てきたものや。その情報を抽出できるで。
でも、状態と異なる薬物間の関係を見る例を見てみよう。患者情報と直面しとる問題、投与しとる薬物のタイプをまとめた臨床ノートがあるとしよう。
プロンプトは「各薬物について、薬物名と投与量、薬物が治療する状態、関連する薬物と相互作用を特定せよ」や。ここに少数例の情報があるで。年齢と性別を属性として持つ患者情報を抽出するんや。
それから状態を抽出するで。これはこの特定の患者の状態や。それから各薬物について、名前、投与量、対応する属性を抽出するんや。気づく属性の1つは、状態エンティティに結び付けるこの関連状態や。
今、この特定の状態に関連する2つの異なる薬物があるで。でも実際の臨床ノートでは、互いに関連する3つの異なる状態を持つ3つの異なる薬物があると思うで。この例を提供するんや。
抽出フェーズとパラメータ
ここで見る追加のパラメータの1つは、抽出フェーズまたはパスや。これは基本的にLLMにこの情報を何回処理するかを教えるんや。パス数を増やすと、抽出の精度は上がる。でも、APIエンドポイントを複数回呼び出すことになるで。
最後に、これら全てのエンティティとその属性を収集して、再びJSONLファイルに入れるんや。得られる視覚化を見せたるわ。
これが臨床ノートや。全てのクラスについて、異なる属性が見られるで。例えば、これは患者情報や。年齢と性別があるで。薬物に行くと、関連する状態と一緒に投与量情報が見られるんや。
これはめっちゃ役に立つ。状態と薬物の間に直接的な関係があるからや。言うたように、それに基づいてナレッジグラフを作成できるんや。
ナレッジグラフの実例
LangExtractを使って抽出されたデータをナレッジグラフの作成に使う簡単な例を見せたるわ。正確にこんな感じに見えるで。言及された異なる状態が3つあると思う。実際は4つの異なる状態があるな。1つは高血圧、高脂血症、心房細動、これは2型糖尿病やと思うで。
各状態に対応する薬物がこんな感じや。この特定の状態には2つの異なる薬物が接続されとるみたいやな。これは薬物と治療しとる状態の関係を示すもので、全てこれは名前付きエンティティ認識と関係抽出を通して行われとるんや。
公式GitHubリポジトリには多くの例があるで。その1つが「LLMが医療情報の注釈を加速する」や。見せた例は、この論文で議論されとる例の一部に基づいとるんや。
言うたように、この構造化情報抽出を使って作成するナレッジグラフは、下流の検索拡張生成システムにめっちゃ役立つで。RAG用にこの構造化情報抽出を活用する方法についてもっと学ぶことに興味があったら教えてや。
最後の注意点
最後に行く前に1つ。これは公式にサポートされたGoogleの製品やないけど、Googlerの何人かによるオープンソースプロジェクトなんや。非構造化データから構造化情報抽出を手助けできる唯一のオープンソースプロジェクトやないで。他にもいくつかのアプローチがあるんや。
でも、情報検索システムで作業しとるなら、特にメタデータ使用のための構造化データ抽出を調べることを強く勧めるで。
とにかく、このビデオが役に立ったと思ってくれたらええな。見てくれてありがとう。いつものように、また次回会おうや。


コメント