NLP学习笔记7--review/词向量的训练以及使用

静态的词向量word2vec glove

动态的词向量bert elmo

文本表示的方法

词向量的训练

使用glove

使用bert句子向量



文本表示的方法

基于one hot 、tf-idf的bag-of-words

主题模型:LSA(SVD)、pLSA、LDA  就是词并不是文档的最基本组成单位 还有一层主题意思

LSA:把之前得到的词和文档的矩阵 进行svd操作 svd:奇异值分解 就是降维

分成三个矩阵 词到主题的矩阵 对角线矩阵 主题到文档的矩阵  可以适当去掉文档的噪音

NLP学习笔记7--review/词向量的训练以及使用_第1张图片



词向量训练

word2vec  cbow 和 skip-gram

NLP学习笔记7--review/词向量的训练以及使用_第2张图片

 1.获得一个语料库 

 2.预处理 (中英文预处理有差别 中文一定要先分词)

 3. 转为one-hot之后分别乘以共享的输入权重矩阵w 权重矩阵对于每一个one-hot向量都是一样的

 4.所得的向量相加求平均作为隐层向量,size为1*N

 5.得到向量{1*V}激活函数处理得到V-dim概率分布,概率最大的index所指示的单词为预测出的中间词

 6.与true label的onehot作比较,误差越小越好

word2vec就是一个浅层的神经网络



glove的使用

静态词向量没办法解决一词多义问题

NLP学习笔记7--review/词向量的训练以及使用_第3张图片

 GPT只能做生成 不能做文本分类 结构只能看到当前时刻以前的部分

而BERT可以看到完整句子



使用BERT生成句子向量

传统都是通过word embedding 加权取平均获得句向量

没办法理解上下文的语义

bert的优点在于 可以理解语义且排除词向量加权引起的误差

bert两种 12层的transformer官方只提供了12层和24层的transformer

默认取倒数第二层的输出值作为句向量(前面几层还没有学到充分的语义信息,最后一层太接近于实际目标)

gpu_memory_fraction = 0.8

layer_indexes = [-2]

model_dir = os.path.join(file_path,'chinese_L-12_H-768_A-12/')

下载官方预训练好的中文的bert模型

config_name = os.path.join(model_dir, 'bert_config.json')

原生bert的config参数 config参数有什么用?

ckpt_name = os.path.join(model_dir, 'bert_model.ckpt')

checkpoints 训练中间的结果

output_dir = os.path.join(model_dir,'../tmp/result/')

把我们下载训练好的模型和结果保存在这个路径

vocab_file = os.path.join(model_dir,'vocab.txt')

把语料信息来源于

data_dir = os.path.join(model_dir, '../data/')

需要生成句向量的数据来源

gpu使用率 gpu_memory_fraction = 0.8

讲的好垃圾 绝望了 看后面bert还会不会讲吧

你可能感兴趣的:(NLP学习笔记,自然语言处理,人工智能,nlp)