记录从零开始NLP的学习过程
文本表示可以分为分为离散表示和分布式表示。
- 文本离散表示的代表就是词袋模型,one-hot(也叫独热编码)、TF-IDF、n-gram都可以看作是词袋模型。分布式表示也叫做词嵌入(word embedding),经典模型是word2vec,还包括后来的Glove、ELMO、GPT和最近很火的BERT。
词离散表示和分布式表示。
- 词的离散表示就是词的独热表示one-hot representation,词的分布式表示有基于矩阵的分布表示,基于聚类的分布表示,基于神经网络的分布表示,词嵌入( word embedding)
1- 文本表示之词袋模型
介绍了one-hot,TF-IDF,以及n-gram.
https://www.cnblogs.com/Luv-GEM/p/10543612.html
2-了解什么是word embedding:
https://www.zhihu.com/question/53354714/answer/812778589
3-word embedding 之 word2vec方法:
word2vec的两种方法:CBOW(Continuous Bag-of-Words)和Skip-Gram
- CBOW:输入一个word的上下文去预测当前word。
- Skip-Gram:输入一个word去预测word的上下文
https://www.jianshu.com/p/471d9bfbd72f
4- fastText文本分类方法:
https://zhuanlan.zhihu.com/p/32965521
5.Attention与Transformer 模型
https://blog.csdn.net/jiaowoshouzi/article/details/89073944
https://jalammar.github.io/illustrated-transformer/
6.ELMO与BERT编码模型
了解Transformer后,开始学习BERT。
https://jalammar.github.io/illustrated-bert/(同时提到ELMO、OpenAI与BERT)
ELMO有点类似于CBOW,但是是用BiLSTM去训练wordtovec
OpenAI使用预训练好的Transformer的Decoder部分去进行下游任务,BERT也是基于这种预训练思想的启发,但是BERT使用的是Transformer的Incoder部分。OpenAI使用的Transformer模型学习的文本是从左到右单向的,因此BERT变成了拓展成了Incoder+双向输入。为了解决双向情况下,每个词都可以直接可以直接看见其上下文的情况,BERT使用了MASK技术。
BERT在fine-tuning阶段可以干很多事,包括word embedding,encoder的每一层输出都可以作为embedding表示
同时看了BERT原论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
7.BERT里position_embedding原理详解
https://kazemnejad.com/blog/transformer_architecture_positional_encoding/
为什么同时用sin和cos表示位置?
因为这样表示可以使pos+k处的编码使pos处编码的线性函数。即
M
⋅
[
sin
(
ω
k
⋅
t
)
cos
(
ω
k
⋅
t
)
]
=
[
sin
(
ω
k
⋅
(
t
+
ϕ
)
)
cos
(
ω
k
⋅
(
t
+
ϕ
)
)
]
M \cdot\left[\begin{array}{c}\sin \left(\omega_{k} \cdot t\right) \\ \cos \left(\omega_{k} \cdot t\right)\end{array}\right]=\left[\begin{array}{c}\sin \left(\omega_{k} \cdot(t+\phi)\right) \\ \cos \left(\omega_{k} \cdot(t+\phi)\right)\end{array}\right]
M⋅[sin(ωk⋅t)cos(ωk⋅t)]=[sin(ωk⋅(t+ϕ))cos(ωk⋅(t+ϕ))]
因为sin(a+b)=sin(a)cos(b)+cos(a)sin(b),如果只用sin或cos,是无法表示sin(a+b)或者cos(a+b)的
8.TextCNN
https://www.cnblogs.com/bymo/p/9675654.html
多个不同size的kernel来提取句子中的关键信息