文字情感分析是對文字中的某段已知文字的兩極性進行分類,判斷出此文字中表述的觀點是積極的、消極的、還是中性的情緒。
目前的研究方法主要有兩類:一種是基於情感詞典的方法,另一種是基於機器學習的方法。前者需要用到標註好的情感詞典(英文/中文),通過情感詞的褒貶性判斷文字的情感傾向。後者是將傳統的文字分類方法如樸素貝葉斯(nb)、k近鄰(knn)、最大熵、支援向量機(svm)等演算法應用於情感分類。需要大量的人工標註的語料作為訓練集,通過提取文字特徵,構建分類器來實現情感的分類。
在各種分類演算法中,我選擇了k-nearest neighbor(knn) 最鄰近分類演算法進行簡單的學習了解。knn分類演算法的思路是:如果乙個樣本在特徵空間中的k個最相似的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別。核心思想俗稱「隨大流」,基於例項的學習(instance-based learning)和懶惰學習(lazy learning)。懶惰學習:指的是在訓練是僅僅是儲存樣本集的資訊,直到測試樣本到達是才進行分類決策。
knn演算法的優缺點如下:
優點:(1)簡單、易實現、易理解、無需引數估計及訓練;
(2)適用於對稀有時間進行分類;
(3)特別適用於多分類問題(multi-modal,分類物件具有多個類別標籤),比svm表現要好。
缺點:(分類)
(1)當樣本不平衡時,如乙個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入乙個新樣本時,該樣本的k個鄰居中大容量類的樣本 占多數。 改進方法:採用權值,與該樣本距離小的鄰居權值大;
(2)計算量較大,對每乙個待分類的樣本都要計算它與全體已知樣本的距離進行排序繼而求得k個最近鄰點。目前常用的改進方法,事先對已知樣本點進行剪輯,去除對分類作用不大的樣本。該改進演算法比較適用於容量大的類域,而容量較小的類域容易產生誤分。
乙個簡單的knn演算法的例子(python)如下:
1.importnumpyas np
2.from
sklearnimportneighbors
#需要載入numpy,sklearn包,這兩個都是機器學習或資料探勘常用的包。
5.
knn = neighbors.kneighborsclassifier() #取
得knn分類器
6.
data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]]) #data
對應著打鬥次數和接吻次數
7.
labels = np.array([1,1,1,2,2,2]) #labels
則是對應romance和action
8.
knn.fit(data,labels)
#匯入資料進行訓練
9.print(knn.predict([[18,90]])) #
傳入引數為多維陣列
假設電影資料如下:
電影名稱
打鬥次數
接吻次數
電影型別
a
3104
romance
b
2100
romance
c181
romance
d
10110
action
e995
action
f982
action
未知
1890
待求注:標紅色的未知電影是需要進行**屬於浪漫片還是動作片。
將資料中的「打鬥次數」屬性標記為x,「接吻次數」標記為y,這樣上述資料都能化為座標軸中的一點;再將所有點與「未知」的點g進行距離計算,因為這個例子是二維的,因此這裡使用
如果是多維的話,可以使用:
a:20
b:18
c:19
d:115
e:117
f:118
因此可以看出,最近的三個點是abc三點,而abc三點都是romance型別。
引申:如果abc中三個電影分類有乙個不是romance怎麼辦。遵循少數服從多數的投票法則(majority-voting),讓未知例項歸類為最鄰近樣本中最多數的類別。
NLP文字情感分析資料收集
基於tensorflow中文情感分析 後續再調研更新的模型 分析 這幾個 其中三個的資料集都是中文繁體,可以用翻譯軟體翻譯成簡體作為訓練資料。上邊的第三個 比較簡單,易於實現。a.傳統方法 利用積極消極詞典進行打分分類 b.基於機器學習的文字分類方法 基於特徵,利用文字分類模型。在進行文字分類過程中...
NLP之情感資訊抽取
情感資訊抽取是一種關於細粒度文字的情感分析技術,旨在抽取情感文字中有價值的情感資訊。情感資訊抽取研究的主要問題集中在兩個方面 抽取觀點持有者 opinion holder 和抽取評價物件 opinion target 相對基於非監督學習的抽取方法,基於監督學習的評價物件抽取方法起步較晚。2006針對...
Python 情感分析
今天修改了情感分析的程式發現之前有一些不足。這個最簡單的實現乙個string情感分析的小函式,載入了積極詞典,消極詞典,程度詞典,以及一些反轉詞等的詞典。這裡我沒有做符號的分析和判斷,因為的東西暫時用不到,需要的童鞋可以自己新增。import jieba import cpickle as pick...