文字分類 文字情緒識別(自己理解用)

2021-10-03 11:39:07 字數 1998 閱讀 7992

model=nn.sequential(

nn.linear(

7139,10

),#實現從輸入層到隱含層的線性對映

nn.relu(),

#在隱含層的非線性部分,是非線性啟用函式

nn.linear(10,

2),#實現從隱含層到輸出層的線性對映

nn.logsoftmax(dim=1)

,#用於輸出分類的softmax函式,輸出值是概率值,取最大的值

}

3.資料處理和訓練

為了防止過擬合,我們將資料分成了訓練集(training)、驗證集(validation)、測試集(test)

訓練集訓練資料

驗證機集調整超引數,以判斷是否要停止訓練

測試集對模型進行測試,評判模型的好壞

cost=torch.nn.nllloss(

)#損失函式為交叉熵

#優化演算法是adam,可以自動調節學習率

optimizer=torch.optim.adam(model.parameter(

),lr=

0.01

)#定義迴圈訓練 迴圈10個epoch

records=

losses=

for epoch in

range(10

):for i,data in

enumerate

(zip

(train_data, train_label)):

#在每乙個epoch中對資料進行分批次迴圈

x,y=data#讀入乙個batch的資料

#調整為標準的資料格式

x=variable(torch.floattensor(x)

,view(1,

-1))

y=variable(torch.longtensor(np.array(

[y])))

optimizer.zero_grad(

)#清空優化器的梯度

predict=model(x)

#模型**

loss=cost(predict,y)

#計算損失函式)[

0])#將損失函式的數值加入到列表中

loss.backward(

)#開始進行梯度反向傳播

optimizer.step(

)#開始對引數進行進一步優化

if i%

3000==0

: val_losses=

rights=

#在驗證集上實驗

for j, val in

enumerate

(zip

(valid_data,valid_label)):

x,y=val

x=variable(torch.floattensor(x)

,view(1,

-1))

y=variable(torch.longtensor(np.array(

[y])))

predict=model(x)

#呼叫rightness函式計算準確度

right=rightness(predict,y)

loss=cost(predict,y))[

0])#將驗證集上的平均準確度計算出來

right_radio=

1.0*np.

sum(

[i[0

]for i in rights]

)/np.

sum(

[i[1

]for i in rights]

)print

('第{}輪,訓練損失:,驗證損失:,驗證準確率:'

.format

(epoch,np.mean(losses)

,np.

[np.mean(

),np.mean(val_losses)

,right_ratio]

)

文字分類 libsvm

關於 libsvm 的介紹以及相關 網上很多,感興趣可以找找。這是libsvm 這裡主要是針對之前學習過的幾種特徵篩選演算法用 libsvm 進行比較。採用搜狗實驗室的資料,選擇商業類文字 1001 篇,娛樂類文字 1208 篇,測試集 29904 篇。分別採用文件頻次,卡方分布,互資訊,資訊增益來...

文字分類四

下面是使用knn演算法來做的。資料均是由前面的程式生成的。做完這個之後,就是將每一步整合起來。然後再盡可能的優化,使得程式效率更好。然後可以嘗試不同的特徵選擇演算法和分類演算法,當然最後要是能有自己的一些小小改進就好了。不過至少有了乙個還可以的結果了。include include include ...

文字分類概論

通過新增特定規則做分類任務,費時費力,覆蓋的範圍和準確率都非常有限。維護停用詞表 包括高頻的代詞連詞介詞等 特徵提取過程中刪除停用表 現的詞等 1.詞袋模型 one hot編碼 缺點 高緯度 高稀疏 無法編碼上下文的關聯資訊,無法表達語義資訊。2.向量空間模型 通過特徵選擇降低維度,特徵權重計算增加...