| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【AI理论学习】n-gram语言模型和神经网络语言模型 -> 正文阅读 |
|
[人工智能]【AI理论学习】n-gram语言模型和神经网络语言模型 |
n-gram语言模型和神经网络语言模型什么是语言模型语言模型是自然语言处理中的重要技术,假设一段长度为
T
T
T的文本中的词依次为
w
1
,
w
2
,
…
,
w
T
w_1, w_2, \ldots, w_T
w1?,w2?,…,wT?,语言模型将计算该序列的概率:
P
(
w
1
,
w
2
,
.
.
.
,
w
T
)
P(w_1,w_2,...,w_T)
P(w1?,w2?,...,wT?) 语言模型的计算把文本看作一段离散的时间序列
w
1
,
w
2
,
…
,
w
T
w_1, w_2, \ldots, w_T
w1?,w2?,…,wT?,假设每个词是按时间先后顺序依次生成的,那么在离散的时间序列中,
w
t
(
1
≤
t
≤
T
)
w_t(1 \leq t \leq T)
wt?(1≤t≤T)可看作在时间步(time step)
t
t
t的输出或标签。于是,对于一个句子而言,有: 什么是n-gram模型N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。 每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。 n-gram 模型基于马尔可夫假设,第n个词的出现只与前面 n-1 个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积: 当
n
n
n较小时,
n
n
n元语法往往并不准确。然而,当
n
n
n较大时,
n
n
n元语法需要计算并存储大量的词频和多词相邻频率。
n-gram平滑技术无论是原始的语言模型还是n-gram语言模型,都是使用极大似然估计法来估计概率值,通过统计频次来近似概率值,统计频次极有可能统计不到较长句子的频次。
这被称为数据稀疏,对于n-gram语言模型来说,n越大,数据稀疏的问题越严重。即使是使用n相对比较小的二元语言模型,许多二元靠语料库也是统计不到的。 这也就是说,在自然语言处理处理中,难免会遇到
"商品 货币"的频次就为0,当n-gram语言模型中的n越小,可统计的n元也就越丰富,一个很自然的解决方案就是利用低阶n元语法平滑到高阶n元语法。所谓的平滑就是字面上的意思:使n元语法频次的折线平滑为曲线。我们不希望二元语法"商品 货币"的频次突然跌倒0,因此使用一元语法"商品"和(“或”,不同的平滑方法可能需要不同的处理)"货币"的频次去平滑它。 使用平滑技术的目的就是在条件概率为0时,防止整个句子的概率为0,人为按一定规则,给0条件概率一定的值。常见的平滑方法有:
总结基于统计的 n-gram 语言模型的优缺点: 什么是神经网络语言模型(NNLM)?神经网络语言模型先给每个词赋予一个词向量,利用神经网络去建模当前词出现的概率与其前 n-1 个词之间的约束关系,即通过神经网络去学习词的向量表示。 基于前馈神经网络的模型
具体而言,假设当前词出现的概率只依赖于前
n
?
1
n-1
n?1个词。即: 基于循环神经网络的模型为了解决定长信息的问题,Mikolov 于2010年发表的论文 Recurrent neural network based language model 正式揭开了循环神经网络(RNN)在语言模型中的强大历程。
以序列“我想你”为例介绍RNN语言模型的建模过程: 相比单纯的前馈神经网络,隐状态的传递性使得RNN语言模型原则上可以捕捉前向序列的所有信息(虽然可能比较弱)。通过在整个训练集上优化交叉熵来训练模型,使得网络能够尽可能建模出自然语言序列与后续词之间的内在联系。 神经网络语言模型小结:神经网络语言模型(NNLM)通过构建神经网络的方式来探索和建模自然语言内在的依赖关系。尽管与统计语言模型的直观性相比,神经网络的黑盒子特性决定了NNLM的可解释性较差,但这并不妨碍其成为一种非常好的概率分布建模方式。
语言模型评价指标信息论中常采用**相对熵(relative entropy)**来衡量两个分布之间的相近程度。对于离散随机变量X,熵、交叉熵以及相对熵的定义分别如下: 假定 p p p是样本的真实分布, q q q是对其的建模。因为真实分布的熵 H ( p ) H(p) H(p)值是确定的,因此优化相对熵 D ( p ∣ ∣ q ) D(p||q) D(p∣∣q)等价于优化交叉熵 H ( p , q ) H(p,q) H(p,q)。这里有个小细节是 H ( p , q ) ≥ H ( p ) H(p,q)\ge H(p) H(p,q)≥H(p)恒成立. 对于自然语言序列
W
=
w
1
,
w
2
,
.
.
.
,
w
N
W=w_1,w_2,...,w_N
W=w1?,w2?,...,wN?,可以推导得到对每个词的平均交叉熵为:
H
(
W
)
=
?
1
N
log
?
P
(
w
1
,
w
2
,
.
.
.
,
w
N
)
H(W)=-\frac{1}{N}\log P(w_1,w_2,...,w_N)
H(W)=?N1?logP(w1?,w2?,...,wN?) 由公式可知:困惑度越小,说明所建模的语言模型越精确。 总结从特性上可以将 n-gram 语言模型看作是基于词与词共现频次的统计,而神经网络语言模型则是给每个词分别赋予分布式向量表征,探索它们在高维连续空间中的依赖关系。实验证明,神经网络的分布式表征以及非线性映射更加适合对自然语言进行建模。 语言模型在机器翻译和语音识别中的应用。基于贝叶斯定理,这两类应用都可以建模为如下形式 参考资料[1] 自然语言处理中N-Gram模型介绍 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:33:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |