目录
1.语言模型:
更多语言模型参考https://www.cnblogs.com/rucwxb/p/10277217.html,(ELMo,BERT)
2.最早的语言模型的问题:
2.1.句子长的时候,计算量过大
2.2. 一些词组合在一起过于稀疏,数据稀疏
3.N-gram(统计词频)
1.假设待遇测的词只和前面一些词有关,N-gram=1只和前面一个词相关
2.相对来说没有那么稀疏
概率计算思路: 如上图,'i'一共出现2533次,'i'后面跟着'want'的出现次数为827次,那么i后面want出现的概率就是,827/2533
one-hot词的独热表示
缺点分析:
.1、向量的维度会随着句子的词的数量类型增大而增大;
.2、任意两个词之间都是孤立的,无法表示语义层面上词汇之间的相关信息,而这一点是致命的。
上面的只是出现的频次概率,后面发展为词的本质,让机器明白词的意思,
4.词向量(利用神经网络)
4.1word2vec
word2vec是谷歌提出的一种word embedding的具体手段,采用了两种模型(CBOW与skip-gram模型)与两种方法(负采样与层次softmax方法)的组合,比较常见的组合为 skip-gram+负采样方法。
word2vec:由于训练词向量模型的目标不是为了得到一个多么精准的语言模型,而是为了获得它的副产物——词向量。所以要做到的不是在几万几十万个token中艰难计算softmax获得最优的那个词(就是预测的对于给定词的下一词),而只需能做到在几个词中找到对的那个词就行,这几个词包括一个正例(即直接给定的下一词),和随机产生的噪声词(采样抽取的几个负例),就是说训练一个sigmoid二分类器(利用哈夫曼树变成多个二分类)!!!!!!!,只要模型能够从中找出正确的词就认为完成任务。
上图所示,基于词频率的会以为网吧和网咖完全不一样,不同于词频,对于神经网络来说,''网吧''词向量约等于''网咖''词向量
4.2、两种训练模式
- CBOW (Continuous Bag-of-Words Model)
- Skip-gram (Continuous Skip-gram Model)
4.3、两种加速方法
- Negative Sample(降采样)
- Hierarchical Softmax(层次softmax)
大家都知道哈夫曼树是带权路径最短的树,一般神经网络语言模型在预测的时候,输出的是预测目标词的概率(每一次预测都要基于全部的数据集进行计算,很大的时间开销)。
Hierarchical Softmax是一种对输出层进行优化的策略,输出层从原始模型的利用softmax计算概率值改为了利用Huffman树计算概率值。一开始我们可以用以词表中的全部词作为叶子节点,词频作为节点的权,构建Huffman树,作为输出。从根节点出发,到达指定叶子节点的路径是的。Hierarchical Softmax正是利用这条路径来计算指定词的概率,而非用softmax来计算。
即Hierarchical Softmax:把 N 分类问题变成 log(N)次二分类,利用哈夫曼树构造很多二分类(sigmoid)
Negative Sampling(简写NEG,负采样),这是Noise-Contrastive Estimation(简写NCE,噪声对比估计)的简化版本:把语料中的一个词串的中心词替换为别的词,构造语料 D 中不存在的词串作为负样本。在这种策略下,优化目标变为了:较大化正样本的概率,同时最小化负样本的概率。这样说大家可能已经糊涂了,我们省去繁琐的数学推倒,这里举一个例子:假设有一个句子为:“The quick brown fox jumps over the lazy dog.“ ,如果我们用skip-gram model ,貌似这是一个很大的网络。
注意:比如像“the”这种常见的词,我们会遇到两个问题:
1. 比如(fox,the)其实没有传递我们关于 fox的信息。‘the‘出现得太多了。
2. 我们有太多 (‘the’,…)的样本,多于我们实际需要的。
所以word2vec采用了降采样的策略。对于每个我们在训练样本中遇到的词,我们有一个概率去删除它。这个概率与单词出现的频率相关。
如果我们采用window size = 10,同时我们删除‘the’:
1. 当我们再去训练剩下的词,我们就不会再遇到‘the’了;
2. 我们减少了10个包含‘the’的样本
这其实就是‘NEG’的核心思想。
refrence: