首页 > 其他分享 >深度学习-nlp--词向量--68

深度学习-nlp--词向量--68

时间:2024-04-08 23:44:07浏览次数:31  
标签:nlp -- wn 模型 gram w1 68 向量 w2

目录
进入新的领域 加油!

1.统计语言模型

语言模型 本质就是让机器学会说话
但是机器本质上是只会1+1
统计语言模型是所有 NLP的基础,被广泛应用与语音识别、机器翻译、分词、词性标注和信息检索等任务。
传统的统计语言模型是表示语言基本单位(一般为句子)的概率分布函数,这个概率分布也是该语言
的生成模型。通俗的讲,如果一句话没有在语料库中出现,可以模拟句子的生成的方式,生
成句子在语料库中的概率。一般语言模型可以使用各个词语条件概率的形式表示:

其中,Context 为 w_i 的上下文。根据Context的表示差异,统计语言模型又可以分为不同的类别

2. N-gram

统计语言模型实际上是一个概率模型,
常见的概率模型有:N-gram 模型、决策树、最大熵模型、隐马尔可夫模型、条件随机场、神经网络等,目前常用于语言模型的是 N-gram 模型和神经语言模型
我 今天 下午 打 篮球
p(S)=p(w1,w2,w3,w4,w5,...,wn)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)
p(S)被称为语言模型,即用来计算一个句子概率的模型

马尔可夫(Markov)假设——未来的事件,只取决于有限的历史
基于马尔可夫假设,N-gram 语言模型认为一个词出现的概率只与它前面的 n-1 个词相关
假设下一个词的出现依赖它前面的一个词:
p(S)=p(w1,w2,w3,w4,w5,...,wn)=p(w1)p(w2|w1)p(w3|w2)...p(wn|wn-1)

假设下一个词的出现依赖它前面的两个词:
p(S)=p(w1,w2,w3,w4,w5,...,wn)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|wn-1,wn-2)

我们管这样的叫 n-gram 模型
当 N=1 的时候,为一元模型(Unigram model): (自己独立出现 与前后词无关)
P(S)=P(w1,w2,w3,..,wn)=P(W1)P(W2)…*P(Wn)

当 N=2 的时候,叫二元模型(Bigram model):(只与前面一个词有关)
P(S)=P(w1,w2,w3,..,wn)=P(W1|start)P(W2|W1)…*P(Wn|Wn-1)

当 N=3 的时候,叫三元模型(trigram model):(只与前面两个词有关)
P(S)=P(w1,w2,w3,..,wn)=P(W2|start,W1)P(W3|W1,W2)…*P(Wn|Wn-1,Wn-2)

举例:
假设语料库里面 经过统计 每个词出现的次数:

二元单词分布情况表:

i后面跟want一共出现了 827 次

频率分布表:

“i”一共出现了 2533 次,而其后出现“want”的情况一共有 827次,所以 P(want|i)=827/2533≈0.33

p(I want chinese food)=p(want|I)p(chinese|want)p(food|chinese)

假设没有计算和存储限制,n 是不是越大越好?早期因为计算性能的限制,一般最大取到 n=4;如今,即使 n>10 也没有问题,但是,随着 n 的增大,模型的性能增大却不显著,这里涉及了可靠性与可区别性的题参数越多,模型的可区别性越好,但是可靠性却在下降——因为语料的规模是有限的,导致 count(W) 的实例数量不够,从而降低了可靠性。

总结:
该语言模型只看当前词的前 n-1 个词对当前词的影响。所有该模型的优势为:
(1)该模型包含了前 n-1 个词所能提供的全部信息,这些词对当前词的出现具有很强的约束能;
(2)只看前 n-1 个词而非所有词,所以使得模型的效率较高。
该模型也有很多缺陷:
(1)n-gram 语言模型无法建模更远的关系,语料的不足使得无法训练更高阶的语言模型(通常n=2 或 3);
(2)该模型无法建模出词与词之间的相似度,比如“白色汽车”和“白色轿车”;
(3)训练语料中有些 n 元组没有出现过,其对应的条件概率为 0,导致计算一整句话的概率为 0!

3. NPLM神经语言模型

Neural Probalistic Language Model
沿用了 N-gram 模型中的思路,将 w 的前 n-1 个词作为 w 的上下文 context(w),

其中 c(w) 表示 w 的词向量

【输入层】首先,将 context(w) 中的每个词映射为一个长为 m 的词向量,词向量在训练开始时是随机的,并参与训练;
【投影层】将所有上下文词向量收尾相连拼接为一个长向量,作为 w 的特征向量,该向量的维度为 1X(n-1)m 也就是一个长度为(n-1)m的向量
【隐藏层】拼接后的向量会经过一个规模为 h 隐藏层,该隐层使用的激活函数为 tanh
【输出层】最后会经过一个规模为 N 的 Softmax 输出层,从而得到词表中每个词作为下一个词的概率分布

