自然语言处理--概率最大中文分词

自然语言处理附加作业--概率最大中文分词

一、理论描述

中文分词是指将中文句子或文本按照语义和语法规则进行切分成词语的过程。在中文语言中,词语之间没有明显的空格或标点符号来分隔,因此需要通过分词工具或算法来实现对中文文本的分词处理。分词的准确性和效率对于中文自然语言处理和信息检索等领域具有重要意义。常用的中文分词工具包括jieba、HanLP等。

二、算法描述

本文实现概率最大中文分词算法,具体算法描述如下:

思路是使用动态规划的方法,通过计算每个子串的最大概率来得到整个句子的最大概率。具体的实现步骤如下:

  1. 首先,根据给定的词频文件,获取词频字典word_prob,其中键为词,概率值为取自然对数后的结果。
  2. 初始化max_len为最大词长度,max_sentence和prev_word数组长度为句子长度,每项均为0
  3. 遍历句子中的每个字符,以当前字符为起点,向后最多遍历max_len个字符,获取子串,并在词频字典中查找是否存在该子串如果当前位置不是句子的起始位置,则将前面子串的最大概率加上当前子串的概率
  4. 如果子串在词频字典中存在,则计算其累计概率。累计概率的计算方式为将当前子串的概率加上前面子串的最大概率,即P'(word) = P(word) * P'(prev_word)。如果计算出来的累计概率小于当前位置的最大概率,则更新最大概率和起始下标
  5. 循环结束后,根据max_sentence数组记录的起始下标,从后往前依次获取每个词,并将其添加到结果列表中。最后将结果列表反转,得到最终的分词结果

该算法核心思想是通过动态规划来计算每个子串的最大概率,并根据最大概率和起始下标来获取分词结果

三、详例描述

以句子“结合成分子时”为例,详细描述算法如下:

  1. 根据词频文件,获取词频字典word_prob,其中键为词,值为词频
  2. 初始化,max_sentence用于存储每个子串的最大概率,prev_word用于记录每个子串的起始下标
  3. 循环遍历句子中的每个位置和每个子串:
    • 当i=0,j=0时,当前位置为句子的第一个字符word = ‘对’,查找词典中‘对’的概率temp_prob为0.003388, max_sentence[0]=0.003388说明sentence[0, 0]当前的最大概率,prev_word[0]=0表示sentence[0]的词起始下标为0
    • 当i=0,j=1时,word = ‘对外’,查找词典中‘对’的概率为7.5e-05;

max_sentence[1] = 7.5e-05,表示sentence[0, 1]当前的最大概率;prev_word[1] = 0,表示“对外”的起始下标为0,说明“对外”此时为累计概率最大的词

    • 当i=0,j=2、3时,在词典中不存在,直接跳出循环
    • 当i=1,j=0时,word = ‘外’,概率为0.00025,需要计算其累计概率P’(外) = P(外) * P’(对) = 0.00025 * max_sentence [0],判断其是否大于max_sentence[1],即是否大于P’(对外),若是,则替换max_sentence[1],并将prev_word[1]改为1。当前是小于,故不会替换,以此类推
  1. 循环结束后,max_sentence中的最后一个元素即为整个句子的最大概率。
  2. 根据prev_word中记录的起始下标,从后往前依次获取每个词,并将其添加到结果列表中,将结果列表反转,得到最终的分词结果为`['结合', '成', '分子', '时',‘。’]`。

四、软件演示

输入‘结合成分子时。’

输出‘['结合', '成', '分子', '时', '。']’

五、问题和总结

该算法是一种基于概率的最大中文分词算法,通过计算词的累计概率来寻找最优的切分结果。尽管该算法简单易实现,但存在一些问题,如未登录词处理、位置信息考虑、语言模型应用和歧义问题等。因此,在实际应用中,可能需要结合其他技术或算法来改进分词的准确性和效果

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

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

相关文章

[C++]使用yolov8的onnx模型仅用opencv和bytetrack实现目标追踪

【官方框架地址】 yolov8: https://github.com/ultralytics/ultralytics bytetrack: https://github.com/ifzhang/ByteTrack 【算法介绍】 随着人工智能技术的不断发展,目标追踪已成为计算机视觉领域的重要研究方向。Yolov8和ByTetrack作为当前先进的算法&…

Python实现两因素独立设计方差分析,简单效应分析

# Python实现两因素独立设计方差分析 1. 背景 1. 有研究者探讨了在不同企业文化下,管理者的不同语言风格所产生的影响 有的企业注重员工的独立性,强调个人努力和内部竞争;有的企业注重员工的整体性,强调团队合作和团队绩效。 …

LCD液晶屏驱动详解(3)

2.2、LCD控制寄存器LCDCON2 用于设置垂直方向各信号的时间参数,格式如下表所示: 功能位说明VBPD[31:24]VSYNC信号脉冲之后,还要经过(VBPD1)个HSYNC信号周期,有效的行数据才出现;LINEVAL[23:14]LCD的垂直宽度&#xf…

2024PMP考试新考纲-【过程领域】近期典型真题和很详细解析(11)

华研荟继续为您分享【过程Process领域】的新考纲下的真题,帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识(经验)来解题,并且举一反三,一次性3A通过2024年PMP考试。 2024年PMP考试新考纲-【过程领…

