NLP学习02_最大匹配算法、UniGram LM、Spell Correction

2023-11-18

如果没有数据的时候,那只能通过正则或者规则来解决问题
但是有些基于概率的方法,必须有一定的数据
在这里插入图片描述
首先我们要对句子进行切分,使用分词
接着进行预处理:拼写纠错、stemming(将不同的单词转换到原型)、停用词过滤(a, an)、单词顾虑()
同义词等
之后进行文本表示:将文本转换成向量,这样可以使用各种公式去处理。tfidf,word2vec,seq2seq
接着计算相似度,给定两个向量计算相似度
根据相似度进行排序,排序后返回结果

NLP的项目流程

在这里插入图片描述

分词

分词工具
在这里插入图片描述
最常用的还是jieba,中文分词工具
分词一定得有一个词典库,

分词方法:前向最大匹配

在这里插入图片描述
贪心算法:选择当前最好的解,不能保证全局最优
DP动态规划算法:可以降低复杂度,能保证全局最优

算法具备的能力, 当分词工具没达到需要的效果,要会去修改算法, 弥补不足
但是这种分词工具是没有开源的

后向最大匹配

在这里插入图片描述
最大匹配算法是一种贪心算法
最大匹配缺点:细分不能做到更好,局部最优、效率低(依赖max_len),歧义(不能考虑语义)

分词方法:考虑语义

将生成的所有分词结果输入到语义工具,然后返回一个分割最好的结果
这种工具最经典的是语言模型 LM
在这里插入图片描述
先对一篇文章的单词出现概率进行统计,比如有简单的unique gram LM
那么每次单词当作独立事件考虑,计算一个句子的概率就是单词概率的乘积。
然后分出的哪个句子概率高就输出哪句
在这里插入图片描述
但是这种考虑单词概率的方式存在问题:如果这个单词出现概率很低,那相乘的结果就会很小,
进而导致计算机underflow\overflow
处理的方式就是在概率前加log,因为log函数是单调递增的(默认以10为底),概率只关心比较大小,
所以完全可以使用log,这样就把乘法变成了加法,加法是不容易出现overflow的

在这里插入图片描述
这种分两步:1、生成所有的可能分词情况,2、取出每个单词的出现概率,通过语言模型然后选出最好的。
但是这样复杂度太高
将两步合成一步,然后经过viterb算法,将整个流程优化,

viterb算法本质还是DP算法,将计算结果使用数组去维护,降低时间复杂度

分析核心

log前加负号,是因为统计中偏向于找最小的,加负号可以让原来最大的变为最小项。同时x小于1,对数函数y是负数,加负号将其变为正数结果
在这里插入图片描述
下面将两步合并一步,把分词所有情况和计算句子概率合并一步
在这里插入图片描述
找那个最小的概率和,就是最好的结果
这时需要使用viterb算法来找最小概率,也就是一个最短路径
我的理解就是从最后一个结点每次找他的前驱结点的最短路径,最后找到开始结点,就组合成最短路径
在这里插入图片描述
在这里插入图片描述

spell correction拼写纠错

拼写纠错是所有电商网站、搜索引擎的核心,搜索相关岗位都会用到
最短编辑距离:通过多少操作才能把候选单词,转换成目标单词
编辑距离三个操作:insert、delete、replace,三个操作没有次序,需要哪个操作使用哪个
编辑距离也是DP算法
在这里插入图片描述
比如上边用户输入 : three候选词thesis
要计算编辑距离,首先e后插入s,然后r替换为i,第二个r替换为s,所以这个编辑距离就是3
计算出这些候选词的编辑距离,最小的为there\their
返回哪一个呢?这时候要根据上下文或候选词的词频来判断

了解DP算法:https://people.cs.clemson.edu/~bcdean/dp_practice/
在这里插入图片描述
从候选词中计算最小编辑距离的方法,要遍历整个的词典,这显然是不合适的,时间复杂度特别高

在这里插入图片描述
替代方法:用户输入后,通过三种操作add\delete\replace,生成编辑距离为1或者2的字符串,在这个范围当中进行拼写纠错
之所以选编辑距离1和2,因为可以覆盖绝大多数的字符串情况
在这里插入图片描述
如何选择出最有可能字符串c?
也就是计算p(c|s)概率的最大值,通过贝叶斯定理,得p(c|s) = p(s|c)*p©/p(s),
p(s)是固定的,常量,可以不考虑,所以最终就是计算p(s|c)*p©
p(s|c)表示的是在正确字符串为c的条件下,是s的概率,比如正确字符串是apple的情况下,用户输入是apple的概率p(s|c)
这个概率可以通过前期统计文章获得
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NLP学习02_最大匹配算法、UniGram LM、Spell Correction 的相关文章

