词嵌入(word2vec)-NNLM(Neural Network Language Model)

  1. 基本概念 
    词编码 
    向量空间子结构 
    One-Hot 
    Bag of words(词袋模型) 
    TF-IDF 
    语言模型 
    分布式表示 
    共现矩阵
  2. NNLM(Neural Network Language Model)神经网络语言模型 
    NNLM的基本思想 
    NNLM原理 
    projection layer 
    SoftMax层 
    hidden layer

1.基本概念

传统的机器翻译,自然语言处理多是基于规则的,现在更多的是基于模型,规则隐含的参数里。

词编码 
每个词都用不同的含义,而要被机器所识别,就必须要把词进行编码,同时词编码时要保证词的相似性。图像识别的时候,对图像在RGB三个颜色通道中看他们的相似性就可以了,但是,无论中文还是英文,词都太多了,他是人造的,很难保持像图片这样的信息,所以我们希望能对词进行编码,保持它所包含的信息量。

因此,我们希望能有一个对应关系,如图,这些数字在空间中的表示能有一个对应关系。这不就是和机器学习差不多吗?很多机器学习的预测都是寻找一个对应关系,也就是数据(X)和预测的东西(Y)的对应。机器翻译其实原理也差不多。 
这里写图片描述

向量空间子结构 
我们希望找到这样一个关系,可以作为机器学习/深度学习的输入.

VKingVQueen+VWomen=VMan
这个有没有感觉呢?其实换成这样,你可能更好理解:
VKingVQueen=VManVWomen
我们就是希望找到 King,Queen 之间的差异,隐含的关系,然后通过一个dense vector表示。

One-Hot 
最简单的一种想法,就是对一句话用one-hot编码:比如对于这句话:

John likes to watch movies,Mary likes too.
John also likes to watch football games.
"John":1,"likes":2,"to":3,"watch":4,"movies":5,"also":6,"football":7,"games":8,"Mary":9,"too":10
用one-hot可以表示为:
John:[1,0,0,0,0,0,0,0,0,0]likes:[0,1,0,0,0,0,0,0,0,0]...too:[0,0,0,0,0,0,0,0,0,1]
但事实是,这样做耗费的资源太多,而且不能很好的表征每句话的特性。

Bag of words(词袋模型) 
另一种方法则是词袋模型,它相当于一个词袋,不考虑词/句之间的相关性,只要出现了该词,就会记为1,再次出现就会+1。比如前面的那句话:

John likes to watch movies,Mary likes too.
可以表示为
[1,2,1,1,1,0,0,0,1,1]
与其相似的是 binary weighting,它就是看一下每个词是否出现,出现记为1,没出现记为0
[1,1,1,1,1,0,0,0,1,1]
但他们都有一个缺点,不能将每个单词所代表的中心表示出来,比如John 和to,watch他们都是1,怎么直到那个词更重要呢/

TF-IDF 
因此,就有tf-idf解决这个问题,它的主要思路就是有两方面: 
A—第一就是如果这个词在我们当前文档出现的频率非常高,说明它在当前文档应该是比较重要的。 
B-但如果它在所有的文档中出现的频次都非常好,大家可能就会觉得这个词应该不是那么重要的。

比如中文的“的“,或者我们上面那两个句子中的to. 
因此,tf-idf就是一个在当前文档和所有文档中权衡他们的重要性,然后计算出每个词的重要度的方法。

语言模型 
语言模型可以考虑到词之间的前后关系,我在这篇文章中举了非常详细的例子以及原理解释。神奇的贝叶斯思想 
缺点就是n-gram随着预料的增多,离散化越严重,最终导致数据稀疏的问题。

分布式表示 
如果数据的维度过高,经常需要用到分布式来表示,它是个什么东西呢? 
比如有这么一个例子:

轿
可以发现,这几个词之间都有一定的模式存在,我们可以通过这些模式,把表达的空间压缩的三个维度:颜色,车型,那个品牌的车。然后他们做一个笛卡尔积就可以有:
= X  X 

其中,在现代统计自然语言处理中,有一个非常有洞见的想法,就是:

就像你认识一个新认识的朋友,想直到他的收入,你可以看一下他周围10个朋友的收入大致是多少,来推断他的收入是多少一样。

共现矩阵 
基于前面那个想法,就有了这样一个局域窗口,这个窗口的主要作用就是看一下周围的几个词才好,窗口的长度一般设为5-10。就像你看你朋友的收入一样,你是看周边的五个人还是10个人呢?

那他具体怎么表示呢? 
假设为三句话: 

I like deep learning,I like NLP,I enjoy flying

假设局域窗口为1,可以得到这样的对称矩阵 
这里写图片描述 
可以发现 I 的前后一共出现了2次 like ,所以第一行第二列是2。

其实共现矩阵的本质代表着词与词之间的连接,且不考虑顺序。因为他是对称的,所以一般会取行向量或者列向量来表示词向量。

其中面临的问题就是向量的维数随着词典的大小呈先行增长,且对于模型有着严重的稀疏性问题。

2.NNLM(Neural Network Language Model)神经网络语言模型

NNLM的基本思想

在一开始的时候,做自然语言处理可以发现很多问题,比如很多情况下,要做平滑处理等,因此深度学习慢慢开始火了之后,就有人说,不然咱来试一下神经网络来做这个吧。

他的本质就是:直接从语言模型出发,将模型最优化的过程转换为求词向量表示的过程。 
最优的方向是这个目标函数:用“我爱自然语言处理“为例,窗长度为n-1

L(θ)=tlogP(Wt|Wt1,Wt2,,Wtn+1)=logP()+logP(|)++logP(|,)
这个是n=3的通俗表达。 
概率p满足归一化条件,因为词典中的每个词都有一个概率:
w(vocabulary)P(w|wtn+1,,wt1)=1

NNLM原理 
其原理图如下,我们先从第一层说起

他的使用场景是这样的:假设我们有一分文本,我们可以通过他的前 N1 个词预测他的第N个词应该是什么?

projection layer 
假设我们的句子是“我爱自然语言处理“,拆开就是‘我’,’爱’,’自然’,’语言’,一共四个词,预测一下,下一个词是什么? 
如果每个词都给一个索引表示,’我’为0,’爱’为1。

C矩阵为投影矩阵,其中词典的维数为v,假设v=10000。 

C=(W1,W2,,Wv)=(W1)1(W1)2(W1)D(W2)1(W2)2(W2)D(Wv)1(Wv)2(Wv)D

那么‘我‘和‘爱‘的one-hot向量表示为:

1000,0100
每个列向量都有 D 行,那么一个词对应的列向量乘以这个矩阵 C 就可以得到
(D X v) x (v X 1)=D X 1
这样的乘法相当于把一个句子中的一个词取出来了,将每个词的结果进行拼接,就可以得到一句话,这句话的向量表示为
5D X 1
的列向量。

总结一下这一层做的事:主要是把一句话用one-hot向量表示,通过一个权重矩阵,得到表示这一句话的词向量。

hidden layer 
这一部分主要做的就是将上一层的输出作为输入,进行全连接,然后一般会有个tanh,来处理这些数据。

SoftMax层 
隐层出来之后,接一个SoftMax分类器,预测一下,在这10000个词的词表中,出现每个单词出现概率有多大。因此拿到的是一个

10000X1
的概率向量。 
因为我们有标准答案,就是”我爱自然语言”的第五个词应该是“处理“,如果预测出来的不准确,就可以通过定义一个交叉熵损失函数来计算损失,通过BP算法来调整参数C。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值