探索文件与交互:使用PyQt5构建一个高级文件选择器

在当今的应用程序开发中,文件管理和交互是一个重要的组成部分。特别是对于桌面应用程序,提供一个直观、功能丰富的文件选择器是提高用户体验的关键。 本篇博客,我将介绍如何使用Python和PyQt5来构建一个高级的文件选择器,它不仅能…

数据挖掘笔记1

课程:清华大学-数据挖掘:理论与算法(国家级精品课)_哔哩哔哩_bilibili 一、Learning Resources 二、Data 数据是最底层的一种表现形式。数据具有连续性。从存储上来讲,数据分为逻辑上的和物理层的。大数据&#xff1…

np.bincount函数的用法

官网写的非常清晰了, 返回数组的数量比x中的最大值大1,它给出了每个索引值在x中出现的次数。下面,我举个例子让大家更好的理解一下: np.bincount(np.array([0, 1, 1, 3, 2, 1, 7])) array([1, 3, 1, 1, 0, 0, 0, 1])最大值是7&a…

BUU BRUTE 1

靶场教程 1.开局页面,是个登录界面。2.尝试万能密码,发现并不可行,提示【用户名错误】。用户名输入admin,发现提示密码错误,为四位数字。3.那么,抓包爆破吧。通过burp进行抓包。4.发送包到 Intruder 进行爆…

Redis(七)复制

文章目录 是什么功能配置配主库不配从库权限细节 案例配置文件修改 一主二仆固定配置文件主从问题命令操作手动指定 薪火相传反客为主复制原理和工作流程存在问题 是什么 https://redis.io/docs/management/replication/ 就是主从复制,master以写为主,S…

Ubuntu findfont: Font family ‘SimHei‘ not found.

matplotlib中文乱码显示 当我们遇到这样奇怪的问题时, 结果往往很搞笑 尝试1不行 Stopping Jupyter Installing font-manager: sudo apt install font-manager Cleaning the matplotlib cache directory: rm ~/.cache/matplotlib -fr Restarting Jupyter. 尝试2 This work fo…

Kafka-服务端-副本机制

Kafka从0.8版本开始引入副本(Replica)的机制,其目的是为了增加Kafka集群的高可用性。 Kafka实现副本机制之后,每个分区可以有多个副本,并且会从其副本集合(Assigned Replica,AR)中选出一个副本作为Leader副本,所有的读写请求都由…

Bluetooth Device Address(BD_ADDR) - 2

蓝牙核心规范:Core v5.3中关于蓝牙地址的其他说明 Vol 3: Host, Part C: Generic Access Profile 3 User interface aspects 3.2 Representation of Bluetooth parameters 3.2.1 Bluetooth Device Address (BD_ADDR) BD_ADDR 是蓝牙设备使用的地址。在设备发现过…

IPoE技术汇总

在国内并没有遇到这么多的IPoE(IP over Ethernet)技术,可能也是因为我来日本多年了,没有接触国内的IPv4 over IPv6的技术,感觉国内IPv4地址紧张,用的传统NAT和PPPoE非常多,大多数设备还是建立在…

使用 YApi 管理 API 文档,测试, mock

随着互联网的发展,API变的至关重要。根据统计,目前市面上有上千万的开发者,互联网项目超过10亿,保守统计涉及的 API 数量大约有 100 亿。这么大基数的API,只要解决某些共有的痛点,将会是非常有意义的事情。…

开发实战角度:distinct实现原理及具体优化总结

1.背景 Distinct是一种常用的操作,在所有数据库的SQl语言中都是一个非常重要的操作,在Hive中,Distinct去重原理是通过MapReduce来实现的,Distinct操作可以应用于单个列,亦可以应用于多个列。基本原理是将输入的数据集…

机器学习期末复习总结笔记(李航统计学习方法)

文章目录 模型复杂度高---过拟合分类与回归有监督、无监督、半监督正则化生成模型和判别模型感知机KNN朴素贝叶斯决策树SVMAdaboost聚类风险PCA深度学习范数计算梯度下降与随机梯度下降SGD线性回归逻辑回归最大熵模型适用性讨论 模型复杂度高—过拟合 是什么:当模型…

golang通过go-git下载gitlab源码

1 申请令牌 方法1:具体项目下申请: 方法2:全局申请 2 获取token 3 下载代码 package mainimport ("fmt""os""github.com/go-git/go-git/v5" )func main() {_, err : git.PlainClone("/tmp/foo",…

java web mvc-07-Vaadin 入门介绍

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

MySQL函数—数值函数,随机数验证码生成

MySQL函数—日期函数 函数功能CEIL(x)向上取整FLOOR(x)向下取整MOD(x,y)返回x/y的模(取余)RAND()返回0-1的随机数ROUND(x,y)求参数x的四舍五入,保留y位小数 1、向上取整:CEIL。只要小数点后的数字大于0就取整。 select CEIL(1.2…

Qt解析含颜色的QString字符串显示到控件

1、需求 开发接收含颜色字符串显示到窗口,可解析字符串颜色配置窗口属性,且分割字符串显示。 mprintf(“xxxxxx”);打印的xxxxxx含有颜色配置。 2、实现方法 2.1、条件 选用Qt的PlainTextEdit控件显示字符串,配置为只读模式 …