其中 m, n, h 为超参数,N 为词表大小,视训练集规模而定,也可以人为设置阈值
训练时,使用交叉熵作为损失函数
当训练完成时,就得到了 N-gram 神经语言模型,以及副产品词向量,
模型概括为:

模型的超参数:m, n, h, N
m 为词向量的维度,通常在 10^1 ~ 10^2 例如:128
n 为 n-gram 的规模,一般小于 5 例如:3 也就是只跟前2个词有关 作为上下文
h 为隐藏的单元数,一般在 10^2
N 位词表的数量,一般在 10^4 ~ 10^5,甚至 10^6,词表的长度

网络参数包括两部分:
词向量 C: 一个 N * m 的矩阵——其中 N 为词表大小,m 为词向量的维度,通过该表可以查询每个词 对应的词向量
网络参数 W, U, p, q:

NPLM 的优势
单词之间的相似性可以通过词向量来体现
S1=“我 今天 去 网咖” 出现了 1000 次
S2=“我 今天 去 网吧” 出现了 10 次
对于 N-gram 模型:P(S1)>>P(S2)
而神经网络模型计算的 P(S1)≈P(S2)

4. Word2Vec--基础中的基础

One-hot representation:对应位置数字取 1,其他位置全为 0
词表:[the cat sat on mat]
the [1 0 0 0 0]
cat [0 1 0 0 0]
sat [0 0 1 0 0]
on [0 0 0 1 0]
mat [0 0 0 0 1]

计算机是无法直接处理文本信息的,所以,在我们构建神经网络之前,要对文本进行一定的处理。
相信大家对(one-hot encode)编码应该不陌生了,但是表示文本的矩阵会非常的稀疏,极大得浪费了空间,而且这样一个矩阵放入
神经网络训练也会耗费相当多的时间。

为此,提出了词向量模型(Word2Vec)。词向量模型是一种将词的语义映射到向量空间
的技术,说白了就是用向量来表示词,但是会比用独热编码用的空间小,而且词与词之间可
以通过计算余弦相似度来看两个词的语义是否相近

King-Man+Woman=Queen

有了前面的准备,本节正式介绍 word2vec 中用到的两个重要的模型-CBOW 模型
(Continuous Bag-of-Words Model)和 Skip-gram 模型(Continuous Skip-gram
Model)

5. CBOW 模型

根据上下文预测出来当前这个词是什么
先举例:




假设我们此时得到的概率分布已经达到了设定的迭代次数,那么现在我们训练出来的
look up table 应该为矩阵 W。即,任何一个单词的 one-hot 表示乘以这个矩阵都将得到
自己的 word embedding

总结:

  1. 输入上下文单词的 onehot.
  2. 所有 onehot 分别乘以共享的输入权重矩阵 W
  3. 所得的向量 相加求平均作 size 为 1*N.
  4. 乘以输出权重矩阵 W'
  5. 得到向量 {1*V} ,激活函数处理得到 V-dim 概率分布, {PS: 因为是 onehot 嘛,其中的每一维代表着一个单词},概率最大的 index 所指示的单词为预测出的中间词(targetword)
  6. 与 true label 的 onehot 做比较,误差越小越好

定义 loss function(一般为交叉熵代价函数),采用梯度下降算法更新 W和 W'。训练完毕后,输入层的每个单词与矩阵 W 相乘得到的向量的就是我们想要的词向量
(word embedding),这个矩阵(所有单词的 word embedding)也叫做 look up table(其实聪明的你已经看出来了,其实这个 look up table 就是矩阵 W 自身),也就是说,
任何一个单词的 onehot 乘以这个矩阵都将得到自己的词向量。

Continuous Bag-of-Word Model(连续词袋模型)和 skip-gram model(跳字模型),分别对应了词向量的两种训练方法:
利用 context 预测中心词以及利用中心词去预测context。对于连续词袋模型CBOW)来说,一般的做法是先对每个单词进行 one-of-N编码(one-hot encoded),作为训练网络的输入,接着构建一层 hidden layer,最后构建输出层,这一层是一个 softmax 层,每个 context 单词到心单词的事件都被认为是独立的,所以将这些事件发生的概率相乘,最后构建损失函数,即:将输出概率分布和实际选中的词概率分布进行 Corss Entropy 计算,接下来使用 SGD 对参数进行更新。这里,hiddenlayer 的训练结果就是最终的 word vector 了。

6. Skip-gram

根据当前这个词来预测上下文

