1.机器学习说白了就是不停地调整参数来拟合规律,如果事情本身就毫无规律或者规律性极低,那么机器学习也无能为力,再厉害的模型也不行
2.语音识别:把自然的声音信号转变成文本;自然语言处理:对文本进行理解;语言模型:判断一句话是否出现的概率
3.贝叶斯定理:P(w1,w2,w3,w4)= p(w1)*p(w2|w1)*p(w3|w1,w2)*p(w4|w1,w2,w3)
4.n-gram模型:每个词的概率,仅仅由前面的n个词决定的
当n=1时:P(w1,w2,w3,w4)= p(w1)*p(w2|w1)*p(w3|w1,w2)*p(w4|w1,w2,w3)简化=p(w1)*p(w2|w1)*p(w3|w2)*p(w4|w3)
5.做模型简化,必然会有假设,如果实际情况不满足假设,那么效果必然有所折扣
总共有v个词,会假设每个词都出现过c个词:p(w2|w1)=(w2+c)/(w1+7c)
6.语料库小,带来的问题:a有些小概率情况没有出现,会直接算成0; b大概率情况会被高估,估计出来的值不准
7.用神经网络还是一定好处的,降低了参数
8.One-hot,有一些问题:参数太多,无语义表达;稠密的方法来代替one-hot(v-->128维),通过模型输入,将两个词w1,w2的特征引入
9.word2vec:128*v(向量维数*词数)+128*v(网络全连接)
10.两个向量相加:好处是减少参数量;坏处是信息折损,丧失部分语义
11.语义模型,本意是预测词的概率,用周边的词来预测一个位置出现词的概率(完形填空);副产品,就是输入向量一并被训练,导致输入向量之间的距离可以表示语义
12.Softmax对应的类别数相对来说都比较少,但是对于nlp语义模型来说,类别数太多,需要添加一颗二叉树进行分类区分;对于训练中来说,使用二分查找进行多个逻辑回归的训练,可以把运算级从V降至logV
13.长尾分布:在中文来说,每个词的词频出现的差异性很大,高频词比低频词的出现次数往往高几个数量级。所以我们就需要对二叉树进行改造,改造的指导思想是:高频词在树的浅层,低频词放在树的深层。----->Huffman树
14.Softmax大类别多分类----->平衡二叉树分类----->huffman二叉树分类:1.利用二叉树的性质,降低分类的数量;2.利用了自然语言中,词频差异过大的特点;神经网络的结构是个动态的,不同的词频构成,对应的不同的Huffman树,huffman树类似于辅助线,在训练的时候用
15.Word2vet:14年谷歌搞出来,是自然语言处理领域的一个突破,通过计算词的向量相似度,就可以进行找近义词
16.找近义词:1用word2vec---将词转化成向量,计算两个向量的相似度 2 统计共现----计算出两个词在一块出现的次数,两个词上下文对应的很相似,认为他们是近义词(我在种红薯;我在种土豆;红薯和土豆是近义词)
17.Huffman的动态:
- 整体的各个词频决定huffman树(网络结构)
- 整体语料,会根据窗口,拆解成很多训练样本
- 这些训练样本所用的huffman树是一颗
- 每个训练样本所对应的目标词不一样,因此不同训练样本在同一颗huffman树上走不同的路径
18.Word2vec有个有趣的性质:
- V国王-V皇后 ≈V男人-V女人≈V老公-V老婆=男女的差异
- 可以对文本进行向量化:w1,w2……wn,这些词对应的向量进行相加=V文本
19.在工程中,某问题有种成熟解决方案,如果重准确,多种方案去交集;如果重召回,多中方案取并集
20.训练softmax函数究竟在训练什么?一个有V类,1正确的1类 概率朝大的方向走;2剩下的V-1类 概率朝着小的方向走----用随机的几个类别代替
21.负采样:就是负样本采样,传统方法就是V-1个词作为负样本,负采样做法就是从V-1个词中随机选择几个词做负样本
22.Word2vec(一般skip-gram+ns)
- 输入维度:a.cbow(多个相关词预测一个词;多个向量相加时使用) b.skip-gram(一个词预测周围一个词;单个词向量时使用) 总的来说,使用的过程和训练的过程越是一致,效果一般越好
- 输出维度(辅助):a.huffman b.负采样
23.每次训练出来的词向量都在单独的语义空间,不同语义空间的向量没有可比性
24.孤岛效应:由一些不相关语料或者弱相关语料组成,例如一些中文词w1,一些法文词w10,w1和w10的向量可能比较接近,相似度高,但两者没有关系。Word2vec本身不能解决这个问题,只能在样本选取上下功夫,让训练样本尽可能相关。
25.一词多义:Word2vec也无法解决一词多义(苹果是手机还是水果),首先:对数据宏观理解,人为找出一词多义的词;其次,找到词各个语义对应的上下文(v苹果1是手机,v苹果2是水果,两个向量)
26.多词一义:电脑,计算机---->电脑;多个词向量转化成一个向量
27.规则:特殊场景需要添加规则,在预料很少的场景,约定俗成,规则性本身很强的场景,时间要求紧迫的项目;规则就像补丁,衣服偶尔烂洞的时候,打打补丁,如果衣服很烂遍地补丁,就考虑换衣服
28.输入向量相加:训练之前,每个词向量都随机初始化,把输入词的向量,按位累加成一个向量,然后对目标词进行预测
- 预测时,因为类别过多,不能直接用softmax,因此用huffman树,或者ns
- 网络进行训练,包括输入,即每个词对应的词向量,最终真正使用的是,输入中每个词对应的向量
- 而整个模型,几乎不拿来用,所以说huffmax或者ns只是在训练的时候需要使用
- 训练完成之后,最直接应用:每个词对应于一个词向量,可以用来求词语的距离;而目前,互联网把应用极大的拓展,特别是在推荐系统中
29.word2vec的实现工具有很多:1.谷歌原生 2.Gensim 3.Fasttext facebook python实现 比较耗内存
time ./word2vec -train /home/ai/word2vec/nlp_data/train_data -output /home/ai/word2vec/nlp_data/vectors.txt -cbow 1 -size 64 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 15