自然語言處理 搭建文字分類器

2021-08-09 22:15:09 字數 981 閱讀 3846

乙個完整的文字分類器主要由兩個階段,:一是將文字向量化,將乙個字串轉化成向量形式;二是將向量喂到分類器,包括svm, cnn,lstm等等。

這邊做的專案其實階段用的是 tf-idf 來進行文字向量化,使用卡方校驗(chi-square)來降低向量維度,使用liblinear(採用線性核的svm) 來進行分類。而這裡所述的文字分類器,使用lsi (latent semantic analysis, 隱性語義分析) 來進行向量化, 不需要降維, 因為可以直接指定維度, 然後使用線性核svm進行分類。lsi的部分主要使用gensim來進行, 分類主要由sklearn來完成。

文件向量化

這部分的內容主要由gensim來完成。將各文件分詞,從字串轉化為單詞列表 統計各文件單詞,生成詞典(dict) 利用詞典將文件轉化成詞頻表示的向量,即指向量中的各值對應於詞典中對應位置單詞在該文件中出現次數 再進行進一步處理,將詞頻表示的向量轉化成tf-idf表示的向量 由tf-idf表示的向量轉化成lsi表示的向量。

文件分詞及預處理,之後統計單詞,生成詞典,再將文件轉化成按詞頻表示的向量。最後一部分**如下:

2.分類問題

這邊分類的方法有很多,主要還是svm去做的,線性的kernel和rbf kernel都做了相關的嘗試。

過程中會遇到乙個問題,從gensim到sklearn的格式轉換,gensim中的corpus資料格式,sklearn是無法識別的。即gensim中對向量的表示形式與sklearn要求的不符。

在gensim中,向量是稀疏表示的。例如[(0,5),(6,3)] 意思就是說,該向量的第0個元素值為5,第6個元素值為3,其他為0.但是這種表示方式sklearn是無法識別的。sklearn的輸入一般是與numpy或者scipy配套的。如果是密集矩陣,就需要輸入numpy.array格式的; 如果是稀疏矩陣,則需要輸入scipy.sparse.csr_matrix.由於後者可以轉化成前者,而且gensim中向量本身就是稀疏表示,所以這邊只講如何將gensim中的corpus格式轉化成csr_matrix.

統計自然語言處理 文字分類

文字表示有向量空間模型,片語表示法,概念表示法 目前文字通常採用向量空間模型表示 向量空間模型 vsm 給定乙個文件d t1,w1 t2,w2 tn,wn d符合以下兩條約定 1 各個特徵項tk 1 k n 互異 即沒有重複 2 各個特徵項tk無先後順序關係 即不考慮文件的內部結構 在以上兩個約定下...

五 自然語言處理中的文字分類

機器學習的過程是訓練模型和使用模型的過程,訓練就是基於已知資料做統計學習,使用就是用統計學習好的模型來計算未知的資料。機器學習分為有監督學習和無監督學習,文字分類也分為有監督的分類和無監督的分類。有監督就是訓練的樣本資料有了確定的判斷,基於這些已有的判斷來斷定新的資料,無監督就是訓練的樣本資料沒有什...

NLP自然語言處理 文字分類之評價指標

準確率關注整體效果,只適合均衡的資料。準確率公式如下 a cc urac y 預測 正確的樣 本數總樣 本數 accuracy frac accura cy 總 樣本數預 測正確的 樣本數 資料不均衡時使用以下的評價指標。精確率關注模型 得準不准。精確率公式如下 p re cisi on 預 測正確...