课程在b站上 https://www.bilibili.com/video/BV1LA411n73X?p=7&spm_id_from=pageDriver
一、TF-IDF
嗯嗯,这次感觉终于弄懂了,用sklearn跑一下叭!!! 正好练习一下git 1、ravel()不产生副本的降维 https://blog.csdn.net/tymatlab/article/details/79009618 numpy中的ravel()、flatten()、squeeze()都有将多维数组转换为一维数组的功能,区别: ravel():如果没有必要,不会产生源数据的副本 flatten():返回源数据的副本 squeeze():只能对维数为1的维度降维
2、pycharm的cmd没设置好,虚拟环境一直卡bug,我服了。不过解决了 3、看起来那么简单,却一波三折,为什么requirenment里面的一些包安装不了啊
0------看代码 1、这里打印了(n,idf)和v2i 其实这个v2i是单词对应的索引值; n,idf是单词对应的idf
比如说,这里面的am是第一个,所以他的索引就是0,他在v2i这个字典里面’am’:0 用的时候我们可以根据v2i这个字典,找到其对应的idf 我醉了,想把写好注释的代码push到github
结果。。。。我的github太老了,登不上去,卡bug居然要更新。
我丢,还原来是clone的时候用的是http,不是ssh,所以push不上去。 总之,终于push上去了。继续看课l
词向量
1、看了CBOW和skip-gram两个模型 手动画图叭 2、顺便看下鹅鹅鹅softmax算了 有啥用呢??其实就是根据概率把原来的值映射到0-1,并且加和为1
“softmax直白来说就是将原来输出是3,1,-3通过softmax函数一作用,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标!”
作者:忆臻 链接:https://www.zhihu.com/question/23765351/answer/240869755 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
3、手画了个图,大概原理可以了解
4、看一下代码 CBOW 莫大大nb,教程直接看源码了 呃呃呃呃 还是学一下tf2如何快速上手叭 这个官方教程页太简洁了叭 https://www.tensorflow.org/tutorials/quickstart/beginner?hl=zh-cn
有一说一,感觉代码还是比较复杂的,需要学一下tf才能比较轻松地学懂,所以我们先看原理叭还是。
seq2seq
1、将词向量通过序列模型变为句向量。 2、encoding和decoding的概念 3、decoding时inference和training的区别? 由于rnn的预测是连续的,在训练时,我们不希望与正确结果渐行渐远,所以尽量给正确信息;而在真正预测,也就是这里说的inference,我们没法保证给的是真实信息,就put into practice了。 4、beam_search和Greedyembeddingsearch的区别? 贪心就是每次只选最好的;而beam可以设置参数,选择保留考虑前几个最好的,就可能选到全局最优。
总觉得这个词到句向量的转换没说清楚,我再去查查其他资料。 找了一篇文章 https://zhuanlan.zhihu.com/p/65591919 state会作为下一级的输入传入下一个相邻的block,而块输出y则会被采集或丢弃,然后通过处理得到我们需要的信息。在多层RNN中,y会作为下一层的输入。
如果我没理解错的话,seq2seq就是先用word2vec得到向量,然后再encoding和decoding。 5、CNN也可以作为encoder 优势:并行计算 缺点:“裁剪”rigid
6、在下面的课中提到了句向量,觉得不太熟悉。 如果RNN作为encoder,那么句向量是最后一层rnn输出的y值所构成的矩阵吗? 参考文章 https://zhuanlan.zhihu.com/p/57623148 查了资料,感觉不是我才猜测的那样,不过这种说法倒是可以很好的解释encoding和decoding 的图
’这样接收完一句话后,得到的隐藏层的向量理论上是包含了一句话的信息,所以我们可以将这个最终的隐藏层向量看做是对整句话的编码,但是当句子长了之后,这个向量还能记得这么多吗‘
也就是说,其实句向量是最后学完输出的state向量,这个向量综合了整句话的信息,在信息综合方面,确实合理 。
注意力机制
1、感觉这个讲的也不是很好理解,还是先找找其他资料 注意力机制用法-tfa.seq2seq.LuongAttention() 参考资料: https://blog.csdn.net/u010960155/article/details/82853632 对于Decoder中每个要生成的y,都会生成一个上下文向量。这个上下文向量是由每个输入的words的信息加权求和得到的,其中权重向量就是注意力向量,它代表在此刻生成y时输入的单词的重要程度。最后将上下文向量和此刻的y的信息进行融合作为输出。
2、注意力机制引入的原因? 句子太长,信息容易丢失。 3、怎么用? 相当于每次decoder的输出y都有前面的x的参与,而且不同的x参与程度不同。 4、问题来了-如何决定这个重要程度?也就是如何计算上下文向量 对于Decoder中每个要生成的y,都会生成一个上下文向量。这个上下文向量是由每个输入的words的信息加权求和得到的***,其中权重向量就是注意力向量,它代表在此刻生成y时输入的单词的重要程度***。最后将上下文向量和此刻的y的信息进行融合作为输出。
原文这样写的,“我们把这个target state跟所有的Encoder的state进行比较,这样对每个state得到了一个score;” 但是合理性???为什么用target state比较呢? target state是目前的句子信息,与encoder之前所有的句子信息作比较,是怕忘记了之前的信息,想看一下与之前信息的相似程度,与哪一部分更加相似,就更加强调第二步的信息。这样将target state的重要性分明,照常进行y的预测。
这篇写的不错,感觉看的明白一点了。 https://zhuanlan.zhihu.com/p/54491016
Attention感觉就是在seq2seq只有上一个预测词(yt-1)+前些话的信息(st-1)的基础上;多加上了前面encoding的句子(带翻译的句子)不同阶段(长度)(s)的不同权重(a,通过训练得到)的信息。就像一个信息的大杂烩。
Transformer
大致了解了一下Transformer
ELmo
双向LSTM 感觉比Attention机制简单了不少!!! 总之,就是前向信息+后向信息+词向量信息一起进行预测
GPT&BERT
大概就是Transformer的进一步深化叭。 因为transformer还没听明白,所以这块也只是听一听。而且这两个模型应该又有不断的改进。 GPT是单向的;BERT是双向的 两者都超大,而且是基于Transformer(注意力的注意力——注意力机制+不断叠加)
应用
最后讲了一些应用领域吧,感觉还是挺宽广的。
这两天没休息好,哎。要是精力充沛,能学的更好的!
接下来有可能的话,要深入了解transformer、gpt和bert。 明天要学tf2!!!
加油!
|