news 2026/9/2 14:28:29

ML.NET实现人名、地名的提取

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ML.NET实现人名、地名的提取

ML.NET 可以通过文本分类或命名实体识别(NER)任务实现人名、地名的提取。以下是使用 ML.NET 实现该功能的核心思路和步骤:

核心原理

提取人名、地名属于命名实体识别(NER) 任务,本质是对文本中的每个词或字符进行分类(如“人名”“地名”“其他”)。ML.NET 可通过以下两种方式实现:

使用预训练模型:利用已训练好的 NER 模型直接进行预测(需配合支持实体识别的模型格式,如 ONNX)。
自定义训练:若有标注数据,可通过 ML.NET 的文本处理管道训练专属模型。

步骤示例(使用预训练模型)

1. 安装必要包

在项目中安装 ML.NET 核心包及 ONNX 模型支持包:

Install-Package Microsoft.ML
Install-Package Microsoft.ML.OnnxRuntime
Install-Package Microsoft.ML.OnnxTransformer


2. 准备预训练模型

获取支持中文命名实体识别的 ONNX 模型(如 bert-base-chinese-ner 转换的 ONNX 模型),放置在项目目录下。

3. 定义数据结构

// 输入数据:待处理的文本
public class TextInput
{
public string Text { get; set; }
}

// 输出数据:识别出的实体(包含实体类型和内容)
public class EntityOutput
{
public string EntityType { get; set; } // 如 "人名"、"地名"
public string EntityValue { get; set; } // 实体内容
}


4. 构建 ML 管道并预测

using Microsoft.ML;
using Microsoft.ML.Data;

class Program
{
static void Main()
{
// 初始化 ML 环境
var mlContext = new MLContext();

// 加载预训练的 ONNX 模型
var modelPath = "path/to/ner-model.onnx";

// 定义管道:加载模型并配置输入输出
var pipeline = mlContext.Transforms.ApplyOnnxModel(
outputColumnNames: new[] { "outputs" }, // 模型输出列名(需与模型匹配)
inputColumnNames: new[] { "inputs" }, // 模型输入列名(需与模型匹配)
modelFile: modelPath);

// 创建测试数据
var testData = mlContext.Data.LoadFromEnumerable(new[] {
new TextInput { Text = "张三在上海工作,李四来自北京。" }
});

// 加载模型并创建预测引擎
var model = pipeline.Fit(mlContext.Data.LoadFromEnumerable(new TextInput[0]));
var engine = mlContext.Model.CreatePredictionEngine<TextInput, EntityOutput>(model);

// 预测并提取实体
var result = engine.Predict(testData.First());
Console.WriteLine($"识别结果:{result.EntityType} - {result.EntityValue}");
// 预期输出类似:人名 - 张三;地名 - 上海;人名 - 李四;地名 - 北京
}
}


关键说明

- 模型选择:ML.NET 本身不自带预训练 NER 模型,需从第三方获取(如 Hugging Face 下载后转换为 ONNX 格式)。
- 自定义训练:若需针对特定场景优化,可准备标注数据(如用 [人名]张三[/人名]在[地名]上海[/地名] 格式标注),通过 TextFeaturizer 提取文本特征,配合 LightGbm 等算法训练分类模型。
- 局限性:相比 Python 的 NLP 库(如 spaCy、Hugging Face),ML.NET 在 NER 任务的生态和预训练模型丰富度上稍弱,适合已有 .NET 技术栈且需轻量集成的场景。

通过以上步骤,可基于 ML.NET 实现基础的人名、地名提取功能,实际应用中需根据模型类型调整输入输出配置。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 21:46:06

商业模式画布填充:LobeChat理清商业逻辑

商业模式画布填充&#xff1a;LobeChat理清商业逻辑 在AI技术加速落地的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;的能力早已不是瓶颈。真正制约其价值释放的&#xff0c;是用户与模型之间的交互鸿沟——再强大的模型&#xff0c;如果界面难用、集成困难、扩展受…

作者头像 李华
网站建设 2026/9/2 1:30:08

随机深度优先搜索(Randomized DFS)算法原理

随机深度优先搜索是深度优先搜索的变种&#xff0c;通过在每一步随机选择邻接节点来增加路径的不可预测性。该算法天然适合生成或解决迷宫问题&#xff0c;因其倾向于生成长而曲折的路径。核心特点&#xff1a;使用栈&#xff08;显式或隐式&#xff09;实现回溯随机选择邻接节…

作者头像 李华
网站建设 2026/9/3 0:52:04

计算机Java毕设实战-基于javaweb的在线图书借阅管理系统图书馆在线借阅管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/2 15:45:17

计算机Java毕设实战-基于JavaWeb的家装一体化平台室内设计、装修施工、建材选购【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/2 7:09:14

计算机Java毕设实战-基于SpringBoot+Vue的汽配销售管理系统的设计与实现基于JavaWeb的汽配销售管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/9/2 20:09:44

【LLM基础教程】从序列切分到上下文窗口02_三种数据切分方法

上一节内容&#xff1a;【LLM基础教程】从序列切分到上下文窗口01_为什么序列建模必须切分数据 本节也是对沐神课程的进一步理解&#xff1a;53 语言模型【动手学深度学习v2】 ​ 在上一节中我们看到&#xff1a;序列切分的目的&#xff0c;是把一条很长的文本&#xff0c;转化…

作者头像 李华