分词任务介绍-(十)

分词任务

  • 中文分词
    • 正向最大匹配
      • 实现方式一
      • 实现方式二
    • 反向最大匹配
    • 双向最大匹配
    • jieba分词
    • 上述分词方法的缺点总结
    • 基于机器学习
  • 总结
    • 分词技术
    • 经验总结

中文分词

正向最大匹配

分词的步骤

1.收集整理一个词表,类似于字典。如下图
2.对于待分词的句子,或者字符串,从前向后寻找最长,在词表中出现的词。
3.并循环执行1-2;直到字符串末尾

 图一
释义: 上述中,在句子中找到的最长匹配的词就是北京大学,切割后,继续寻找、依次类推

实现方式一

1.先找出词表中最大词的长度,上述中,最大为北京大学,为4
2.从字符串最左侧开始,按照最大词的长度,即为4,设置一个窗口,检查第一个窗口中的词是否在词表中,即是否为最大词
3.如果在词表中,则在词的边界,即右侧进行划分,然后向右移动,截取下一个窗口;
4.如果不在词表中,则右侧回退一个字符,就是缩小一个窗口,看剩下的窗口内的字符是否为一个词,是的话,就截取;不是就继续缩小。截取后,在截取的边界继续执行第3步
5.循环执行上述3-4步骤;完成整个句子的切割

在这里插入图片描述

实现方式二

特点 构建的词表有些特点
举例说明: 根据我们前面有词表:北京、北京大学、生前、报道
我们构建出词表如下:
在这里插入图片描述
释义:

上述构建的词表中,0代表前缀;1代表一个真正的词
我们想要构建的词表的每一个词都可以通过上述的构建方式表示出来

分词的逻辑

1.首先还是从字符串的左侧到右侧,从前往后走,并且每次只取一个字
2.取到第一个字,在词表中判断,是否为前缀或者是一个词,如果都不是,则直接在该处切分
3.如果是前缀或者是词,则往右侧多走一个字,用这两个字判断是否为前缀或者词,如果都不是,则切分;否则,循环第3步
4.循环2-3步;直接完成切分

如下图:
在这里插入图片描述

反向最大匹配

释义:和正向最大匹配的方向相反,正向最大匹配是从左往右,从句子的前往后,反向最大匹配,就是从右往左,从句子后到前,进行匹配;其他的匹配逻辑和方案都相同

如图所示:
在这里插入图片描述

双向最大匹配

释义: 同时进行正向最大切分、负向最大切分,之后比较两者的结果,最后决定一句话的切分,采用那种切分结果

比较的策略:

  1. 单字词:词表中可以有单字词,从分词的角度,我们会把他看成一个词;一般单字词少,切分效果相对好些
  2. 非字典词:未在词典出现过的词,一般会分为单字词;比如,文本中出现的英文、一串数字等
  3. 词总量,两种方法,在切割同一个句子时,可能获得的词量是不一样的,一般来说,词总量越少,分的相对会好些

jieba分词

介绍:jieba是一个python库,可以方便的做中文分词
分词逻辑:

1.在做这个任务前,就有一个分好词的语料,这个语料分的很好,并且,将其中的每个词的出现的频次统计出来,即事先有一份词频的表
2.然后根据词表,将一句话,或者需要分词的语料中所有的切分方式,切分出来
3.统计每种方式的总词频数,选取切分结果最高的作为分词结果

如图:
在这里插入图片描述

上述分词方法的缺点总结

  1. 对词表极为依赖,如果没有词表,则无法进行;如果词表中缺少需要的词,结果也不会正确
  2. 切分过程中,不会关注整个句子的意思,而是机械的切割一个个片段
  3. 文本中的错别字问题无法解决,会造成连锁的切分错误
  4. 对实体名无法枚举到词表中,比如:城市名、人名等;但是这些词却会造成切分的错误

基于机器学习

释义: 我们将上述分词的任务,转化为一个分词模型的训练任务,用模型去解决分词问题。

分词转化为分词模型的逻辑:

