当前位置: 首页 > news >正文

利用ML.NET精准提取人名

在当今信息爆炸的时代,文本处理任务层出不穷,其中人名提取作为基础且重要的工作,广泛应用于信息检索、社交网络分析、客户关系管理等领域。随着人工智能不断进步,ML.NET作为微软推出的开源机器学习框架,为开发者提供了高效、便捷的工具来实现人名提取功能,极大地提升了开发效率与模型的准确性。

一、理解需求与数据准备

首先,明确任务的目标十分重要。人名提取的主要任务是从各类文本中识别出人名。这些文本可以来源于新闻报道、社交媒体帖子、小说故事等各种材料,开发者需收集多样的数据集,以涵盖古今中外不同风格的文本。这些文本既要有正式书面语,也应包含口语化、网络化的表达风格。

对于数据的标注,开发者需要将文本中的人名准确标记,以形成监督学习所需的带标签样本。比如,在句子李白在将进酒中抒发豪情中,李白应被标注为人名。这一过程虽然繁琐,但它将为后续模型训练打下坚实的基础。

二、模型选择与构建

在ML.NET中,提供了多种机器学习算法供开发者选择。针对人名提取任务,序列标注模型如条件随机场CRF极为适合,因为它能够考虑文本序列的上下文信息,依据前后词特征判断当前词是否为人名。

三、定义数据模型

在ML.NET中,我们需要定义输入和输出数据模型。对于NER任务,输入是一个文本字符串,而输出是字符串中每个单词的标签例如,确定一个单词是否为人名。以下是一个简单的数据模型示例:

复制
public class InputData 
{ [LoadColumn(0)] public string Text { get; set; } 
} public class OutputData 
{ [ColumnName(PredictedLabel)] public string[] PredictedLabels { get; set; } 
}

四、数据加载与预处理

接下来,加载数据集并进行必要的预处理,包括分词、特征提取等。处理过程中,您可能需要识别出文本中的词汇变化,从而更好地构建机器学习模型。预处理后数据代码示例:

复制
var pipeline = mlContext.Transforms.Text.TokenizeIntoWords(Tokens, Text) .Append(mlContext.Transforms.Text.ProduceWordBags(Features, Tokens, ngrams: 1, weighting: NgramExtractingEstimator.WeightingCriteria.Tf)); 
var data = mlContext.Data.LoadFromTextFile<InputData>(path: dataPath, hasHeader: false, separatorChar:  ); 
var transformedData = pipeline.Fit(data).Transform(data);

五、模型训练与评估

通过预处理后的数据,您可以开始训练机器学习模型。在训练完成后,通过测试数据集进行评估,以确保其准确性和有效性。ML.NET提供的多类分类器可以帮助您实现最佳的训练效果。以下是训练和评估的代码示例:

复制
var trainingPipeline = pipeline.Append(mlContext.MulticlassClassification.Trainers.Sdca(new SdcaMultiClassTrainer.Options { MaximumNumberOfIterations = 1000 })); 
var model = trainingPipeline.Fit(transformedData); 
var metrics = mlContext.MulticlassClassification.Evaluate(pr
edictions);

六、使用模型提取人名

模型训练完成后,即可利用经过优化的机器学习模型,来对新文本进行人名提取。实现这一过程的代码如下:

var predictionEngine = mlContext.Model.CreatePredictionEngine<InputData, OutputData>(model); 
var input = new InputData { Text = Hello, my name is John Doe and I live in New York. }; 
var prediction = predictionEngine.Predict(input);

七、实际应用场景

1. 文档处理

假设我们有一个文档处理系统,需要从文档中提取人名。

