<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>資訊抽取 on KnightLi的博客</title>
        <link>https://www.knightli.com/zh-tw/tags/%E8%B3%87%E8%A8%8A%E6%8A%BD%E5%8F%96/</link>
        <description>Recent content in 資訊抽取 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Fri, 01 May 2026 02:58:21 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/%E8%B3%87%E8%A8%8A%E6%8A%BD%E5%8F%96/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Google LangExtract：用 LLM 從長文本裡抽取結構化資料</title>
        <link>https://www.knightli.com/zh-tw/2026/05/01/google-langextract-llm-structured-data-extraction/</link>
        <pubDate>Fri, 01 May 2026 02:58:21 +0800</pubDate>
        
        <guid>https://www.knightli.com/zh-tw/2026/05/01/google-langextract-llm-structured-data-extraction/</guid>
        <description>&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 是 Google 開源的一個 Python 函式庫，用來從非結構化文本中抽取結構化資訊。&lt;/p&gt;
&lt;p&gt;它的使用場景很直接：給它一段文本、一個提示詞和少量範例，讓大型語言模型按你定義的欄位抽取內容，並把結果組織成可處理的資料。&lt;/p&gt;
&lt;p&gt;和普通「讓模型總結一下」不同，&lt;code&gt;LangExtract&lt;/code&gt; 更關注三件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;按固定結構抽取資訊&lt;/li&gt;
&lt;li&gt;保留抽取結果和原文位置的對應關係&lt;/li&gt;
&lt;li&gt;支援長文件和視覺化檢查&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你經常需要從報告、論文、病歷、合約、日誌或網頁文本裡抽取實體、事件、關係和屬性，這類工具會比手寫正則更靈活，也比純聊天式提問更容易進入後續資料處理流程。&lt;/p&gt;
&lt;h2 id=&#34;它解決什麼問題&#34;&gt;它解決什麼問題
&lt;/h2&gt;&lt;p&gt;很多文本抽取任務看起來簡單，實際做起來很麻煩。&lt;/p&gt;
&lt;p&gt;比如你想從一篇長文裡抽取：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;人名、機構名、地點&lt;/li&gt;
&lt;li&gt;事件、時間、參與方&lt;/li&gt;
&lt;li&gt;藥物、劑量、不良反應&lt;/li&gt;
&lt;li&gt;產品型號、參數、價格&lt;/li&gt;
&lt;li&gt;合約條款、義務、期限&lt;/li&gt;
&lt;li&gt;日誌裡的錯誤類型和上下文&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果格式固定，正則或傳統解析器可以解決。&lt;br&gt;
但只要文本表達稍微自然一點，規則就會迅速變複雜。&lt;/p&gt;
&lt;p&gt;大型語言模型適合理解自然語言，但直接讓模型「抽一下」又容易出現幾個問題：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;輸出格式不穩定&lt;/li&gt;
&lt;li&gt;不知道資訊來自原文哪裡&lt;/li&gt;
&lt;li&gt;長文件容易漏&lt;/li&gt;
&lt;li&gt;很難批量處理&lt;/li&gt;
&lt;li&gt;結果不方便人工複核&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 想解決的就是這一層問題：把 LLM 的理解能力包裝成更可控的抽取流程。&lt;/p&gt;
&lt;h2 id=&#34;langextract-的幾個特點&#34;&gt;LangExtract 的幾個特點
&lt;/h2&gt;&lt;h3 id=&#34;1-用範例約束抽取格式&#34;&gt;1. 用範例約束抽取格式
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 的思路不是只給一句含糊提示詞，而是透過 prompt 和 examples 告訴模型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;要抽取什麼&lt;/li&gt;
&lt;li&gt;欄位叫什麼&lt;/li&gt;
&lt;li&gt;每個欄位應該怎麼填&lt;/li&gt;
&lt;li&gt;不確定時應該怎麼處理&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這種 few-shot 方式很適合資訊抽取任務。&lt;br&gt;
你給的範例越貼近真實資料，模型越容易穩定輸出相同結構。&lt;/p&gt;
&lt;h3 id=&#34;2-抽取結果能對應回原文&#34;&gt;2. 抽取結果能對應回原文
&lt;/h3&gt;&lt;p&gt;資訊抽取最怕「看起來對，但不知道從哪來的」。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 的一個重點是把抽取結果和原文位置對齊。這樣你後續檢查時，不只是看到一個 JSON 結果，還能回到原文看這條資訊來自哪一段。&lt;/p&gt;
&lt;p&gt;這對需要複核的場景很重要，比如醫學文本、法律文本、研究資料和企業內部文件。&lt;/p&gt;
&lt;h3 id=&#34;3-支援長文件&#34;&gt;3. 支援長文件
&lt;/h3&gt;&lt;p&gt;長文件抽取容易遇到上下文窗口、漏抽和重複抽取問題。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 提供了面向長文本的處理方式，可以把長文件拆分後並行處理，再把抽取結果組織起來。&lt;/p&gt;
&lt;p&gt;這讓它更適合處理完整報告、論文、長網頁、批量資料，而不是只處理一小段文本。&lt;/p&gt;
&lt;h3 id=&#34;4-支援視覺化檢查&#34;&gt;4. 支援視覺化檢查
&lt;/h3&gt;&lt;p&gt;抽取結果如果只能看 JSON，很容易漏掉問題。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 支援把抽取結果視覺化，讓你更直觀地查看模型從哪裡抽了什麼。&lt;br&gt;
這對調 prompt、查漏抽、查誤抽都很有幫助。&lt;/p&gt;
&lt;h2 id=&#34;什麼時候適合用&#34;&gt;什麼時候適合用
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 適合這些場景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你要從自然語言文本中抽結構化欄位&lt;/li&gt;
&lt;li&gt;文本格式不完全固定&lt;/li&gt;
&lt;li&gt;需要保留抽取結果和原文的對應關係&lt;/li&gt;
&lt;li&gt;需要處理較長文件&lt;/li&gt;
&lt;li&gt;結果需要人工複核&lt;/li&gt;
&lt;li&gt;後續要進入表格、資料庫或資料分析流程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;典型例子包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;從醫學文本裡抽取症狀、藥物、劑量和反應&lt;/li&gt;
&lt;li&gt;從合約裡抽取甲乙方、義務、金額和期限&lt;/li&gt;
&lt;li&gt;從論文裡抽取研究對象、方法、結論&lt;/li&gt;
&lt;li&gt;從產品資料裡抽取規格參數&lt;/li&gt;
&lt;li&gt;從客服記錄裡抽取問題類型和處理結果&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果只是臨時問一段文本的大意，用普通聊天模型就夠。&lt;br&gt;
如果你要把文本變成後續可處理的資料，&lt;code&gt;LangExtract&lt;/code&gt; 會更合適。&lt;/p&gt;
&lt;h2 id=&#34;基本安裝&#34;&gt;基本安裝
&lt;/h2&gt;&lt;p&gt;專案支援透過 &lt;code&gt;pip&lt;/code&gt; 安裝：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install langextract
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;也可以從原始碼安裝：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/google/langextract.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; langextract
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -e .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果要使用模型 API，需要按對應模型提供方配置 API key。&lt;br&gt;
專案文件裡重點展示了 Gemini 相關用法，也支援透過適配層接入其他模型提供方。&lt;/p&gt;
&lt;h2 id=&#34;基本使用思路&#34;&gt;基本使用思路
&lt;/h2&gt;&lt;p&gt;一個典型流程大概是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;準備原始文本&lt;/li&gt;
&lt;li&gt;寫清楚抽取目標&lt;/li&gt;
&lt;li&gt;給少量範例&lt;/li&gt;
&lt;li&gt;呼叫 &lt;code&gt;LangExtract&lt;/code&gt; 執行抽取&lt;/li&gt;
&lt;li&gt;檢查結構化結果&lt;/li&gt;
&lt;li&gt;必要時產生視覺化頁面複核&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這裡最關鍵的是第二步和第三步。&lt;/p&gt;
&lt;p&gt;提示詞要描述清楚任務，例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;只抽取文本中明確出現的資訊&lt;/li&gt;
&lt;li&gt;不要根據常識補充&lt;/li&gt;
&lt;li&gt;欄位缺失時留空&lt;/li&gt;
&lt;li&gt;同一類實體保持欄位結構一致&lt;/li&gt;
&lt;li&gt;輸出中保留原文片段或位置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;範例要盡量接近真實輸入。&lt;br&gt;
如果真實文本裡有雜訊、縮寫、換行、表格殘留，範例裡最好也體現出來。&lt;/p&gt;
&lt;h2 id=&#34;用它時要注意什麼&#34;&gt;用它時要注意什麼
&lt;/h2&gt;&lt;p&gt;第一，不要把抽取任務寫得太泛。&lt;/p&gt;
&lt;p&gt;比如「抽取有用資訊」就太寬。&lt;br&gt;
更好的寫法是「抽取藥物名稱、劑量、給藥頻率和不良反應」。&lt;/p&gt;
&lt;p&gt;第二，不要完全信任模型輸出。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 能把結果和原文對齊，但這不等於模型永遠不會漏抽或誤抽。重要場景仍然需要抽樣檢查，必要時加人工複核。&lt;/p&gt;
&lt;p&gt;第三，範例比長篇解釋更有用。&lt;/p&gt;
&lt;p&gt;資訊抽取任務裡，模型往往更依賴範例來理解輸出格式。&lt;br&gt;
與其寫一大段抽象規則，不如給幾個高品質 example。&lt;/p&gt;
&lt;p&gt;第四，長文件要關注成本和速度。&lt;/p&gt;
&lt;p&gt;長文件拆分、並行抽取、模型呼叫都會帶來成本。正式批量處理前，最好先拿一小批樣本調好提示詞和欄位結構。&lt;/p&gt;
&lt;h2 id=&#34;和正則傳統-nlp-有什麼區別&#34;&gt;和正則、傳統 NLP 有什麼區別
&lt;/h2&gt;&lt;p&gt;正則適合格式穩定、規則清楚的文本。&lt;/p&gt;
&lt;p&gt;傳統 NLP 管線適合任務邊界明確、模型或詞典已經準備好的場景。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 更適合格式不那麼固定、但語義比較明確的文本。&lt;br&gt;
它不要求你為每種表達都寫規則，而是讓 LLM 根據範例理解抽取目標。&lt;/p&gt;
&lt;p&gt;但這也意味著它不是正則的完全替代品：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;對格式固定的文本，正則更便宜、更穩定&lt;/li&gt;
&lt;li&gt;對高風險場景，仍然要驗證和複核&lt;/li&gt;
&lt;li&gt;對大規模批量處理，要考慮模型呼叫成本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比較實際的做法是：規則清楚的部分用程式處理，語義變化大的部分交給 &lt;code&gt;LangExtract&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;適合怎樣的開發者&#34;&gt;適合怎樣的開發者
&lt;/h2&gt;&lt;p&gt;如果你正在做下面這些事情，可以關注 &lt;code&gt;LangExtract&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把長文本整理成表格&lt;/li&gt;
&lt;li&gt;從文件中抽實體和關係&lt;/li&gt;
&lt;li&gt;做知識庫入庫前的資料清洗&lt;/li&gt;
&lt;li&gt;從業務文本中抽取欄位&lt;/li&gt;
&lt;li&gt;做 LLM 驅動的資訊抽取原型&lt;/li&gt;
&lt;li&gt;需要保留抽取結果和原文證據&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它不是一個「點一下就自動懂所有文件」的工具，更像是一個幫你把 LLM 抽取流程工程化的函式庫。&lt;/p&gt;
&lt;p&gt;你仍然需要設計欄位、寫範例、檢查結果。&lt;br&gt;
但相比每次手寫模型呼叫、拼 prompt、解析輸出，它提供了更完整的抽取框架。&lt;/p&gt;
&lt;h2 id=&#34;參考&#34;&gt;參考
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/google/langextract&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;google/langextract&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;最後一句&#34;&gt;最後一句
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;LangExtract&lt;/code&gt; 的價值在於把「讓 LLM 從文本裡找資訊」這件事做得更可控。&lt;/p&gt;
&lt;p&gt;它適合的不是隨口總結，而是有欄位、有證據、有複核需求的資訊抽取任務。&lt;br&gt;
如果你的工作裡經常要把長文本變成結構化資料，可以把它作為一個值得試用的工具。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
