基於bert實現文字多分類任務

2021-10-23 05:57:44 字數 3038 閱讀 6458

**已上傳至github

資料格式如下:

複製run_classifier.py,命名為run_cnews_classifier.py。新增自定義的processor

class myprocessor(dataprocessor):

def read_txt(self, data_dir, flag):

with open(data_dir, 'r', encoding='utf-8') as f:

lines = f.readlines()

random.seed(0)

random.shuffle(lines)

# 取少量資料做訓練

if flag == "train":

lines = lines[0:5000]

elif flag == "dev":

lines = lines[0:500]

elif flag == "test":

lines = lines[0:100]

return lines

def get_train_examples(self, data_dir):

"""see base class."""

return self._create_examples(

self.read_txt(os.path.join(data_dir, "cnews.train.txt"), "train"), "train")

def get_dev_examples(self, data_dir):

"""see base class."""

return self._create_examples(

self.read_txt(os.path.join(data_dir, "cnews.val.txt"), "dev"), "dev")

def get_test_examples(self, data_dir):

"""see base class."""

return self._create_examples(

self.read_txt(os.path.join(data_dir, "cnews.test.txt"), "test"), "test")

def get_labels(self):

"""see base class."""

return ["體育", "娛樂", "家居", "房產", "教育", "時尚", "時政", "遊戲", "科技", "財經"]

def _create_examples(self, lines, set_type):

"""creates examples for the training and dev sets."""

examples =

for (i, line) in enumerate(lines):

if i == 0:

continue

guid = "%s-%s" % (set_type, i)

split_line = line.strip().split("\t")

text_a = tokenization.convert_to_unicode(split_line[1])

text_b = none

if set_type == "test":

label = "體育"

else:

label = tokenization.convert_to_unicode(split_line[0])

inputexample(guid=guid, text_a=text_a, text_b=text_b, label=label))

return examples

main方法裡新增自定義的processor

def main(_):

tf.logging.set_verbosity(tf.logging.info)

processors =

訓練執行命令

python run_cnews_classifier.py --task_name=cnews --do_train=true --do_eval=true --do_predict=false --data_dir=cnews --vocab_file=pretrained_model/chinese_l-12_h-768_a-12/vocab.txt --bert_config_file=pretrained_model/chinese_l-12_h-768_a-12/bert_config.json --init_checkpoint=pretrained_model/chinese_l-12_h-768_a-12/bert_model.ckpt --train_batch_size=32 --max_seq_length=128 --output_dir=model

執行測試命令

python run_cnews_classifier.py --task_name=cnews --do_train=false --do_eval=false --do_predict=true --data_dir=cnews --vocab_file=pretrained_model/chinese_l-12_h-768_a-12/vocab.txt --bert_config_file=pretrained_model/chinese_l-12_h-768_a-12/bert_config.json --init_checkpoint=model/model.ckpt-468 --max_seq_length=128 --output_dir=result

結果info:tensorflow:  eval_accuracy = 0.93386775

info:tensorflow:  eval_loss = 0.33081177

info:tensorflow:  global_step = 468

info:tensorflow:  loss = 0.3427003

bert做文字摘要 BERT文字摘要

簡介 bert是經過預先訓練的transformer模型,已在多個nlp任務上取得了突破性的效能。最近,我遇到了bertsum,這是愛丁堡的liu的 本文擴充套件了bert模型,以在文字摘要上達到最新的分數。在此部落格中,我將解釋本文以及如何使用此模型進行工作。提取摘要 類似於使用螢光筆。我們從原始...

基於bert句向量的簡單文字分類

1.獲取bert的sst2句向量,通過keras構建乙個簡單的基於句向量的文字分類演算法,得益於bert的強大效能,在sst2文字分類的準確率高達81.80,實驗結果比cran,cam,da,textcnn模型都好,訓練速度特別快,收斂也特別快 通過keras實現的簡單句向量分類演算法 from k...

文字分類 08 BERT

大綱概述 資料集合 資料處理 預訓練word2vec模型 word2vec預訓練詞向量 textcnn 模型 charcnn 模型 bi lstm 模型 bi lstm attention 模型 transformer 模型 elmo 預訓練模型 bert 預訓練模型 資料集為imdb 電影影評,總...