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

NLP基础——中文分词

简介

分词是自然语言处理(NLP)中的一个基本任务,它涉及将连续的文本序列切分成多个有意义的单元,这些单元通常被称为“词”或“tokens”。在英语等使用空格作为自然分隔符的语言中,分词相对简单,因为大部分情况下只需要根据空格和标点符号来切分文本。

然而,在汉语等语言中,并没有明显的单词界限标记(如空格),因此汉语分词比较复杂。汉字序列必须被正确地切割成有意义的词组合。例如,“我爱北京天安门”,应该被正确地划分为“我/爱/北京/天安门”。

方法

中文分词技术主要可以归类为以下几种方法:

  1. 基于字符串匹配的方法:这种方法依赖一个预先定义好的字典来匹配和确定句子中最长能够匹配上的字符串。这包括正向最大匹配法、逆向最大匹配法以及双向最大匹配法。

  2. 基于理解的方法:通过模拟人类理解句子含义进行分词,考虑上下文、句法结构和其他信息。

  3. 基于统计学习模型:利用机器学习算法从大量已经人工标注好了分词结果的数据集里学习如何进行有效地分词。常见算法包括隐马尔可夫模型(HMM)、条件随机场(CRF)以及近年来流行起来基于深度学习框架构建神经网络模型(RNNs、CNNs、LSTMs、Transformer、BERT等)。

  4. 混合方法:结合以上几种不同策略以提高精确度和鲁棒性。

  5. 基于规则: 通过制定一系列规则手动或半自动地进行文字断开, 这通常需要专业知识并且效率不高, 但可以在特定情境下发挥作用。

Python栗子

基于字符串匹配,最大前向匹配,代码如下

def max_match_segmentation(text, dictionary):max_word_length = max(len(word) for word in dictionary)start = 0segmentation = []while start < len(text):for length in range(max_word_length, 0, -1):if length > len(text) - start:continueword = text[start:start + length]if word in dictionary:segmentation.append(word)start += lengthbreakelse:  # 如果没有找到,则按单字切分segmentation.append(text[start])start += 1return segmentation# 示例字典和用法:
dictionary = {"我", "爱", "北京", "天安门"}
text_to_segment = "我爱北京天安门"segments = max_match_segmentation(text_to_segment, dictionary)print("分词结果:", "/ ".join(segments))

构建思路(如何实现基于统计的分词方法)

基于统计学习的中文分词方法其核心思想是从大量已经分词的文本(语料库)中学习如何将连续的汉字序列切分成有意义的词汇。通常包括以下几个步骤:

  1. 语料库准备:收集并整理一定量的已经进行过人工分词处理的文本数据,作为训练集。

  2. 特征提取:从训练数据中提取有助于模型学习和预测的特征。在传统统计模型中,这些特征可能包括:

    • 字符及其邻近字符
    • 词性标注信息
    • 字符组合频率
  3. 概率模型选择:选择合适的统计概率模型来估算不同切分方式出现的概率。常见模型包括:

    • 隐马尔可夫模型(HMM)
    • 条件随机场(CRF)
    • 最大熵模型
    • 支持向量机(SVM)
  4. 参数估计与训练:利用选定的统计学习算法对特征和标签进行建模,并通过算法调整参数以最大化某种性能指标或者最小化误差。

  5. 解码与优化:使用如Viterbi算法等解码技术找到给定字序列下最可能对应的词序列。

  6. 评估与调整:通过交叉验证、留出验证或引入开发集等方式,在非训练数据上评价分词效果,并据此调整特征或者优化参数。

  7. 迭代改进: 在实际应用过程中,根据反馈持续追踪新出现单字、新兴流行语等元素,更新语料库并重新训练以保证系统性能不断提升。

基于统计学习方法进行中文分词具有较强实用性和广泛适用性。它不依赖复杂规则体系,而是通过从数据本身“学会”如何正确地将句子划分为单个单词或短语。

分词参考链接

  • tokenizer https://huggingface.co/docs/tokenizers
  • 微型中文分词器 https://github.com/howl-anderson/MicroTokenizer
  • 中文分词jieba https://github.com/fxsjy/jieba
  • THULAC:一个高效的中文词法分析工具包https://github.com/thunlp/THULAC-Python

相关文章:

NLP基础——中文分词

简介 分词是自然语言处理&#xff08;NLP&#xff09;中的一个基本任务&#xff0c;它涉及将连续的文本序列切分成多个有意义的单元&#xff0c;这些单元通常被称为“词”或“tokens”。在英语等使用空格作为自然分隔符的语言中&#xff0c;分词相对简单&#xff0c;因为大部分…...

阿里云服务器Alibaba Cloud Linux 3镜像版本大全说明

Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版&#xff0c;Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式&#xff0c;目前已经推出Alibaba Cloud Linux 3&#xff0c;阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 3版本特性说明&#xff…...

WebGIS开发的常见框架及优缺点

WebGIS开发引擎的发展历程&#xff1a; 内容来自公众号&#xff1a;Spatial Data 地图API分类 WebGIS系统通常都围绕地图进行内容表达&#xff0c;但并不是有地图就一定是WebGIS&#xff0c;所以下面要讨论下基于Web的地图API分类及应用场景。Web上的Map API主要分类&#xff…...

ansible 配置jspgou商城上线(MySQL版)

准备环境 准备两台纯净的服务器进行&#xff0c;在实验之前我们关闭防火墙和selinux systemctl stop firewalld #关闭防火墙 setenforce 0 #临时关闭selinux hosts解析(两台服务器都要去做) [rootansible-server ~]# vim /etc/hosts 10.31.162.24 ansible-ser…...

