LangExtract:AI驱动的信息提取

在无结构文本中挖掘是一种特殊的痛苦。任何尝试从充满医学术语的PDF中提取药物名称,或者总结一个10页的法律文件,其中同一条款被五次用被动语态重述的人都知道我的意思。

多年来,解决方法要么是正则表达式恐怖秀,要么是会编造事实的复杂LLM提示。

进入:LangExtract,谷歌最新推出的开源功能,可能会最终让开发人员和数据团队恢复理智。

这个工具不仅仅“使用AI提取信息”。它将每项提取都与原始文本结合。这意味着它会显示确切的来源,甚至到字符偏移量。如果你想了解“罗密欧再次对朱丽叶着迷”出现在第二幕中的位置?它会告诉你。以视觉化、交互式的方式。

1、LangExtract有什么特别之处?

本质上,LangExtract是一个Python库,由Gemini(或者你更喜欢的其他LLM)提供支持,用于从文本中提取结构化信息。临床笔记、法律文本、财务报告、Reddit上的抱怨,只要是长篇、混乱且由人类撰写的内容都可以。

但它不是另一个“LLM包装器”。这个工具有真正的脊梁骨。以下是一些让它有趣的特点:

  • 可追溯性

每个提取的实体都会直接与原始文档绑定,并带有字符偏移量。没有模糊的转述。如果它提取了“朱丽叶是太阳”,它会向你展示确切出现在你的文本中的位置。这对于验证结果或调试边缘案例非常有用。基本上,不再需要盲目信任。

  • 输出不会偏离轨道

你定义一个模式。你给出几个例子。LangExtract不会像普通的LLM提示那样中途自由发挥。它会锁定你提供的模式并保持不变。这是因为它使用“受控生成”,一种让LLM输出保持在轨道上的方式。Gemini模型在这方面做得很好,但也可以与其他后端配合使用。

  • 处理长文档

大多数LLM在面对巨大的医疗报告或莎士比亚戏剧时,要么崩溃,要么在中途忘记自己在做什么。LangExtract通过将文档分解成块,进行并行处理,然后通过多次传递将所有内容拼接在一起来应对这个问题。这并不完美,但它是为了处理大量数据而设计的,而不是仅仅为了花哨的博客演示。

  • 你可以实际看到它做了什么

LangExtract会生成一个完全交互式的HTML文件,显示所有提取的实体及其上下文。因此,你不需要扫描JSON,而是可以打开浏览器,查看到底提取了什么,以及在哪里提取的。当你的老板想要快速演示,或者你在测试边缘案例时,这非常有用。

  • 非常灵活

有趣的是,这个工具非常灵活。医疗信息?当然。财务摘要?是的。法律条款?当然。你只需提供几个清晰的例子,它就会学习模式。不需要微调。这使得它成为一种奇怪但高效的工具,适用于结构重要但写作风格差异很大的领域。

他们甚至为放射学报告构建了一个演示。输入一些混乱的自由文本报告,LangExtract会将其转换为结构化的发现。这不是玩具级别的东西——这是为严肃工作流程提供的生产级框架(即使他们贴上了免责声明以避免诉讼)。

  • 它知道一些东西,但不会越界

LangExtract可以提取显式信息(直接来自文本)和推断信息(基于模型的世界知识)。这就是事情变得棘手的地方,世界知识仅取决于模型和你的提示示例。

2、总结使用案例

你有1000个混乱的文档。你需要从中提取结构化信息,如药物名称、关键发现、故事中的角色等。LangExtract可以:

提取这些信息 将其与原始文本联系起来 批量处理 可视化以便审查 在你选择的模型上运行 从几个示例中学习你的模式

而无需从头开始构建管道。

为什么这真的很重要

这感觉像是少数真正理解这一点的LLM工具之一。大多数AI包装器要么:

  • 尝试太聪明,最后生成垃圾
  • 或者把所有困难的思考都交还给你,说“只需微调它”

LangExtract处于中间地带:足够聪明以派上用场,足够扎实以值得信赖。它不试图成为一个神奇的全知系统。它试图以一种枯燥、可靠的方式发挥作用。

3、Python代码

开始使用langextract非常简单,只需要执行pip安装即可

pip install langextract

其余的代码如下

import textwrap  
import langextract as lx  

# 1. 定义一个简洁的提示  
prompt = textwrap.dedent("""\  
提取按出现顺序排列的角色、情感和关系。  
使用原文进行提取。不要转述或重叠实体。  
为每个实体提供有意义的属性以增加上下文。""")  

# 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",  
)

使用以下代码片段将输出保存为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)

4、结束语

你可以在Hugging Face上玩一玩演示,RadExtract,它展示了它是如何处理放射学文本的。或者只需pip安装它,扔进一些示例,然后在自己的文档上运行。

但如果你是一个厌倦了与正则表达式和半成品LLM管道搏斗的人,LangExtract可能是谷歌最近发布的最安静实用的东西。


原文链接:Google LangExtract : AI powered Information Extraction using Gemini

汇智网翻译整理,转载请标明出处