三、N元语法(N-gram)

2024-03-07 15:44
文章标签 语法 gram

本文主要是介绍三、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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/784026

相关文章

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

Java基础回顾系列-第一天-基本语法

基本语法 Java基础回顾系列-第一天-基本语法基础常识人机交互方式常用的DOS命令什么是计算机语言(编程语言) Java语言简介Java程序运行机制Java虚拟机(Java Virtual Machine)垃圾收集机制(Garbage Collection) Java语言的特点面向对象健壮性跨平台性 编写第一个Java程序什么是JDK, JRE下载及安装 JDK配置环境变量 pathHe

Hibernate框架中,使用JDBC语法

/*** 调用存储过程* * @param PRONAME* @return*/public CallableStatement citePro(final String PRONAME){Session session = getCurrentSession();CallableStatement pro = session.doReturningWork(new ReturningWork<C

ORACLE语法-包(package)、存储过程(procedure)、游标(cursor)以及java对Result结果集的处理

陈科肇 示例: 包规范 CREATE OR REPLACE PACKAGE PACK_WMS_YX IS-- Author : CKZ-- Created : 2015/8/28 9:52:29-- Purpose : 同步数据-- Public type declarations,游标 退休订单TYPE retCursor IS REF CURSOR;-- RETURN vi_co_co

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

react笔记 8-16 JSX语法 定义数据 数据绑定

1、jsx语法 和vue一样  只能有一个根标签 一行代码写法 return <div>hello world</div> 多行代码返回必须加括号 return (<div><div>hello world</div><div>aaaaaaa</div></div>) 2、定义数据 数据绑定 constructor(){super()this.state={na

python基础语法十一-赋值、浅拷贝、深拷贝

书接上回: python基础语法一-基本数据类型 python基础语法二-多维数据类型 python基础语法三-类 python基础语法四-数据可视化 python基础语法五-函数 python基础语法六-正则匹配 python基础语法七-openpyxl操作Excel python基础语法八-异常 python基础语法九-多进程和多线程 python基础语法十-文件和目录操作

【大模型基础】P1 N-Gram 模型

目录 N-Gram 概述N-Gram 构建过程TokenN-Gram 实例第1步 构建实验语料库第2步 把句子分成 N 个 “Gram”第3步 计算每个 Bigram 在语料库中的词频第4步 计算出现的概率第5步 生成下一个词第6步:输入前缀,生成连续文本 上述实例完整代码N-Gram 的局限性 N-Gram 概述 N-Gram 诞生于统计学 NLP 初期,为解决词序列冗长导致的

python进阶篇-day07-高级语法与正则

day07-python其他高级语法 一. with(上下文管理) 介绍 概述 一个类只要实现了__ enter __ () 和 __ exit __ ()方法, 这个类就是一个上下文管理器类, 该类的对象 = 上下文管理器对象 目的 节约资源, 提高效率, 避免手动释放资源, 且出bug的时候, 也会自动尝试释放资源 特点 上下文管理器对象, 可以结合with语句使用