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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

tensorflow2调用huggingface transformer预训练模型

發布時間:2025/3/12 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tensorflow2调用huggingface transformer预训练模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tensorflow2調用huggingface transformer預訓練模型

  • 一點廢話
    • huggingface簡介
    • 傳送門
    • pipline
    • 加載模型
    • 設定訓練參數
    • 數據預處理
    • 訓練模型
    • 結語

一點廢話

好久沒有更新過內容了,開工以來就是在不停地配環境,如今調通模型后,對整個流程做一個簡單的總結(水一篇)。

現在的NLP行業幾乎都逃不過fune-tuning預訓練的bert或者transformer這一關,按照傳統方法,構建整個模型,在processer里傳數據,在util里配路徑,在bert_fine_tune.sh里煉丹,說實話很麻煩,面對很多不需要復雜下游任務的任務,直接調用預訓練模型是最便捷高效的方法,著名的huggingface正是為此而生的,但它整體面向pytorch,如何有效得在tensorflow2中使用這些模型,對新員工和新入學的盆友們是一件很頭疼的事情,那么具體應該做些什么呢?往下看。

huggingface簡介

Hugging face原本是一家聊天機器人初創服務商 https://huggingface.co/ 專注于NLP技術,擁有大型的開源社區。尤其是在github上開源的自然語言處理,預訓練模型庫 Transformers,已被下載超過一百萬次,github上超過24000個star。Transformers 提供了NLP領域大量state-of-art的 預訓練語言模型結構的模型和調用框架。(https://github.com/huggingface/transformers)

傳送門

https://huggingface.co/models
在這里有近年來較為成熟的bert系模型,可以在目錄中直接下載預訓練的模型使用

pipline

pip install transformers==4.6.1 pip install tensorflow-gpu==2.4.0

需要注意的是,transforers包所需的tensorflow版本至少為2.2.0,而該版本對應的CUDA版本可能不同,如筆者使用的2.4.0版本tensorflow對應的CUDA是11版本,在此祭奠配cuda環境浪費的兩天時間……

加載模型

下載好的完整模型是這樣的,其中:
config 定義模型參數,如layer_num、batch等
tf_model.h5 tensorflow2模型文件
tokenizer 文本處理模塊
vocab 詞典

記錄好模型所在的目錄,然后打開你的編輯器,導入所需的包,這里以序列分類為例,其他下游任務參考官方文檔https://huggingface.co/transformers/model_doc/bert.html

import tensorflow as tf import transformers as ts from transformer import BertTokenizer, TFBertForSequenceClassification import pandas as pd

設定訓練參數

data_path = 'YOUR_DATA_PATH' model_path = 'YOUR_MODEL_PATH' config_path = 'YOUR_CONFIG_PATH' num_labels = 10 epoch = 10 tokenizer = BertTokenizer.from_pretrained(model_path)

數據預處理

涉及到數據的讀入和重組,注意數據格式一定要符合bert模型所需的格式

def data_incoming(path):x = []y = []with open(path, 'r') as f:for line in f.readlines():line = line.strip('\n')line = line.split('\t')x.append(line[0])y.append(line[1])df_row = pd.DataFrame([x, y], index=['text', 'label'])df_row = df_row.Tdf_label = pd.DataFrame({"label": ['YOUR_LABEL'], 'y': list(range(10))})output = pd.merge(df_row, df_label, on='label', how='left')return outputdef convert_example_to_feature(review):return tokenizer.encode_plus(review,max_length=256,pad_tp_max_length=True,return_attention_mask=True,truncation=True)def map_example_to_dict(input_ids, attention_mask, token_type_ids, label):return {"input_ids": input_ids,"token_type_ids": token_type_ids,"attention_mask": attention_mask,}, labeldef encode_example(ds, limit=-1):input_ids_list = []token_type_ids_list = []attention_maks_list = []label_list = []if limit > 0:ds.take(limit)for index, row in ds.iterrows():review = row["text"]label = row['y']bert_input = convert_example_to_feature(review)input_ids_list.append(bert_input["input_ids"])token_type_ids_list.append(bert_input['token_type_ids'])attention_maks_list.append(bert_input['attention_maks'])label_list.append([label])return tf.data.Dataset.from_tensor_slices((input_ids_list, token_type_ids_list, attention_maks_list, label_list)).map(map_example_to_dict)

具體內容就不再贅述了,已經寫得很詳細了,實在不懂的話……說不定我還有時間看評論

訓練模型

def main():train = data_incoming(data_path + 'train.tsv')test = data_incoming(data_path + 'test.tsv')train = encode_example(train).shuffle(100000).batch(100)test = encode_example(test).batch(100)model = TFBertForSequenceClassification(model_path, num_labels=num_labels)optimizer = tf.keras.optimizers.Adam(1e-5)model.compile(optimizer=optimizer, loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True))model.fit(train, epochs=epoch, verbose=1, validation_data=test)if __name__ == '__main__':main()

結語

吶,就是這么簡單的一小塊代碼,足以讓你的gpu煎雞蛋了,然鵝筆者再摸魚可能就要被組長裹進雞蛋里煎了,就先到這吧,下一期……有沒有還不曉得,996不配有空閑

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的tensorflow2调用huggingface transformer预训练模型的全部內容,希望文章能夠幫你解決所遇到的問題。

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