IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 论文 | A Neural Probabilistic Language Model -> 正文阅读

[人工智能]论文 | A Neural Probabilistic Language Model

A Neural Probabilistic Language Model

1. Top View

这篇文章第一次用 “词向量”神经网络 来解决(统计)语言模型的问题, 作者通过随机初始化一个词库向量corpus matrix (简称 C C C) 作为神经网络中的迭代更新的主要参数, 输入进神经网络的每一个词语通过这个 C C C 的映射成为词向量来表示这个词语的语义信息. 以 n n n 个词的词向量作为输入, n n n个词后的下一个词的词向量作为输出, 不断训练迭代更新 C C C, 使得 C C C 最终可以成功表达这个训练词库中的每个词.

这样的做法解决的问题包括:

  • 在词汇量大的情况下, 以one-hot形式来表达单词会造成很大的开销
  • 再者, 以one-hot形式无法有效地表达出词与词之间在语义或语法上的相似程度(e.g. cat & dog; is & was)
  • 同时也解决了先前工作中基于统计学习方法的n-gram模型出现的"组合爆炸"问题, 以及训练语料库中存在测试条件下不存在的问题

2. Background

有几个前提背景知识需要了解

  1. Language Modeling

    如果给你以下一段话,你会在空白处填上什么词语?

    “The cat sat on _____.” 空白处可能是 “mats” / “sofa” / …

    Language Modeling 的任务就是对语言进行建模, 最终模型可以预测输入句子下一个紧接的词语.

    如果从概率的角度对语言建模进行解释, 一个句子每个单词用 x ( 1 ) , ? ? , x ( T ) x^{(1)},\cdots,x^{(T)} x(1),?,x(T) 表示, 组成这个句子的概率就可以表达成
    P ( x ( 1 ) , ? ? , x ( T ) ) = P ( x ( 1 ) ) × P ( x ( 2 ) ∣ x ( 1 ) ) × ? × P ( x ( T ) ∣ x ( T ? 1 ) , ? ? , x ( 1 ) ) = ∏ t = 1 T P ( x ( t ) ∣ x ( t ? 1 ) , ? ? , x 1 ) \begin{aligned} P(x^{(1)},\cdots,x^{(T)})&=P(x^{(1)})\times P(x^{(2)}|x^{(1)})\times\cdots\times P(x^{(T)}|x^{(T-1)},\cdots,x^{(1)}) \\ &=\prod^{T}_{t=1}{P(x^{(t)}|x^{(t-1)},\cdots,x^{1}}) \end{aligned} P(x(1),?,x(T))?=P(x(1))×P(x(2)x(1))×?×P(x(T)x(T?1),?,x(1))=t=1T?P(x(t)x(t?1),?,x1)?
    ( 这里的概率是在给出的词库(数据集)中进行统计得到的概率 )

    举个例子就是

    P(‘The’, ‘cat’, ‘sat’, ‘on’, ‘mats’) =

    P(‘The’) x P(‘cat’|‘The’) x P(‘sat’|‘cat’, ‘The’) x P(‘on’|‘sat’, ‘cat’, ‘The’) x P(‘mats’ |‘on’, ‘sat’, ‘cat’, ‘The’)

  2. n-gram Language Model

    上述例子只是一个很简单的例子,在现实中可能面对的情况往往是很多个单词, 可能是10几个单词, 组成的句子, 这时候进行概率统计的计算量就会非常的大. n-gram作了一个很强的假设, 它利用了1. 词序和2. 词与词之间存在的语义关系 (如 鸟-飞; 猫-跳; 狗-叫), 假设对在一个句子中,如果要对下一个单词进行预测, 只需基于最后 n n n 个词语进行概率预测, 即:
    p ^ ( w t ∣ w 1 t ? 1 ) ≈ p ^ ( w t ∣ w t ? n + 1 t ? 1 ) \hat{p}(w_t|w_1^{t-1})\approx\hat{p}(w_t|w_{t-n+1}^{t-1}) p^?(wt?w1t?1?)p^?(wt?wt?n+1t?1?)

3. NNLM (Neural Network Language Model)

1. 输入层

在这里插入图片描述

图1.输入层
  • 首先传进来的是 n ? 1 n-1 n?1 个词在词库中的索引, 比方说, 存在一个词库 [‘dog’, ‘cat’, ‘baby’], 那么 ‘dog’ 的索引就是 0
  • n ? 1 n-1 n?1 个词的索引组成一个索引向量, 传入神经网络

2. 映射层

在这里插入图片描述

