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

三、N元语法(N-gram)

为了弥补 One-Hot 独热编码的维度灾难语义鸿沟以及 BOW 词袋模型丢失词序信息稀疏性这些缺陷,将词表示成一个低维的实数向量,且相似的词的向量表示是相近的,可以用向量之间的距离来衡量相似度。

N-gram 统计语言模型是用来计算句子概率的概率模型,即某一个词的出现由其前面每一个词出现的概率决定。假设一个长度为N的句子,句子 S=(X1,...,XN),那么这个句子的概率(也就是这 N 个词共同出现的概率)如下:

P(S=(X1,..., XN))=P(X1)P(X2|X1)...P(XN)|X1...X(N-1))

N的取值名称含义
1Unigram当前词出现的概率仅仅与自身相关
2Bigram当前词出现的概率仅仅与前面的1个词相关
3Trigram当前词出现的概率仅仅与前面的2个词相关
.........
NN-gram当前词出现的概率仅仅与前面的(N-1)个词相关

例如,长度为4的序列X1, X2, X3, X4 在Ungram、Bigram和Trigram中的概率分别为:

P(X1, X2, X3, X4) = P(X1)P(X2)P(X3)P(X4)

P(X1, X2, X3, X4) = P(X1)P(X2|X1)P(X3|X2)P(X4|X3)

P(X1, X2, X3, X4) = P(X1)P(X2|X1)P(X3|X1, X2)P(X4|X2, X3)

随着 N 的取值越大,N-gram 模型在理论上越精确,但是也越复杂,需要的计算量和训练语料数据量也就越大,并且精度提升的不够明显,所以在实际的任务中很少使用 n>3 的语言模型。

例如,使用一个含有三句话的微型语料库,而且需要在这三句话的前后分别加上开始符<BOS>和结束符 <EOS>(目的是为了让以某一词为条件的所有概率加起来是 1,从而保证这确实是一个合法的概率分布)接下来我们来看语料:

<BOS>我爱你<EOS>
<BOS>我爱她<EOS>
<BOS>她爱你<EOS>

BOS:Begining Of Sequence,代表序列开始。 EOS:End Of Sequence,代表序列结束。

利用 Bi-gram 计算各个词出现的概率:

  • 单词 "<BOS>" 出现的次数:3次
  • 单词 "我" 出现的次数:2次
  • 单词 "爱" 出现的次数:3次
  • 单词 "你" 出现的次数:2次
  • 单词 "她" 出现的次数:2次
  • 单词 "<EOS>" 出现的次数:3次
  • 二元组 "我爱" 出现的次数:2次
  • 二元组 "爱你" 出现的次数:2次
  • 二元组 "她爱" 出现的次数:1次
  • 二元组 "爱她" 出现的次数:1次
  • 二元组 "<BOS>我" 出现的次数:2次
  • 二元组 "<BOS>她" 出现的次数:1次
  • 二元组 "你<EOS>" 出现的次数:2次
  • 二元组 "她<EOS>" 出现的次数:1次

利用 Bi-gram 计算相邻两个词先后出现的概率: 

  • P(我|<BOS>) = Count(<BOS>我) / Count(<BOS>) = 2/3;
  • P(她|<BOS>) = Count(<BOS>她) / Count(<BOS>) = 1/3;
  • P(爱|) = Count(我爱) / Count(我) = 1;
  • P(<EOS>|你) = Count(你<EOS>) / Count(你) = 1;
  • P(你|) = Count(爱你) / Count(爱) = 2/3;
  • P(她|爱) = Count(爱她) / Count(爱) = 1/3;
  • P(爱|) = Count(她爱) / Count(她) = 1/2;
  • P(<EOS>|她) = Count(她<EOS>) / Count(她) = 1/2.

这样我们就完成了 Bi-gram 各个概率值的计算,整个句子的概率就是挑选出对应的概率相乘即可。

  • P(<BOS>我爱你<EOS>) = P(我|<BOS>) × P(爱|) × P(你|) × P(<EOS>|你) = 2/3 × 1 × 2/3 ×1 = 4/9
  • P(<BOS>我爱她<EOS>) = P(我|<BOS>) × P(爱|) × P(她|) × P(<EOS>|你) = 2/3 × 1 × 1/3 ×1 = 2/9
  • P(<BOS>她爱你<EOS>) = P(她|<BOS>) × P(爱|) × P(你|) × P(<EOS>|你) = 1/3 × 1 × 1 × 2/3 = 2/9

