python keras bert训练Sanders Analytics Twitter Sentiment Corpus

Sanders Analytics Twitter Sentiment Corpus是一个推特情感分析的数据集,用bert 模型训练的效果还不错,好像达到了92.6%,这里把代码分享出来。数据集可从这个网址下载:

环境

ubuntu 16.04, keras 2.2, tensorflow-gpu, Kashgari

代码

from kashgari.embeddings import BERTEmbedding
from kashgari.tasks.classification import CNNLSTMModel
from kashgari.corpus import SMP2017ECDTClassificationCorpus
import numpy as np
from nltk.tokenize import RegexpTokenizer
import string
import os
import pandas as pd

root_path=./dataset/Sander_TwitterSentiment_Full

full_dataset = pd.read_csv(os.path.join(root_path,"full_corpus_binary.csv"))
full_dataset.columns = [label,text]

print(full_dataset.head())

def tokenize (text):
    tokens = [word.strip(string.punctuation) for word in RegexpTokenizer(r[a-zA-Z][a-zA-Z0-9]{1,50}).tokenize(text)]
    return tokens

full_dataset[text]=full_dataset[text].apply(lambda x:tokenize(x))

print(full_dataset.head())

train_data = np.array(full_dataset[text])#np.ndarray()
train_x=train_data.tolist()

train_data_y = np.array(full_dataset[label])#np.ndarray()
train_y=train_data_y.tolist()



validation=pd.read_csv(os.path.join(root_path,"test-corpus_binary.csv"))
validation.columns = [label,text]
validation[text]=validation[text].apply(lambda x:tokenize(x))
test_data = np.array(validation[text])#np.ndarray()
test_x=test_data.tolist()
test_data_y = np.array(validation[label])#np.ndarray()
test_y=test_data_y.tolist()
# train_x=full_dataset[text].values
# train_y=full_dataset[label].values
bert_embedding = BERTEmbedding(bert-base-uncased, sequence_length=30)                                   
model = CNNLSTMModel(bert_embedding)

# train_x, train_y = SMP2017ECDTClassificationCorpus.get_classification_data()
model.fit(train_x, train_y, epochs=10,validation_data=(test_x,test_y))
scores=model.evaluate(test_x,test_y)
print("Accuracy:%.2f%%"%(scores[1]*100))

参考文献

[1]. Kashgari.

经验分享 程序员 微信小程序 职场和发展