文章目录
- 统计语言模型和神经网络语言模型
- 注意力机制和Bert
- 实战Bert
统计语言模型和神经网络语言模型
区别:统计语言模型的本质是基于词与词共现频次的统计,而神经网络语言模型则是给每个词赋予了向量空间的位置作为表征,从而计算它们在高维连续空间中的依赖关系。
相对来说,神经网络的表示以及非线性映射,更加适合对自然语言进行建模。
注意力机制和Bert
Attention is all you need 是关于注意力机制最经典的论文,它是机制,准确来说,不是一个算法,而是一个构建网络的思路。
其实 Attention 机制要做:找到最重要的关键内容。它对网络中的输入(或者中间层)的不同位置,给予了不同的注意力或者权重,然后再通过学习,网络就可以逐渐知道哪些是重点,哪些是可以舍弃的内容了。
BERT 的全称是 Bidirectional Encoder Representation from Transformers,即双向 Transformer 的 Encoder。作为一种基于 Attention 方法的模型,它最开始出现的时候可以说是抢尽了风头,在文本分类、自动对话、语义理解等十几项 NLP 任务上拿到了历史最好成绩。BERT 的理论框架主要是基于论文《Attention is all you need》中提出的 Transformer,而后者的原理则是刚才提到的 Attention。
结合上图我们要注意的是,BERT 采用了基于 MLM 的模型训练方式,即 Mask Language Model。因为 BERT 是 Transformer 的一部分,即 encoder 环节,所以没有 decoder 的部分(其实就是 GPT)。
用过 Word2Vec 的小伙伴应该比较清楚,在 Word2Vec 中,对于同一个词语,它的向量表示是固定的,这也就是为什么会有那个经典的“国王-男人+女人=皇后”的计算式了,但有个问题,“苹果”可能是水果,也可能是手机品牌。如果还是用同一个向量表示,就有偏差了,而BERT可以根据上下文的不同,对同一个token给出的词向量是动态变化的,很灵活。
实战Bert
安装hugging face的Pytorch版本的Transformers包
pip install Transformers
ref:https://github.com/huggingface/transformers
找到这里面很重要的两个文件:
convert_BERT_original_tf_checkpoint_to_PyTorch.py 和 modeling_BERT.py
第一个是将tf2的模型转成pytorch版的
第二个是给咱一个BERT的使用案例
选一个预训练模型Pre-trained Models
ref:https://github.com/google-research/bert
102 languages, 12-layer, 768-hidden, 12-heads, 110M parameters
模型转换:
python convert_tf_checkpoint_to_pytorch.py --tf_checkpoint_path D:\code\python_project\01mlforeveryone\multilingual_L-12_H-768_A-12\multilingual_L-12_H-768_A-12\bert_model.ckpt --bert_config_file D:\code\python_project\01mlforeveryone\multilingual_L-12_H-768_A-12\multilingual_L-12_H-768_A-12\bert_config.json --pytorch_dump_path bert/pytorch_model.bin
转换成功