Word2vec
word2vector,顾名思义,就是将语料库中的词转化成向量,以便后续在词向量的基础上进行各种计算。
我们以词为单位扫描这句话,每扫描到一个词,都把该词左右各2个词(窗口尺寸)共4个词拿出来,分别与被扫描的单词组成单词对,作为我们的训练数据。
基本思想是首先将所有词语进行one-hot编码,输入只有一个隐藏层的神经网络,定义好loss后进行训练,后面我们会讲解如何定义loss,这里暂时按下不表。训练完成后,我们就可以用隐藏层的权重来作为词的向量表示!!
隐藏层的神经元个数,取决于我们希望得到的词向量是多少维,有多少个隐藏神经元词向量就是多少维。网络的输入是one-hot编码的单词,它与隐藏层权重矩阵相乘实际上是取权重矩阵特定的行。这意味着,隐藏层实际上相当于是一个查找表,它的输出就是输入的单词的词向量。
输出层的神经元数量和语料库中的单词数量一样。每一个神经元可以认为对应一个单词的输出权重,词向量乘以该输出权重就得到一个数,该数字代表了输出神经元对应的单词出现在输入单词周围的可能性大小,通过对所有的输出层神经元的输出进行softmax操作,我们就把输出层的输出规整为一个概率分布了。
这里有一点需要注意,我们说输出的是该单词出现在输入单词周围的概率大小,这个“周围”包含单词的前面,也包含单词的后面。
神经网络训练,大体有如下几个步骤:
准备好data,即X和Y
定义好网络结构
定义好loss
选择合适的优化器
进行迭代训练
存储训练好的网络
对高频词进行抽样
下采样subsampling,具体意思是:
当我们扫描文本中的词时,会根据一定的概率删除这个词,也就是相当于文本中此处没有了这个词。这个概率大小取决于该词在整个语料库中的出现频率。出现频率越高,那么我们删除该词的概率就越大。
1.PNG
这个很容易理解,以上面的the为例,由于它在整个语料库中出现的频率很高,我们就会删除相当一部分的the,以便减少训练量。。
负采样
在我们的例子中,我们看到其他应当为0的维度有7个,在实际工作中,这个维度的数量是非常大的,因为我们的词表一般会很大。
所谓负抽样,即是从这些应当为0的维度中随机抽取几个,只更新这几个维度对应的神经元的权重,这既是负抽样的确切含义。当然,同时还要加上输出应当为1的维度所对应的神经元。
具体负抽样时抽几个维度的神经元,取决于具体的问题,google的论文中建议是5到20个。
用一个例子来具体感受一下。假设我们负抽样的维度数为5,我们的词表中有10000个单词,词向量的维度为300,也即是隐藏层有300个神经元。
那么,在输出层,权重矩阵的大小将是30010000。现在我们抽取了5个负的维度(输出应当为0的维度),加上输出为1的维度,只更新这6个维度所对应的神经元。那么需要更新的权重系数是3006=1800个。这只占输出层中所有权重系数的0.06%!!
在抽取这5个维度时,是按照单词在语料库中出现的次数多少来的, 出现次数越多,那么越可能被抽中。
区别
不同点:构建目标函数的方式不同。
CBOW: 根据词语上下文预测中心词
Skip-gram: 根据中心词预测上下文
共同点:以小窗粒度捕获词语与上下文的联系,然后滑动小窗,在整个语料上捕获联系。
制定目标函数,量化这种联系,最优化,从而求得每个词的向量。
word embedding
通过训练,将每个词都映射到一个较短的词向量上来
Word Embedding 是NLP中一组语言模型和特征学习技术的总称,把词汇表中的单词或者短语映射成由实数构成的向量上(映射)。
我们将king这个词从一个可能非常稀疏的向量坐在的空间,映射到现在这个四维向量所在的空间,必须满足以下性质:
(1)这个映射是单设(不懂的概念自行搜索);
(2)映射之后的向量不会丢失之前的那种向量所含的信息。
这个过程称为word embedding(词嵌入),即将高维词向量嵌入到一个低维空间。
词的表示
词的表示分为独热表示one-hot、分布式表示distributed。
独热表示one-hot
1、向量的维度会随着句子的词的数量类型增大而增大;2、任意两个词之间都是孤立的,根本无法表示出在语义层面上词语词之间的相关信息,而这一点是致命的。
分布式表示distributed representation
根据建模的不同,主要可以分为三类:基于矩阵的分布表示、基于聚类的分布表示和基于神经网络的分布表示(即word embedding)。
基于神经网络的分布表示一般称为词向量、词嵌入(word embedding)或分布式表示(distributed representation)
语言模型
语言模型包括文法语言模型和统计语言模型。一般我们指的是统计语言模型。
简单来说,就是衡量一个句子是否符合人说出来的自然句子的概率(或者置信度)。
常见的统计语言模型有N元文法模型(N-gram Model),最常见的是unigram model、bigram model、trigram model等等。
统计语言模型: 统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。
机器学习必须熟悉的算法之word2vector(一)
https://www.jianshu.com/p/1405932293ea
机器学习必须熟悉的算法之word2vector(一)
https://www.jianshu.com/p/d0e2d00fb4f0
通俗理解word2vec
https://www.jianshu.com/p/471d9bfbd72f
词嵌入来龙去脉 word embedding、word2vec
https://blog.csdn.net/u012052268/article/details/77170517
Word Embedding&word2vec
https://www.jianshu.com/p/af8f20fe7dd3
词嵌入算法
https://blog.csdn.net/lilong117194/article/details/82085172
自然语言处理:问答语料生成词汇表,词转向量(三)
https://blog.csdn.net/Xin_101/article/details/87359705
机器翻译质量评测算法-BLEU
https://blog.csdn.net/wwj_748/article/details/79686042
【聊天机器人】
利用tensorflow制作一个简单的聊天机器人
https://blog.csdn.net/a18852867035/article/details/53816030
- 基于检索的模型 vs. 产生式模型
https://www.cnblogs.com/LittleHann/p/6426610.html
bert代码解读4----中文命名实体识别
https://www.jianshu.com/writer#/notebooks/29448373/notes/45067149
BERT+BiLSTM-CRF-NER用于做ner识别
https://blog.csdn.net/qqywm/article/details/85569885
网友评论