NLP基础

在这里插入图片描述

Word2vec

参考:
Word2vec知其然知其所以然或者花书实战篇
知乎-word2vec
B站视频-word2vec
Efficient Estimation of Word Representations in Vector Space
Distributed Representations of Words and Phrases and their Compositionality
word2vec Parameter Learning Explained

word2vec概念

Word2vec是一个将语料库中输入文本信息转换为向量格式的包,又名词嵌入。Word2vec由谷歌在2013年推出,其可以将每个词(Word)转换为向量(Vector)。

Note:

  1. 语料库就相当于是一本书,书里有很多句子、词语、单词,但是一个指定的语料库不可能包含所有的句子、词语、单词。
  2. 比如“今天星期四”就是某语料库中的一个句子,“今天”、“星期四”就是词。

词向量发展历程

在这里插入图片描述
Note:

  1. One-hot独热向量:对于每个词都用[0, 0, …1, 0, 0]表示,每个词向量只有1个非零值1,其余均为0,这样的表示方法虽简单,但是当语料库很大的时候,one-hot会导致维度灾难。更难定的一点是,one-hot格式的词向量无法衡量词与词之间的关系,比如相似的两个词。
  2. SVD奇异值分解:SVD类似于特征分解。其中心思想是利用SVD来减小词向量维度。
    SVD是个效率并不高的算法,在实际实现过程中,尤其是待分解矩阵比较大的时候,出结果的速度是很慢的,因此并不实用。
  3. 技术水平总是往上走的,词向量发展至今的结果就是Word2vec。Word2vec最大的好处在于它可以衡量两个向量之间的距离,比如相似的两个单词所对应的向量距离也很小。

语言模型

语言模型是计算一个句子是句子的概率的模型。
Note:

  1. 比如说,今天是星期四----概率=90%;今天星期八----概率=0.1%;今天四星期----概率=0.001%。高的概率值往往需要满足语法正确以及语义符合。

如何描述呢?—通过条件概率将句子分解到词的层面。
比如一个句子 s s s n n n个词 w 1 , w 2 , ⋯   , w n w_1,w_2,\cdots, w_n w1,w2,,wn组成 s = { w 1 , w 2 , ⋯   , w n } s=\{w_1,w_2, \cdots,w_n\} s={w1,w2,,wn},则语言模型可以描述为:
P ( s ) = P ( w 1 , w 2 , ⋯   , w n ) = P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) ⋅ P ( w 3 ∣ w 1 w 2 ) ⋯ P ( w n ∣ w 1 w 2 ⋯ w n − 1 ) . (1) P(s)= P(w_1,w_2, \cdots, w_n) = P(w_1)\cdot P(w_2|w_1)\cdot P(w_3|w_1w_2)\cdots P(w_n|w_1w_2\cdots w_{n-1}).\tag{1} P(s)=P(w1,w2,,wn)=P(w1)P(w2w1)P(w3w1w2)P(wnw1w2wn1).(1)
Note:

  1. 其中, p ( w i ) = c o u n t ( w i ) N = 词 w i 在 语 料 中 出 现 的 次 数 总 词 数 p(w_i) = \frac{count(w_i)}{N}=\frac{词w_i在语料中出现的次数}{总词数} p(wi)=Ncount(wi)=wi,连续的2个词的概率: p ( w i − 1 , w i ) = c o u n t ( w i − 1 , w i ) N p(w_{i-1},w_i)=\frac{count(w_{i-1},w_i)}{N} p(wi1,wi)=Ncount(wi1,wi),故 p ( w i ∣ w i − 1 ) = c o u n t ( w i − 1 , w i ) c o u n t ( w i − 1 ) . p(w_i|w_{i-1})=\frac{count(w_{i-1},w_i)}{count(w_{i-1})}. p(wiwi1)=count(wi1)count(wi1,wi).
  2. 在式(1)中,每个概率 P P P都可以看成是一个分类任务。比如对于 P ( w 2 ∣ w 1 ) P(w_2|w_1) P(w2w1)来说, w 2 w_2 w2相当于label标签, w 1 w_1 w1相当于input输入。

But 这样是有问题的!
因为语料再大也不可能包罗万象,因此某个词可能不在语料中,但却是可观存在的,那么计算过程中,就会有 p = 0 p=0 p=0,这样的话就会导致式(1)为0,这样显然是不对的。

那要如何解决呢?
添加平滑操作,就是给那些没有出现过的词或者词组一个比较小的概率。
拉普拉斯平滑(加1平滑):每个词在原来的次数基础上加1次。

But 这样还是有问题的!
因为假设语料库的词一共有 V = 1 k V=1k V=1k个,那么上述语言模型中每个条件概率 p p p都是需要训练的参数,即一句话的参数可能到达 V + V 2 + V 3 + V n V+V^2+V^3+V^n V+V2+V3+Vn个。

那要如何解决呢?
使用K阶层马尔科夫假设(RL是是使用一阶马尔科夫假设,即2-gram)。 K K K越大,则模型精度越高,但是参数空间也就越大。
K具体有以下几种取法:
在这里插入图片描述
举个例子:
在这里插入图片描述
语言模型评价指标:困惑度
给定一个真实的句子 s s s
P e r p l e x i t y ( P P ( s ) ) = P ( w 1 , w 2 , ⋯   , w n ) − 1 n = 1 P ( w 1 , w 2 , ⋯   , w n ) N . Perplexity(PP(s))=P(w_1,w_2,\cdots,w_n)^{-\frac{1}{n}}=\sqrt[N]{\frac{1}{P(w_1,w_2,\cdots,w_n)}}. Perplexity(PP(s))=P(w1,w2,,wn)n1=NP(w1,w2,,wn)1 .

Word2vec模型

如今比较著名的Word2vec模型就是CBOW和Skip-Gram模型,为了篇幅,我将此这篇Word2vec的论文笔记放在下面:CBOW&Skip-Gram。Word2vec的2个模型由于计算复杂度较高,在后续的发展中,出现了层次Softmax以及负采样的方式进行优化,为了篇幅,我将此文章的论文笔记放在下面:Word2Vec进阶

Seq2Seq

在这里插入图片描述

Seq2Seq,又称Encoder-Decoder结构,一般是一种基于RNN结构的将不定长的输入系列转换为不定长的输出序列的模型。
具体请看我的另一篇NLP之Seq2Seq

Transformer

在这里插入图片描述

Transformer模型是目前GPT、BERT这种大规模预训练模型的基础,他抛弃了传统CNN和RNN结构的神经网络,采用将注意力模块堆积的方式形成的一种模型。
具体请看我的另一篇Transformer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值