1.分词本质上是需要将一句话按照其内在的含义,将去拆分开,那么我们用模型如何去表示和预测相关信息,可以表示去语义的拆分呢?
2.RNN模型,是将一句话的每一个字按照顺序输入,并且每个字计算后都会有个输出结果,那么我们可以根据每个字的输出结果判断是否在该位置拆分
3.这样就转化为,用RNN模型去预测当前句子的每个字的位置是否拆分的问题,
4.对句子中的每一个词进行2分类判断的任务:即如下所示,1表示边界,0表示不是边界

在这里插入图片描述

总结

分词技术

  1. 对于中文分词的研究在逐渐减少
  2. 目前的分词在由大部分情况下,效果已经比较理想,优化空间不大
  3. 分词即使发生错误,下游任务不是一定发生错误,所以不值得花大量精力优化分词
  4. 随着神经网络和预训练模型的兴起,中文任务逐渐不再需要分词,甚至不做分词,效果更好

经验总结

  1. 相同的任务有不同的算法可以完成,其结果和效率各有优劣
  2. 空间换时间,是一种常用的提升性能思路
  3. 多种算法组合使用,可能会获得更好的结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/47673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s二次开发-kubebuiler一键式生成deployment,svc,ingress

一 Kubebuilder环境搭建 注&#xff1a;必须在当前的K8S集群有 nginx这个ingressclass rootk8s:~# kubectl get ingressclass NAME CONTROLLER PARAMETERS AGE nginx k8s.io/ingress-nginx <none> 19h1.1 下载kubebuilder wget https://gi…

机器学习西瓜书笔记(一)