随机推荐

  • 爬虫的代理IP池写哪里了?

    亲爱的程序员小伙伴们 想要提高爬虫效率和稳定性 组建一个强大的代理IP池是非常重要的一步 今天我就来和你分享一下 代理IP池到底应该写在哪里 以及如何打造一个令人瞩目的代理IP池 准备好了吗 一起看看吧 一 代理IP池的代码位置选择 1 写
  • web基础与HTTP协议

    web基础与HTTP 一 web基础 1 DNS与域名 1 1域名 1 2 域名注册 1 3 DNS 解析 1 4 域名 二 网页的概念 1 网页 HTTP HTTPS 2 1网页基本概念 2 2 HTML 概述 2 2 1 HTML超文本
  • C++模板详解(函数模板、类模板)

    hello 这里是bangbang 今天来讲下模板 目录 1 泛型编程 2 函数模板 2 1 函数模板概念 2 2 函数模板格式 2 3 函数模板的实例化 2 4 模板参数的匹配原则 3 类模板 3 1 类模板定义格式 3 2 类模板实例化
  • cmake-3.19.2源码编译与安装

    1 介绍 和 编译环境 1 介绍 cmake是跨平台且开源的编译工具 支持如下7种平台 其他平台不认识没关系 认识linux就行 Microsoft Windows Apple macOS Linux FreeBSD OpenBSD Sol
  • 【转】局域网速度测试 三款软件轻松搞定

    局域网络可谓随处可见 我们也十分关注其实际运行速度如何 比如两台计算机间的文件传输 访问对方计算机的快慢等 而决定局域网络速度的因素很多 又不可能通过简单的操作检测出速度的大小 同时也希望能有一些软件能帮助我们治理局域网 以方便故障的排查
  • Redis系列--主从复制

    一 redis主从复制介绍 在 Redis 复制的基础上 使用和配置主从复制非常简单 能使得从 Redis 服务器 下文称 slave 能精确得复制主 Redis 服务器 下文称 master 的内容 每次当 slave 和 master
  • 五分钟学会python_Python可视化

    微信公众号 Python读财 如有问题或建议 请公众号留言 Seaborn是基于matplotlib的Python可视化库 它提供了一个高级界面来绘制有吸引力的统计图形 Seaborn其实是在matplotlib的基础上进行了更高级的API
  • idea 常用 插件备份

    一 java 序号 强烈推荐 插件名称 功能描述 使用 1 IDE Eval Reset idea 无限7天 续杯 你懂得 插件 2 CodeGlance2 在滚动条边上显示代码文件内容缩略图 可以快速定位到指定位置 3 Alibaba C
  • Tensorflow2.0 tf.keras.Model.load_weights() 报错处理

    错误描述 保存模型 model save weights model h5 脚本重启 加载模型 model load weights model h5 模型报错 ValueError You are trying to load a wei
  • PySide2 QTableWidget常用方法

    QTableWidget 设置列宽模式 设置列宽模式为自动调整 自动拉伸列宽填充窗口 无法手动调整 self tableWidget horizontalHeader setSectionResizeMode QHeaderView Str
  • 个人sublime配色方案

    文章目录 1 效果图 2 描述文件 1 效果图 2 描述文件 color scheme Packages Color Scheme Default Monokai tmTheme font face Consolas font size 1
  • 顺序查找

    顺序查找 基本思想 1 顺序查找 线性查找 从线性表的一端向另一端逐个将记录与给定值进行比较 若相等 则查找成功 给出该记录在表中的位置 若整个表检测完仍未找到与给定值相等的记录 则查找失败 给出失败信息 例子 int SeqSearch1
  • ad10怎么挖铺的铜_跟我学丨覆铜这样操作快!准!狠

    所谓覆铜 就是将PCB上闲置的空间作为基准面 然后用固体铜填充 这些铜区又称为灌铜 覆铜的意义在于 减小地线阻抗 提高抗干扰能力 降低压降 提高电源效率 与地线相连 减小环路面积 那么如何使用立创EDA覆铜呢 一 在PCB工具对话框里面 选
  • 2021-湖湘杯final-Web

    2021 湖湘杯final Web 前言 今年湖湘报的社企组的结果就是最后只能摆烂 然后决赛那段时间正好在复习期末 然后考完了想好好的休息一段时间 打游戏打累了再来复现一下湖湘杯final的题目放松放松 vote 今年HTB的基本上算是原题
  • javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint

    java 验证出现如下错误 javax validation UnexpectedTypeException HV000030 No validator could be found for constraint 错误原因 Java实体类中
  • 区块链的运行流程梳理记录

    目录 0 比特币交易流程 1 生成交易 2 网络传播与验证 3 交易池管理 4 交易优先级排序 5 交易手续费定价 6 共识竞争与构建区块 7 难度调整机制 8 分叉处理与主链判断 0 比特币交易流程 从交易的生命周期来看 比特币系统的交易
  • Is Usb Drive () ? DeviceIoControl, IOCTL_STORAGE_QUERY_PROPERTY

    http banderlogi blogspot com 2011 06 enum drive letters attached for usb html typedef enum STORAGE BUS TYPE BusTypeUnkno
  • Elasticsearch 相关度评分TF&IDF算法揭秘

    1 算法介绍 relevance score算法 简单来说 就是计算出 一个索引中的文本 与搜索的文本 他们之间的关联匹配程序 ElasticSearch使用的是term frequency inverse document frequen
  • 关于C++中cout.precision()的使用以及控制输出的小数位数.

    在C 中可以使用cout precison val 来控制浮点数的输出精度 但并不是意味着仅使用cout precison val 可以控制输出结果的小数点位数 在此记录一下 就当做学习笔记 下面先做一下简单的验证 include
  • NLP学习02_最大匹配算法、UniGram LM、Spell Correction

    如果没有数据的时候 那只能通过正则或者规则来解决问题 但是有些基于概率的方法 必须有一定的数据 首先我们要对句子进行切分 使用分词 接着进行预处理 拼写纠错 stemming 将不同的单词转换到原型 停用词过滤 a an 单词顾虑 同义词等