如何使用命名实体识别(NER)从文本中提取洞察
许多人喜欢阅读新闻并了解当前事件。但每天的新故事数量可能令人不知所措。 你可能想知道世界事件中涉及的人物、全球事件发生的地点以及被讨论的组织。但完整阅读每篇文章需要很长时间——而你可能很忙。这就是命名实体识别(NER)可以发挥作用的地方。 在本文中,我将向你展示如何构建一个新闻分析器,使用基于Transformer的NER模型从实时RSS源中提取有用数据。 让我们逐步了解其工作原理。
目录
什么是命名实体识别?
命名实体识别是一种帮助你挑选文本中重要术语的工具。 它将句子的部分标记为特定的实体类型——如名称、地点或日期。以下是实际示例。以这句话为例:
“苹果CEO蒂姆·库克在纽约市与高盛高管举行会议。”
一个好的NER模型将识别:
- “蒂姆·库克”——一个人物
- “苹果”——一个组织
- “高盛”——一个组织
- “纽约市”——一个地点
这种提取将非结构化文本转换为结构化数据。这使得搜索、计数和分析新闻中发生的事件变得更加容易。
什么是Hugging Face Transformers?
Hugging Face Transformers是一个Python库,让你能够访问一些最先进的NLP模型。 这些模型在大量数据上进行训练。你不必从头开始,而是可以使用已经理解语法、句子结构和实体识别的模型。 该库提供了一个简单的pipeline()函数,让你只需几行代码就能运行复杂的任务,如NER。你可以在huggingface.co/models找到许多预训练模型。 对于这个项目,我们将使用一个针对英语NER进行微调的模型。
如何构建新闻分析器
让我们构建新闻分析器。如果你想动手尝试,这里有一个Google Colab笔记本。 你需要几个Python包。打开终端或命令提示符并运行:
|
|
这些库将让你获取RSS源并使用预训练的Transformer模型分析文本。 我们将使用feedparser获取新闻文章。以下是如何从CNN的RSS源获取并打印摘要的方法:
|
|
这段代码提取最新文章的标题和摘要。
现在让我们加载一个用于NER的Transformer模型。 模型dslim/bert-base-NER适用于英语新闻文本:
|
|
参数aggregation_strategy=“simple"告诉管道合并形成单个命名实体的连续标记(如“蒂姆·库克”)。 该模型将每个单词/标记分类为以下实体类别之一:PER(人物)、LOC(地点)、ORG(组织)、MISC(杂项)或O(不在任何实体中)。 给模型一些时间下载到你的Colab笔记本或本地机器。
让我们将NER模型连接到你的源。以下脚本提取每篇文章的标题并对其运行NER。 为简单起见,我们跳过摘要,但如果你想包含它,请将ner_pipeline(title)更新为ner_pipeline(title+entry.summary)。
|
|
这将打印在每篇文章摘要中找到的实体,按类型分类。
例如,第一段文本是:
墨西哥准备通过伤害美国农民进行报复
响应是: 墨西哥 (LOC) 美国 (LOC)
两者都是地点。如果我们查看其他示例,可以看到NER模型进行的分类,如: iPhone (MISC) 美国优先 (ORG) 印度优先 (ORG) 瑞士 (MISC) 特朗普 (PER)
一旦你提取了实体,你可以:
- 计算人物或组织出现的频率。
- 跟踪随时间变化的趋势(例如,特定人物每周出现的频率)。
- 过滤提及特定地点或公司的文章。
NER的准确性
从NER获取结构化数据很强大,但并不完美。模型可能遗漏实体、错误标记术语或混淆相似名称。 例如,“亚马逊”在一个句子中可能被标记为地点,在另一个句子中可能被标记为组织,具体取决于上下文。这是正常的,因为NER模型寻找模式,它们并不真正“理解”文本背后的含义。 要从NER中获得最大价值,将其视为第一遍过滤器而不是最终答案。以下是一些处理其输出的实用方法:
- 寻找模式:当你分析随时间变化的趋势时,偶尔的错误不会那么重要。例如,跟踪哪些公司最常出现在头条新闻中,即使有一些提及被错误分类,也能给你提供有用的见解。
- 与已知列表或数据库交叉检查:如果你正在监控公司名称或产品,将NER结果与参考列表进行比较,以捕获拼写错误或错误分类。
- 将NER与其他技术结合:将其与情感分析、关键词匹配或频率计数配对,使数据更可靠和可操作。
- 手动验证高风险结果:如果你的工作流程涉及具有法律、财务或声誉影响的决策,抽样和审查NER输出以确认准确性。
通过将NER视为用于结构化和过滤文本的工具,而不是绝对真理的来源,你可以发现趋势、构建仪表板并快速呈现洞察,同时控制错误。
其他用例
NER远不止分析新闻标题。它是从大量非结构化文本中提取含义的核心工具。 企业使用它自动突出显示客户交互中的关键细节。例如,支持团队可以立即在支持票证和电子邮件中标记客户名称、产品、序列号或位置。这使得优先处理紧急请求、将问题路由到正确的团队以及发现重复问题而无需手动阅读每条消息变得更加容易。 律师事务所和研究人员严重依赖NER来处理大量文档。法律团队可以从合同、法院文件和监管更新中提取人物、公司和地点的名称,以构建可搜索的数据库或映射实体之间的联系。 学术研究人员可以对科学论文做同样的事情,加速文献综述并发现数千篇出版物中的模式。 在金融领域,NER是市场情报的强大工具。分析师使用它来跟踪新闻、收益报告和分析师简报中提到的公司、股票代码、货币和大宗商品。通过聚合这些数据,他们可以检测趋势、评估风险敞口或比手动审查更快地发现市场移动事件。 社交媒体和营销团队也依赖NER。通过自动识别推文和帖子中的品牌、竞争对手或影响者,他们可以监控品牌情感、检测新兴趋势并快速应对公关风险。 简而言之,无论你在哪里被文本淹没,无论是客户反馈、合同、市场报告还是社交源,NER都可以将那种非结构化的混乱转化为结构化的、可操作的洞察。
结论
我们在这里构建的是一个虽小但功能强大的新闻分析器。通过将实时数据源(RSS源)与来自Hugging Face Transformers的预训练NER模型结合,你可以自动从新闻文章中提取谁、什么和哪里。 请记住,NER模型并不完美。它们基于模式进行预测,而不是理解。由你决定如何解释它们的输出并处理不准确性。