制
using Microsoft.ML;
using Microsoft.ML.Data;
using System;
using System.Collections.Generic;namespace DocumentProcessingApp
{public class Document{public string Content { get; set; }}public class NamedEntity{public string Text { get; set; }public string Label { get; set; }public float Score { get; set; }}class Program{static void Main(string[] args){// 创建 MLContextvar context = new MLContext();// 加载预训练模型var modelPath = Models/ner-model.zip;var pipelineModel = context.Model.Load(modelPath, out _);// 创建预测引擎var engine = context.Transforms.Text.TokenizeIntoWords(Tokens, nameof(Document.Content)).Append(context.Transforms.Text.ApplyWordEmbeddingLookup(TokenFeatures, Tokens)).Append(context.Transforms.Concatenate(Features, TokenFeatures)).Append(context.Model.LoadTransformer(pipelineModel));var predictionEngine = context.Model.CreatePredictionEngine<Document, IEnumerable<NamedEntity>>(engine);// 输入文档内容var document = new Document { Content = The meeting will be attended by Alice Johnson and Bob Brown. };// 进行预测var predictions = predictionEngine.Predict(document);// 输出结果foreach (var entity in predictions){if (entity.Label == Person){Console.WriteLine(Person Name: + entity.Text + , Confidence: + entity.Score);}}}}
}

2. 社交媒体分析

假设我们有一个社交媒体分析系统,需要从推特或评论中提取人名。

复制
using Microsoft.ML;
using Microsoft.ML.Data;
using System;
using System.Collections.Generic;namespace SocialMediaAnalysisApp
{public class Post{public string Text { get; set; }}public class NamedEntity{public string Text { get; set; }public string Label { get; set; }public float Score { get; set; }}class Program{static void Main(string[] args){// 创建 MLContextvar context = new MLContext();// 加载预训练模型var modelPath = Models/ner-model.zip;var pipelineModel = context.Model.Load(modelPath, out _);// 创建预测引擎var engine = context.Transforms.Text.TokenizeIntoWords(Tokens, nameof(Post.Text)).Append(context.Transforms.Text.ApplyWordEmbeddingLookup(TokenFeatures, Tokens)).Append(context.Transforms.Concatenate(Features, TokenFeatures)).Append(context.Model.LoadTransformer(pipelineModel));var predictionEngine = context.Model.CreatePredictionEngine<Post, IEnumerable<NamedEntity>>(engine);// 输入帖子内容var post = new Post { Text = Jane Doe just won an award at the event with John Smith. };// 进行预测var predictions = predictionEngine.Predict(post);// 输出结果foreach (var entity in predictions){if (entity.Label == Person){Console.WriteLine(Person Name: + entity.Text + , Confidence: + entity.Score);}}}}
}

3. 日志分析

假设我们有一个日志分析系统,需要从日志文件中提取人名。

复制
using Microsoft.ML;
using Microsoft.ML.Data;
using System;
using System.Collections.Generic;namespace LogAnalysisApp
{public class LogEntry{public string Message { get; set; }}public class NamedEntity{public string Text { get; set; }public string Label { get; set; }public float Score { get; set; }}class Program{static void Main(string[] args){// 创建 MLContextvar context = new MLContext();// 加载预训练模型var modelPath = Models/ner-model.zip;var pipelineModel = context.Model.Load(modelPath, out _);// 创建预测引擎var engine = context.Transforms.Text.TokenizeIntoWords(Tokens, nameof(LogEntry.Message)).Append(context.Transforms.Text.ApplyWordEmbeddingLookup(TokenFeatures, Tokens)).Append(context.Transforms.Concatenate(Features, TokenFeatures)).Append(context.Model.LoadTransformer(pipelineModel));var predictionEngine = context.Model.CreatePredictionEngine<LogEntry, IEnumerable<NamedEntity>>(engine);// 输入日志消息var logEntry = new LogEntry { Message = Error reported by Michael Lee while accessing the system. };// 进行预测var predictions = predictionEngine.Predict(logEntry);// 输出结果foreach (var entity in predictions){if (entity.Label == Person){Console.WriteLine(Person Name: + entity.Text + , Confidence: + entity.Score);}}}}
}

八、总结

通过本文的介绍,你已经了解了利用ML.NET精准提取人名的全过程,从数据准备到模型训练,再到实际应用。ML.NET提供了强大的工具和灵活的API,使得开发者能够轻松构建和部署人名提取模型。希望这些内容对你有所帮助,让你在文本处理和自然语言处理领域更上一层楼。

往期精品推荐:

在国内默默无闻的.NET,在国外火的超乎想象?

C#的膨胀之路:创新还是灭亡

介绍.NET 6款好看的winform开源UI库

介绍一款最受欢迎的.NET 开源UI库

WPF第三方开源UI框架:打造独特体验的魔法师

WPF与Winform,你的选择是?

WinForm的前世今生

.NET成年了,然后呢?——编程界的逆袭传奇

相关文章:

利用ML.NET精准提取人名

在当今信息爆炸的时代&#xff0c;文本处理任务层出不穷&#xff0c;其中人名提取作为基础且重要的工作&#xff0c;广泛应用于信息检索、社交网络分析、客户关系管理等领域。随着人工智能不断进步&#xff0c;ML.NET作为微软推出的开源机器学习框架&#xff0c;为开发者提供了…...

Node.js的解释

1. Node.js 入门教程 1.1 什么是 Node.js&#xff1f; 1.1.1 Node.js 是什么&#xff1f; Node.js 是一个基于 JavaScript 的开源服务器端运行时环境&#xff0c;允许开发者用 JavaScript 编写服务器端代码。与传统的前端 JavaScript 主要运行在浏览器端不同&#xff0c;Nod…...

Macos下交叉编译安卓的paq8px压缩算法

官方没有android的编译方法&#xff0c;自己编写脚本在macos下交叉编译. 下载源码&#xff1a; git clone https://github.com/hxim/paq8px.git 稍旧的ndk并不能编译成功&#xff0c;需要下载最新的ndkr27c, 最后是使用clang来编译。 编译build.sh export ANDROID_NDK/Vol…...

如何在data.table中处理缺失值

&#x1f4ca;&#x1f4bb;【R语言进阶】轻松搞定缺失值&#xff0c;让数据清洗更高效&#xff01; &#x1f44b; 大家好呀&#xff01;今天我要和大家分享一个超实用的R语言技巧——如何在data.table中处理缺失值&#xff0c;并且提供了一个自定义函数calculate_missing_va…...

从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑

文章目录 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑一 参考二 安装三 启动准备大模型文件 四 数据集&#xff08;关键&#xff09;&#xff01;4.1 Alapaca格式4.2 sharegpt4.3 在 dataset_info.json 中注册4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分…...

SQL-leetcode—1164. 指定日期的产品价格

1164. 指定日期的产品价格 产品数据表: Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | new_price | int | | change_date | date | ---------------------- (product_id, change_date) 是此表的主键&#xff08;具…...

[Day 15]54.螺旋矩阵(简单易懂 有画图)

今天我们来看这道螺旋矩阵&#xff0c;和昨天发的题很类似。没有技巧&#xff0c;全是循环。小白也能懂~ 力扣54.螺旋矩阵 题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; …...

HTTP 配置与应用(不同网段)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新校园网设计。 我是一个萌新小白&#xff0c;有误地方请大家指正&#xff0c;谢谢…...

Quartus:开发使用及 Tips 总结

Quartus是Altera&#xff08;现已被Intel收购&#xff09;推出的一款针对其FPGA产品的综合性开发环境&#xff0c;用于设计、仿真和调试数字电路。以下是使用Quartus的一些总结和技巧(Tips)&#xff0c;帮助更高效地进行FPGA项目开发&#xff1a; 这里写目录标题 使用总结TIPS…...

VSCode下EIDE插件开发STM32

VSCode下STM32开发环境搭建 本STM32教程使用vscode的EIDE插件的开发环境&#xff0c;完全免费&#xff0c;有管理代码文件的界面&#xff0c;不需要其它IDE。 视频教程见本人的 VSCodeEIDE开发STM32 安装EIDE插件 Embedded IDE 嵌入式IDE 这个插件可以帮我们管理代码文件&am…...

Golang并发机制及CSP并发模型

Golang 并发机制及 CSP 并发模型 Golang 是一门为并发而生的语言&#xff0c;其并发机制基于 CSP&#xff08;Communicating Sequential Processes&#xff0c;通信顺序过程&#xff09; 模型。CSP 是一种描述并发系统中交互模式的正式语言&#xff0c;强调通过通信来共享内存…...

HTML 文本格式化详解

在网页开发中&#xff0c;文本内容的呈现方式直接影响用户的阅读体验。HTML 提供了多种文本格式化元素&#xff0c;可以帮助我们更好地控制文本的显示效果。本文将详细介绍 HTML 中的文本格式化元素及其使用方法&#xff0c;帮助你轻松实现网页文本的美化。 什么是 HTML 文本格…...

我谈《概率论与数理统计》的知识体系

学习《概率论与数理统计》二十多年后&#xff0c;在廖老师的指导下&#xff0c;才厘清了各章之间的关系。首先&#xff0c;这是两个学科综合的一门课程&#xff0c;这一门课程中还有术语冲突的问题。这一门课程一条线两个分支&#xff0c;脉络很清晰。 概率论与统计学 概率论…...

五、华为 RSTP

RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;是 STP 的优化版本&#xff0c;能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制&#xff1a;RSTP 通过引入边缘端口、P/A&#xff08;Proposal/Agreement&#xff09;机制等&…...

基于Java Web的网上房屋租售网站

内容摘要 本毕业设计题目为《基于Java Web的网上房屋租售网站》&#xff0c;是在信息化时代下充分利用互联网对传统房屋租售方式进行创新&#xff0c;在互联网上进行房屋租售突破了传统方式的局限性。对于房屋租售的当事人都提供了极大的便利。本稳针对了实际用户需求&#xf…...

Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用

QTableView 是QT的一个强大的表视图部件&#xff0c;可以与模型结合使用以显示和编辑数据。QSqlQueryModel、QSqlTableModel 都是用于与 SQL 数据库交互的模型,将二者与QTableView结合使用可以轻松地展示和编辑数据库的数据。 QSqlQueryModel的简单应用 import sys from PySid…...

git常用命令学习

目录 文章目录 目录第一章 git简介1.Git 与SVN2.Git 工作区、暂存区和版本库 第二章 git常用命令学习1.ssh设置2.设置用户信息3.常用命令设置1.初始化本地仓库init2.克隆clone3.查看状态 git status4.添加add命令5.添加评论6.分支操作1.创建分支2.查看分支3.切换分支4.删除分支…...

【优选算法】7----三数之和

来了来了&#xff0c;他来了&#xff0c;又是学习算法的一天~ 今天的嘉宾是中等难度的算法题----三数之和&#xff01; ------------------------------------------begin------------------------------------ 题目解析&#xff1a; 哇趣&#xff01;又是给了一个数组&#…...

分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法

分子动力学模拟&#xff08;Molecular Dynamics Simulation&#xff0c;简称MD&#xff09;是一种基于经典力学原理的计算物理方法&#xff0c;用于模拟原子和分子在给定时间内的运动和相互作用‌。以下是关于分子动力学模拟的一些核心术语和概念&#xff1a; ‌定义系统‌&am…...

2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs

2025年数学建模美赛 A题分析&#xff08;1&#xff09;Testing Time: The Constant Wear On Stairs 2025年数学建模美赛 A题分析&#xff08;2&#xff09;楼梯磨损分析模型 2025年数学建模美赛 A题分析&#xff08;3&#xff09;楼梯使用方向偏好模型 2025年数学建模美赛 A题分…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...