Skip-gram 的具体训练过程如下,蓝色代表输入的词,图的框框代表滑动窗口,用来截取蓝色词的上下文,蓝色词的上下文作为输出,然后形成训练标本(Training Samples),这样我们就得到了{输入和输},他们放入{输入层-隐藏层-输出层}的神经网络训练,我们就能得到 Skip-gram 模型。因为神经网络不能直接处理文本,因此所有的词都用 one-hotencode 表示.

Skip-gram 的神经网络结构如图所示,隐藏层有 300 个神经元,输出层用 softmax 激励函数,通过我们提取的词与其相应的上下文去训练,得到相应的模型。通过 Softmax 激励函数,输出层每个神经元输出是概率,加起来等于 1。

但输出层并不是我们关心的,我们去掉模型的输出层,才是我们想要的词向量模型,我们通过隐藏层的权重来表示我们的词。
现在假设我们有 10000 个词,每个词用 one-hot encode 编码,每个词大小就是1*10000,现在我们想用 300 个特征去表示一个词,那么隐藏层的输入是 10000,输出是300(即 300 个神经元),因此它的值矩阵大小为 10000 * 300。那么我们的词向量模型本质上就变成了矩阵相乘。

标签:nlp,--,wn,模型,gram,w1,68,向量,w2
From: https://www.cnblogs.com/cavalier-chen/p/18122928

相关文章

  • 20240408,C++数组,函数,指针
    是谁说回老家学习结果摆烂了两天,是我,Π—Π! Π—Π!! 一,数组——同C1.1一维数组1.0  相同类型,连续内存,1.1  定义格式:数据类型数组名【长度】;数组类型数组名【长度】={1,2,3,……};数组类型数组名【】={1,2,3,……};1.2  遍历数组,初始化,下标【0-N】1.3  数组名:数......
  • 网络基础三——IP协议补充
    3.网段划分3.1IP划分的前置知识​IP地址分为两个部分,网络号和主机号;网络号:保证两个相互连接的网段具有不同的标识;主机号:同一个网段内,主机之间具有相同的网段号,但是必须具有不同的主机号;​1.路由器也是特定一个子网的主机,所以路由器也要配置IP地址;​2.路由器可以跨网......
  • Redis中的集群(一)
    集群概述Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能节点一个Redis集群通常由多个节点(node)组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,则必须......
  • 【C++对C语言的拓展】引用--3
    1.8指针引用#include <iostream>usingnamespace std; struct Teacher { char name[64]; int age ; }; //在被调⽤用函数获取资源int getTeacher(Teacher **p) {     Teacher *tmp = NULL; if (p == NULL)......
  • windows消息机制--1基本概念解释
    基本概念解释我们在编写标准C程序的时候,经常会调用各种库函数来辅助完成某些功能:初学者使用得最多的C库函数就是printf了,这些库函数是由你所使用的编译器厂商提供的。在Windows平台下,也有类似的函数可供调用:不同的是,这些函数是由Windows操作系统本身提供的。1)SDK和APISD......
  • 毕业设计:基于卷积神经网络的条形码识别系统 深度学习 人工智能 计算机视觉
    目录 前言设计思路一、课题背景与意义二、算法理论原理2.1卷积神经网络2.2目标检测三、检测的实现3.1数据集3.2实验环境3.3模型训练最后 前言    ......
  • 毕业设计:基于机器学习的违规占道经营识别系统 人工智能
    目录前言设计思路一、课题背景与意义二、算法理论原理2.1卷积神经网络2.2目标检测算法三、检测的实现3.1数据集3.2实验环境搭建3.3实验及结果分析最后前言    ......
  • 17. InnoDB-spaceID.PageNumber/压缩表
    表空间内部组织结构表空间内部由多个段对象(Segment)组成每个段(Segment)由区(Extent)组成每个区(Extent)由页(Page)组成每个页(Page)里面保存数据(或者叫记录Row)段对用户来说是透明的段也是一个逻辑概念目前为止在information_schema中无法找到段的概念重点需要理解......
  • 热更新框架3-能够理解框架的设计思想
    热更新框架是一种用于在运行时更新应用程序代码的工具。它的设计思想主要是为了解决应用程序更新的问题,使得开发者可以在不停止或重新启动应用程序的情况下,实时地更新代码和资源。热更新框架的设计思想通常包括以下几个方面:动态加载:热更新框架通过动态加载机制,将新的代码和......
  • GitHub提交PR
    一、以"茴香豆"开源项目为例1、github地址https://github.com/InternLM/HuixiangDou/tree/main2、点击Fork项目,将该项目的仓库复制到你自己的GitHub账号下3、在你自己的GitHub账号下,找到刚刚”Fork”的项目仓库,点击”Code”按钮,复制仓库的URL4、在本地终端打开一个文件......