算法导论复习——CHP22 分支限界法

LIFO和FIFO分枝-限界法 采用宽度优先策略&#xff0c;在生成当前E-结点全部儿子之后再生成其它活结点的儿子&#xff0c;且用限界函数帮助避免生成不包含答案结点子树的状态空间的检索方法。两种基本设计策略&#xff1a; FIFO检索&#xff1a;活结点表采用队列&#x…...

鸿蒙系列--装饰器

一、基础UI组件结构 每个UI组件需要定义为Component struct对象&#xff0c;其内部必须包含一个且只能包含一个build(){}函数&#xff0c;用于绘制UI&#xff1b;struct之内、build()函数之外的地方用于存放数据。 二、基本UI装饰器 Entry 装饰struct&#xff0c;页面的入口…...

FairGuard游戏加固产品常见问题解答

针对日常对接中&#xff0c;各位用户对FairGuard游戏加固方案在安全性、稳定性、易用性、接入流程等方面的关注&#xff0c;我们梳理了相关问题与解答&#xff0c;希望可以让您对产品有一个初步的认知与认可。 Q1:FairGuard游戏加固产品都有哪些功能? A&#xff1a;FairGuar…...

Redis(二)数据类型

文章目录 官网备注十大数据类型StringListHashSetZSetBitmapHyperLogLog&#xff1a;GEOStreamBitfield 官网 英文&#xff1a;https://redis.io/commands/ 中文&#xff1a;http://www.redis.cn/commands.html 备注 命令不区分大小写&#xff0c;key区分大小写帮助命令help…...

2023年广东省网络安全B模块(笔记详解)

模块B 网络安全事件响应、数字取证调查和应用安全 一、项目和任务描述: 假定你是某网络安全技术支持团队成员,某企业的服务器系统被黑客攻击,你的团队前来帮助企业进行调查并追踪本次网络攻击的源头,分析黑客的攻击方式,发现系统漏洞,提交网络安全事件响应报告,修复系统…...

每日力扣算法题(简单篇)

543.二叉树的直径 原题&#xff1a; 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 解题思路&#xff1a; …...

Flume基础知识(三):Flume 实战监控端口数据官方案例

1. 监控端口数据官方案例 1&#xff09;案例需求&#xff1a; 使用 Flume 监听一个端口&#xff0c;收集该端口数据&#xff0c;并打印到控制台。 2&#xff09;需求分析&#xff1a; 3&#xff09;实现步骤&#xff1a; &#xff08;1&#xff09;安装 netcat 工具 sudo yum …...

通过IP地址如何进行网络安全防护

IP地址在网络安全防护中起着至关重要的作用&#xff0c;可以用于监控、过滤和控制网络流量&#xff0c;识别潜在威胁并加强网络安全。以下是通过IP地址进行网络安全防护的一些建议&#xff1a; 1. 建立IP地址白名单和黑名单&#xff1a; 白名单&#xff1a;确保只有授权的IP地…...

Vue.js 中使用 Watch 选项实现动态问题判断与展示答案

组件结构 以下是组件的基本结构&#xff1a; <template><div><!-- 输入框&#xff0c;用于输入问题 --><p>提出一个是/否问题&#xff1a;<input v-model"question" :disabled"loading" /></p><!-- 显示答案 --&…...

python笔记-自用

2024/1/3# python用号实现字符串的拼接&#xff0c;非字符串不能拼接 from pymysql import Connection# 连接mysql数据库salary 100 name "wang"ans "%s" % salary name print(ans)x 1 y 2 sum "%s %s" % (x, y) print(sum)# %s字符串占…...

安克创新与火山引擎数智平台开展合作:数据分析降门槛 数据协同破边界

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;消费电子品牌安克创新与火山引擎数智平台&#xff08;VeDI&#xff09;达成合作&#xff0c;双方将聚焦安克创新大数据平台的海量数据分析场景&…...

LDD学习笔记 -- Linux内核模块

LDD学习笔记 -- 内核模块 简介LKM类型Static Linux Kernel ModuleDynamic Linux Kernel ModuleLKM编写语法 syntax详细描述内核头文件用户空间头文件Module Initialization FunctionModule Cleanup FunctionKeyword & Tag宏 __init __exitLKM入口注册Module Metadate&#…...

springboot整合springbatch批处理

springboot整合springbatch实现批处理 简介项目搭建步骤 简介 项目搭建 参考博客【场景实战】Spring Boot Spring Batch 实现批处理任务&#xff0c;保姆级教程 步骤 1.建表 建表sql CREATE TABLE student (id int NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL C…...

答案解析——C语言—第2次作业:转义字符

本次作业的链接如下&#xff1a;C语言—第2次作业&#xff1a;转义字符 1.下面哪个不是C语言内置的数据类型&#xff1a; C char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 …...

HTML5-新增表单input属性

新增表单属性 form控件主要新增的属性: autocomplete 是否启用表单的自动完成功能&#xff0c;取值&#xff1a;on&#xff08;默认&#xff09;、off novalidate 提交表单时不进行校验&#xff0c;默认会进行表单校验 autocomplete属性 概念&#xff1a;autocomplete属性…...

css-、串联选择器和后代选择器的用法

& &表示嵌套的上一级&#xff0c;这是sass的语法&#xff0c;代表上一级选择器 .btn {&.primary {background-color: #007bff;color: #fff;} } 编译出来的结果是同一个元素&#xff0c;有两个类名&#xff0c;两个类名之间没有空格&#xff1a; .btn.primary {…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

mac 安装homebrew (nvm 及git)

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

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...