N-gram 语言模型使用统计频次来近似概率值,可能会出现数据稀疏问题:

  • 如果分子为0,估计的概率值为0,由于连乘的方式会导致最终计算出句子的概率值为0;
  • 如果分母为0,分母为0,计算的公式将没有任何意义

相关文章:

三、N元语法(N-gram)

为了弥补 One-Hot 独热编码的维度灾难和语义鸿沟以及 BOW 词袋模型丢失词序信息和稀疏性这些缺陷&#xff0c;将词表示成一个低维的实数向量&#xff0c;且相似的词的向量表示是相近的&#xff0c;可以用向量之间的距离来衡量相似度。 N-gram 统计语言模型是用来计算句子概率的…...

QML 3D入门知识路线

目前使用的版本 v5.14.0 模块导入 使用QML 3D时需要 import Qt3D.Core 2.14 核心模块类 V6以上的版本已经发布&#xff0c;所以有很多module会发生变化&#xff0c;主要有核心module、输入、逻辑、渲染、动画和扩展module&#xff0c;以及2D/3D场景模块 类名 能…...

蓝牙系列五:开源蓝牙协议BTStack框架代码阅读(1)

蓝牙学习系列,借鉴卫东上老师的蓝牙视频教程。 BTStack协议栈学习。首先来看一下,对于硬件操作,它是如何来进行处理的。在上篇文章中曾说过,在main函数里面它会调用硬件相关的代码,调用操作系统相关的代码。在BTStack中,可以搜索一下main.c,将会发现有很多main.c,都是…...

c++ 类内可以定义引用数据成员吗?

在C中&#xff0c;类内是可以定义引用数据成员的&#xff0c;但是在初始化对象时&#xff0c;必须在构造函数的成员初始化列表中对引用进行初始化&#xff0c;因为引用必须在创建时被初始化&#xff0c;并且不能在其生存期内引用不同的对象。下面是一个简单的示例&#xff1a; …...

MacBook2024苹果免费mac电脑清理垃圾软件CleanMyMac X

CleanMyMac X是一款专业的Mac清理软件&#xff0c;具备多种强大功能。首先&#xff0c;它能够智能清理Mac磁盘上的垃圾文件和多余语言安装包&#xff0c;从而快速释放电脑内存。其次&#xff0c;CleanMyMac X可以轻松管理和升级Mac上的应用&#xff0c;同时强力卸载恶意软件并修…...

Vue.js计算属性:实现数据驱动的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

10-ARM gicv3/gicv4的总结-基础篇

目录 1、gic的版本2、GICv3/gicv4的模型图3、gic中断号的划分4、GIC连接方式5、gic的状态6、gic框架7、gic Configuring推荐 本文转自 周贺贺&#xff0c;baron&#xff0c;代码改变世界ctw&#xff0c;Arm精选&#xff0c; armv8/armv9&#xff0c;trustzone/tee&#xff0c;s…...

数据库系统概论(超详解!!!) 第三节 关系数据库

1.基本概念 1. 域&#xff08;Domain&#xff09; 域是一组具有相同数据类型的值的集合。 2. 笛卡尔积&#xff08;Cartesian Product&#xff09; 给定一组域D1&#xff0c;D2&#xff0c;…&#xff0c;Dn&#xff0c;允许其中某些域是相同的。 D1&#xff0c;D2…...

Springboot 集成kafka 消费者实现ssl方式连接监听消息实现消费

证书准备&#xff1a;springboot集成kafka 消费者实现 如何配置是ssl方式连接的时候需要进行证书的转换。原始的证书是pem, 或者csr方式 和key方式的时候需要转换&#xff0c;因为kafka里面是jks 需要通过openssl进行转换。 证书处理&#xff1a; KeyStore 用于存储客户端的证…...

spark 实验二 RDD编程初级实践

