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
汇智网翻译整理,转载请标明出处