机器学习西瓜书笔记 第一章(chapter 1) 绪论 (参考机器学习西瓜书)第一节(section 1)引言第二节(section 2)基本术语第三节(section 3)假设空间第四节(section 4)归纳偏好第五节(section 5)发展历程第六节(section 6)应用现状第一章(chapter 1) 绪论 (参考机…

监测vuex中state的变化

在Vuex中&#xff0c;如果你想要监测state的变化并在变化时调用相应的函数&#xff0c;有几种方法可以实现这个需求。但需要注意的是&#xff0c;Vuex官方推荐的方式是通过getter来派生state的新状态&#xff0c;或者通过action来响应state的变化。不过&#xff0c;如果你确实需…

C++编程小游戏------斗罗大陆(1)魂力测评和武魂觉醒

#include <bits/stdc.h> #include <windows.h> using namespace std; string name,wh; int hl,wh1; int gj50,fy50,jy5000,hp60; int main() { // 共十个武魂["昊天锤","蓝电霸王龙","七杀剑","火凤凰","尖尾雨燕&qu…

ES6 数值的扩展(十八)

1. 二进制和八进制字面量 特性&#xff1a;可以直接在代码中使用二进制&#xff08;0b 或 0B&#xff09;和八进制&#xff08;0o 或 0O&#xff09;字面量。 用法&#xff1a;简化二进制和八进制数值的表示。 const binaryNumber 0b1010; // 二进制表示 10 const octalNumb…

麒麟系统arm架构上部署开发环境。

今天早早来到公司&#xff0c;这也是再公司搬址前在老地址待得最后一天&#xff0c;昨天把前面重要的一个任务也完成的差不多了&#xff0c;遂现在记录一下。 收到任务&#xff0c;要将公司的开发环境和生产环境配置在银河麒麟v10服务器上。这个服务器是向华为申请得到的&…

实战:Eureka的概念作用以及用法详解

概叙 什么是Eureka&#xff1f; Netflix Eureka 是一款由 Netflix 开源的基于 REST 服务的注册中心&#xff0c;用于提供服务发现功能。Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分&#xff0c;基于 Netflix Eureka 进行了二次封装&#xff0c;主要负责…

高性能分布式IO系统BL205 OPC UA耦合器

边缘计算是指在网络的边缘位置进行数据处理和分析&#xff0c;而不是将所有数据都传送到云端或中心服务器&#xff0c;这样可以减少延迟、降低带宽需求、提高响应速度并增强数据安全性。 钡铼BL205耦合器就内置边缘计算功能&#xff0c;它不依赖上位机和云平台&#xff0c;就能…

基于 Go1.19 的站点模板爬虫:构建与实战

引言 随着互联网的发展&#xff0c;网络爬虫已成为数据抓取和分析的重要工具。Go&#xff08;Golang&#xff09;语言凭借其高效、简洁的特性&#xff0c;成为构建爬虫的热门选择之一。本文将引导你使用 Go1.19 版本&#xff0c;构建一个基于站点模板的网页爬虫&#xff0c;以…

npm安装依赖包的多种镜像及方法

一般安装依赖包&#xff0c;都是使用 npmjs 镜像安装&#xff0c;或者使用淘宝镜像安装。 比如&#xff1a; npm i react查看当前镜像&#xff1a; npm config get registry当面对 npmjs 镜像无法访问以及淘宝 npm 镜像&#xff08;cnpm&#xff09;SSL 证书过期的问题&…

PyTorch中的batch_size和num_workers

PyTorch中的batch_size和num_workers 什么是 batch_size&#xff1f;什么是 num_workers&#xff1f;综合考量 什么是 batch_size&#xff1f; batch_size 是指在每次迭代中送入模型进行训练的数据样本的数量。它对训练过程有着重要影响&#xff1a; 计算效率&#xff1a;较大…

数据仓库实践:使用 SQL 计算材料BOM成本单价

背景 在制造业财务数据分析建设过程中&#xff0c;有时需要通过BOM汇总计算材料的单价&#xff0c;一般会有采购核价&#xff0c;库存成本&#xff0c;还有下阶材料单价按用量汇总得到的单价参与。 这些单价来源一般会根据优先级获取并在计算后作为最终的BOM 单价结果。参与财…

GPT-5一年半后发布

GPT-5 一年半后发布&#xff1f;对此你有何期待&#xff1f; 一&#xff1a;GPT-5技术突破预测 GPT-5的推出预示着自然语言处理&#xff08;NLP&#xff09;领域将迎来前所未有的技术革新&#xff0c;这将从多个方面推动行业发展。首先&#xff0c;GPT-5在算法上的进步显著&…

防范UDP Flood攻击的策略与实践

UDP Flood攻击是一种常见的分布式拒绝服务&#xff08;DDoS&#xff09;攻击手段&#xff0c;通过向目标服务器发送大量无效的UDP数据包&#xff0c;消耗其网络带宽和处理资源&#xff0c;最终导致合法的网络服务无法正常运行。本文将深入探讨UDP Flood攻击的原理、常见的防御策…

iOS ------ 编译链接

编译流程分析 编译可以分为四步&#xff1a; 预处理&#xff08;Prepressing)编译&#xff08;Compilation&#xff09;汇编 &#xff08;Assembly)链接&#xff08;Linking&#xff09; 预编译&#xff08;Prepressing&#xff09; 过程是源文件main.c和相关头文件被&#…

SQL Server查询计划阅读及分析

​​​​​​6.4.5. 查询计划阅读及分析 SQL Server中,SQL语句的查询计划可能会包含多个节点,每个节点除了包含和对应一个操作符外,还包含节点及操作符相关的其他信息,其细节与具体的操作符相关。SQL Server查询计划与Oracle执行计划中,虽然每个节点所包含内容的具体称谓…

window11 部署llama.cpp并运行Qwen2-0.5B-Instruct-GGUF

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

FastAPI 学习之路(五十九)封装统一的json返回处理工具

在本篇文章之前的接口&#xff0c;我们每个接口异常返回的数据格式都不一样&#xff0c;处理起来也没有那么方便&#xff0c;因此我们可以封装一个统一的json。 from fastapi import status from fastapi.responses import JSONResponse, Response from typing import Unionde…

= null 和 is null;SQL中关于NULL处理的4个陷阱;三值逻辑

一、概述 1、NULL参与的所有的比较和算术运算符(>,,<,<>,<,>,,-,*,/) 结果为unknown&#xff1b; 2、unknown的逻辑运算(AND、OR、NOT&#xff09;遵循三值运算的真值表&#xff1b; 3、如果运算结果直接返回用户&#xff0c;使用NULL来标识unknown 4、如…

Go语言并发编程-Channel通信_2

Channel通信 Channel概述 不要通过共享内存的方式进行通信&#xff0c;而是应该通过通信的方式共享内存 这是Go语言最核心的设计模式之一。 在很多主流的编程语言中&#xff0c;多个线程传递数据的方式一般都是共享内存&#xff0c;而Go语言中多Goroutine通信的主要方案是Cha…