日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bert 大白话

發(fā)布時間:2025/4/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bert 大白话 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

keras 版本的bert源碼
tensorflow版本的bert源碼

環(huán)境要求:python版本>=3.5,tensorflow版本>=1.10(筆者使用的是1.12) pip install bert-serving-server pip install bert-serving-client 下載訓練好的BERT中文模型:https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip bert-serving-start -model_dir ./chinese_L-12_H-768_A-12 -num_worker=2 from bert_serving.client import BertClient bc = BertClient() g=bc.encode(['你好']) In [4]: g.shape Out[4]: (1, 768)

大家記住768這個數(shù)字

我只問一個問題,那就是bert 詞向量化輸出的是什么?
在這個問題之前,大家可以想想,word2vec 輸出的是什么?
大家可以看看這篇文章大白話講解word2vec到底在做些什么
我們要獲取的dense vector其實就是Hidden Layer的輸出單元。有的地方定為Input Layer和Hidden Layer之間的權重

我看了bert的tensorflow 源碼,大家可以看看bert tensorflow 源碼的36行和877行,都出現(xiàn)了 hidden_size=768

def __init__(self,vocab_size,#大家看看下面這個768hidden_size=768,num_hidden_layers=12,num_attention_heads=12,intermediate_size=3072,hidden_act="gelu",hidden_dropout_prob=0.1,attention_probs_dropout_prob=0.1,max_position_embeddings=512,type_vocab_size=16,initializer_range=0.02): # Down-project back to `hidden_size` then add the residual.with tf.variable_scope("output"):layer_output = tf.layers.dense(intermediate_output,hidden_size,kernel_initializer=create_initializer(initializer_range))layer_output = dropout(layer_output, hidden_dropout_prob)layer_output = layer_norm(layer_output + attention_output)prev_output = layer_outputall_layer_outputs.append(layer_output)

我又看了bert keras 版本,在源碼的47行和121行都出現(xiàn)了 embed_dim=768

def get_model(token_num,pos_num=512,seq_len=512,embed_dim=768,transformer_num=12,head_num=12,feed_forward_dim=3072,dropout_rate=0.1,attention_activation=None,feed_forward_activation='gelu',training=True,trainable=None,output_layer_num=1): mlm_dense_layer = keras.layers.Dense(units=embed_dim,activation=feed_forward_activation,name='MLM-Dense',)(transformed)mlm_norm_layer = LayerNormalization(name='MLM-Norm')(mlm_dense_layer)mlm_pred_layer = EmbeddingSimilarity(name='MLM-Sim')([mlm_norm_layer, embed_weights])masked_layer = Masked(name='MLM')([mlm_pred_layer, inputs[-1]])extract_layer = Extract(index=0, name='Extract')(transformed)nsp_dense_layer = keras.layers.Dense(units=embed_dim,activation='tanh',name='NSP-Dense',)(extract_layer)nsp_pred_layer = keras.layers.Dense(units=2,activation='softmax',name='NSP',)(nsp_dense_layer)

結論:
word2vec本質上就是一個三層的神經(jīng)網(wǎng)絡,word2vec輸出的是隱藏層到輸出層權重矩陣的某一行,

bert是一個8層的神經(jīng)網(wǎng)絡,分別是
1.Dense=>
2.LayerNormalization=>
3.EmbeddingSimilarity=>
5.Masked=>
6Extract=>
7Dense=>(這一層的神經(jīng)元個數(shù)是768)
8Dense=>

bert的深度更加深,所以訓練的時間要長,并且bert 詞向量的長度是固定的,要想改變,需要改變網(wǎng)絡參數(shù),重新訓練

總結

以上是生活随笔為你收集整理的bert 大白话的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。