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

2021-10-01 02:30:48 字數 3595 閱讀 4924

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

通過keras實現的簡單句向量分類演算法

from keras.callbacks import earlystopping

import numpy as np

from keras.models import sequential

from keras.layers import dense

x_train=np.load(r'c:\users\ma101\desktop\sst2/train_sentence_word.npy'

)x_test=np.load(r'c:\users\ma101\desktop\sst2/test_sentence_word.npy'

)y_train=np.load(r'c:\users\ma101\desktop\sst2/train_label.npy'

)y_test=np.load(r'c:\users\ma101\desktop\sst2/test_label.npy'

)model = sequential(

)model.add(dense(

1, input_shape=

(768,)

, activation=

'sigmoid'

,use_bias=

true))

model.

compile

(loss=

'binary_crossentropy'

, optimizer=

'rmsprop'

, metrics=

['accuracy'])

early_stopping = earlystopping(monitor=

'val_acc'

, patience=

50,mode=

'max'

)history1= model.fit(x_train, y_train, batch_size=

64, epochs=

200, verbose=

1, validation_data=

[x_test, y_test]

,callbacks=

[early_stopping]

)score = model.evaluate(x_test, y_test, verbose=2)

accy=history1.history[

'val_acc'

]print

("accuracy:"

+str

(score)

)print

('val_acc'

,accy)

1.如果是詞向量,輸入的是input_shape=(max_len,embedding_matrix),但是如果輸入的是句向量,則需要input_shape=(embedding_matrix,)或者輸入input_dim=embedding_matrix

2.使用rmsprop優化器比adam,sgd等效果好

優化引數是keras模型編譯引數其中的乙個:

先建立網路模型,使用sgd優化演算法,學習率為0.1,衰減項1e-6,動量0.9,使用nesterov最優梯度優化演算法。模型編譯第乙個引數使用平方誤差作為損失函式,優化演算法使用sgd。

基類keras.optimizers.optimizer(**kwargs)

所有的優化器都來自這個類,支援以下的關鍵字引數:

clipnorm: float >= 0.

注意:這是整合優化器的基類,並不是用來訓練模型的的實際的優化器。以下是幾種常見的優化演算法。

sgd

sgd指stochastic gradient descent,即隨機梯度下降。是梯度下降的batch版本。

對於訓練資料集,我們首先將其分成n個batch,每個batch包含m個樣本。我們每次更新都利用乙個batch的資料,而非整個訓練集

keras.optimizers.sgd(lr=0.01, momentum=0., decay=0., nesterov=false)

引數:

lr: float >= 0. 學習率

momentum: float >= 0. 動量引數更新

decay: float >= 0. 每次迭代更新學習率衰減項

nesterov: boolean. 是否使用nesterov 動量方法.布林型

adagrad上面提到的方法對於所有引數都使用了同乙個更新速率。但是同乙個更新速率不一定適合所有引數。比如有的引數可能已經到了僅需要微調的階段,但又有些引數由於對應樣本少等原因,還需要較大幅度的調動。

adagrad就是針對這一問題提出的,自適應地為各個引數分配不同學習率的演算法。

keras.optimizers.adagrad(lr=0.01, epsilon=1e-6)

以上引數建議使用預設值。

引數:lr: float >= 0. 學習率 epsilon: float >= 0.

adadelta

keras.optimizers.adadelta(lr=1.0, rho=0.95, epsilon=1e-6)

引數:

lr: float >= 0. 學習率.一般選擇預設值

float >= 0.

epsilon: float >= 0. 模糊因子

rmspropkeras.optimizers.rmsprop(lr=0.001, rho=0.9, epsilon=1e-6)

引數:

lr: float >= 0.學習率

rho: float >= 0

epsilon: float >= 0.

adam

lr: float >= 0. 學習率

beta_1, beta_2: floats, 0 < beta < 1. 一般接近於1.

epsilon: float >= 0.

基於支援向量機的文字分類

基於支援向量機svm的文字分類的實現 1 svm簡介 支援向量機 svm 演算法被認為是文字分類中效果較為優秀的一種方法,它是一種建立在統計學習理論基礎上的機器學習方法。該演算法基於結構風險最小化原理,將資料集合壓縮到支援向量集合,學習得到分類決策函式。這種技術解決了以往需要無窮大樣本數量的問題,它...

基於DL的文字分類綜述

新聞分類系統可以幫助使用者實時獲取感興趣的資訊。識別新興新聞主題並根據使用者興趣推薦相關新聞是新聞分類的兩個主要應用。主題分析試圖通過識別文字主題來自動從文字中獲取含義。主題分類是主題分析最重要的組成技術之一。主題分類的目的是為每個文件分配乙個或多個主題,以使其更易於分析。問答系統有兩種型別 抽取式...

文字分類的python實現 基於SVM演算法

svc的懲罰引數c 預設值是1.0。c越大,對誤分類的懲罰增大,趨向於對訓練集全分對的情況,這樣對訓練集測試時準確率很高,但泛化能力弱。c值小,對誤分類的懲罰減小,允許容錯,泛化能力較強。儘管tf idf權重有著非常廣泛的應用,但並不是所有的文字權重採用tf idf都會有較好的效能。在有些問題上,採...