目录 一. pyspark交互式编程示例&#xff08;学生选课成绩统计&#xff09; 该系总共有多少学生&#xff1b; 该系DataBase课程共有多少人选修&#xff1b; 各门课程的平均分是多少&#xff1b; 使用累加器计算共有多少人选了DataBase这门课。 二.编写独立应用程序实现数…...

【MySQL】not in遇上null的坑

今天遇到一个问题&#xff1a; 1、当 in 内的字段包含 null 的时候&#xff0c;正常过滤&#xff1b; 2、当 not in 内的字段包含 null 的时候&#xff0c;不能正常过滤&#xff0c;即使满足条件&#xff0c;最终结果也为 空。 测试如下&#xff1a; select * from emp e;当…...

鸿蒙4.0-DevEco Studio界面工程

DevEco Studio界面工程 DevEco Studio 下载与第一个工程新建的第一个工程界面回到Project工程结构来看 DevEco Studio 下载与第一个工程 DevEco Studio 下载地址&#xff1a;点击跳转 https://developer.harmonyos.com/cn/develop/deveco-studio#download 学习课堂以及文档地址…...

前端将html导出pdf文件解决分页问题

这是借鉴了qq_251025116大佬的解决方案并优化升级完成的&#xff0c;原文链接 1.安装依赖 npm install jspdf html2canvas2.使用方法 import htmlToPdffrom ./index.jsconst suc () > {message.success(success);};//记得在需要打印的div上面添加 idlet dom document.que…...

openssl3.2 - exp - 产生随机数

文章目录 openssl3.2 - exp - 产生随机数概述笔记END openssl3.2 - exp - 产生随机数 概述 要用到openssl产生的随机数, 查了资料. 如果用命令行产生随机数, 如下: openssl rand -hex -num 6 48bfd3a64f54单步跟进去, 看到主要就是调用了一个RAND_bytes(), 没其他了. 官方说…...

【三两波折】char *foo[]和char(*foo)[]有何不同?

1、先谈优先级 最高级别 —— 有四个&#xff0c;他们并不像运算符&#xff1a; []数组下标左到右结合()用于&#xff08;表达式&#xff09; or 函数名(形参表)左到右结合.读取结构体成员左到右结合->读取结构体成员&#xff08;通过指针&#xff09;左到右结合 第二级别…...

k8s(kubernetes)怎么查看pod服务对应哪些docker容器

Kubernetes&#xff08;k8s&#xff09;中的Pod是一组共享网络和存储资源的容器集合。每个Pod都包含一个或多个Docker容器&#xff0c;这些容器共享网络命名空间和存储卷&#xff0c;并在同一主机上运行。因此&#xff0c;可以将Pod视为一组紧密相关的Docker容器的逻辑主机&…...

[2023年]-hadoop面试真题(二)

[2023年]-hadoop面试真题(一) &#xff08;北京&#xff09; Maptask的个数由什么决定?&#xff08;北京&#xff09; 如何判定一个job的map和reduce的数量 ?&#xff08;北京&#xff09; MR中Shuffle过程 ?&#xff08;北京&#xff09; MR中处理数据流程 ?&#xff08;…...

蓝桥杯备战刷题-滑动窗口

今天给大家带来的是滑动窗口的类型题&#xff0c;都是十分经典的。 1&#xff0c;无重复字符的最长子串 看例三&#xff0c;我们顺便来说一下子串和子序列的含义 子串是从字符串里面抽出来的一部分&#xff0c;不可以有间隔&#xff0c;顺序也不能打乱。 子序列也是从字符串里…...

LLM(十一)| Claude 3:Anthropic发布最新超越GPT-4大模型

2024年3月4日&#xff0c;Anthropic发布最新多模态大模型&#xff1a;Claude 3系列&#xff0c;共有Haiku、Sonnet和Opus三个版本。 Opus在研究生水平专家推理、基础数学、本科水平专家知识、代码等10个维度&#xff0c;超过OpenAI的GPT-4。 Haiku模型更注重效率&#xff0c;能…...

20-Java备忘录模式 ( Memento Pattern )

Java备忘录模式 摘要实现范例 备忘录模式&#xff08;Memento Pattern&#xff09;保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象 备忘录模式属于行为型模式 摘要 1. 意图 在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...