图2.映射层
  • 根据索引向量中每个词的索引, 在corpus matrix C C C 中提取每个词所对应的词向量
  • 其中 C C C 的大小为 ∣ V ∣ × m |V|\times m V×m, ∣ V ∣ |V| V 为词库中词的数量, m m m 为表达一个词的特征的特征数, 文中给出的值是50
  • 如果是一个包含1000个单词的词库 [‘dog’, ‘cat’, ‘baby’, … ] , C C C 的大小为 1000 × 50 1000 \times 50 1000×50
  • 而每个单词通过 C C C 映射得到 C ( i ) C(i) C(i), 大小为 1 × m 1 \times m 1×m
  • 注意! 这里的 C C C 是开始的时候随机初始化的参数, 并在后续神经网络训练不断迭代过程中进行更新

3. 隐藏层 ( t a n h tanh tanh 层)

在这里插入图片描述

图3.隐藏层
  • 得到 n ? 1 n-1 n?1 C ( i ) C(i) C(i) 后, 将他们全部拼接起来得到 x = ( C ( w t ? 1 ) , C ( w t ? 2 ) , ? ? , C ( w ? n + 1 ) ) ) x=(C(w_{t-1}), C(w_{t-2}),\cdots, C(_{w-n+1}))) x=(C(wt?1?),C(wt?2?),?,C(w?n+1?))), 大小为 ( n ? 1 ) m (n-1)m (n?1)m
  • 将拼接后的向量 x x x 输入给 t a n h ( ) tanh() tanh() 激活函数
    • 实际上, 在 x x x 传入到 t a n h ( ) tanh() tanh() 前需要乘以一个隐藏层权重 H H H, 其中 H H H 大小为 h × ( n ? 1 ) m h \times (n-1)m h×(n?1)m
    • H x Hx Hx 最后得到的大小为 h h h
    • 再加上隐藏层偏差 d d d, 计算 H x + d Hx+d Hx+d 输出大小为 h h h
  • 假设 t a n h ( ) tanh() tanh() 隐藏层中神经元数目为 h h h, 那么 隐藏层 t a n h ( ) tanh() tanh() 的输出大小则是 h h h

4. 输出层 ( s o f t m a x softmax softmax 层)

在这里插入图片描述

图4.输出层
  • 隐藏层输出 t a n h ( ) tanh() tanh(), 乘上权重加上偏差后得到可以直接传入 s o f t m a x softmax softmax 层进行概率计算
    • 在传入 s o f t m a x softmax softmax 层之前, 对隐藏层的输出乘以大小为 ∣ V × h ∣ |V \times h| V×h 权重 U U U
    • 再加上大小为 ∣ V ∣ |V| V 的偏差 b b b, 最终得到 大小为 ∣ V ∣ |V| V 的输出: U t a n h ( d + H x ) + b Utanh(d+Hx)+b Utanh(d+Hx)+b
  • 经过 s o f t m a x ( ) softmax() softmax() 输出后, 得到的概率反映为词库中每个词的 (是传入句子下一个词)概率

5. Option (直连边)

在文章中, 作者还提到一部分为 “直连” 部分, 即上图中虚线部分, 由 C ( i ) C(i) C(i) 直接 映射到 O u t p u t Output Output 的连接.

这部分作者设置了一个权重 W W W, 直接乘以 x x x, 加到最后的隐藏层输出中, 一并传入到 s o f t m a x softmax softmax 中计算, 最后得到:
y = b + W x + U t a n h ( d + H x ) y=b+Wx+Utanh(d+Hx) y=b+Wx+Utanh(d+Hx)
文章中, 作者提到:

" When no direct connections from word features to outputs are desired, the matrix W W W is set to 0 0 0 "

直连边好像是一个改善神经网络的trick, 并没有进一步探讨.

6. 汇总

symbolshapeillustrate
x x x ( n ? 1 ) m × 1 (n-1)m\times1 (n?1)m×1 ( n ? 1 ) (n-1) (n?1) 个词向量拼接
H H H h × ( n ? 1 ) m h\times(n-1)m h×(n?1)m x x x 权重
d d d h × 1 h\times1 h×1 x x x 偏差
U U U ∣ V ∣ × h \lvert V \lvert\times h V×h隐藏层权重
b b b ∣ V ∣ \lvert V \lvert V隐藏层偏差
W W W ∣ V ∣ × ( n ? 1 ) \lvert V\lvert\times(n-1) V×(n?1)直连边权重

代码实现

数据集与代码均已上传到 gitee仓库, 仅供参考学习~ 😊
论文下载地址
(0积分直接下载即可,来源地址)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:33:38  更:2022-03-04 15:36:38 
 
开发: 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/26 17:48:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码