利用tf idf詞向量和卷積神經網路做文字多分類

2021-09-24 11:19:47 字數 4800 閱讀 2409

import pandas as pd

import numpy as np

from sklearn.feature_extraction.text import tfidfvectorizer, countvectorizer

corpus = [

'this is the first document.',

'this document is the second document.',

'and this is the third one.',

'is this the first document?',

]vectorizer = tfidfvectorizer()

x= vectorizer.fit_transform(corpus)

a=x.toarray()

print(type(x))

print(type(a))

輸出結果: 

import numpy as np

import pandas as pd

import jieba

import re

np.random.seed(1337) # for reproducibility

from keras.datasets import mnist

from keras.utils import np_utils

from keras.utils import to_categorical

from keras.models import sequential

from keras.layers import dense, activation, convolution1d, maxpooling1d, flatten, dropout

from keras.optimizers import adam

data_train=pd.read_excel(r'c:\users\admin\desktop\text_cf\zzyw.xlsx',sheetname='訓練集')

df_data=data_train[['一級','二級','**','四級','五級','六級','投訴詳情描述']]

# 匯入標籤集

df_lables=pd.read_excel(r'c:\users\admin\desktop\text_cf\zzyw.xlsx',sheetname='label')

df_lables.fillna('',inplace=true)

df_lables['標籤'] = df_lables['一級'] + df_lables['二級'] + df_lables['**'] + df_lables['四級'] + df_lables['五級'] + df_lables['六級']

lables_list = df_lables['標籤'].tolist()

print('3:分類標籤字段匯合成功')

df_data.fillna('',inplace=true)

df_data['標籤'] = df_data['一級'] + df_data['二級'] + df_data['**'] + df_data['四級'] + df_data['五級'] + df_data['六級']

df_data = df_data[df_data['投訴詳情描述'] != '']

#標籤表預處理

dig_lables = dict(enumerate(lables_list))

lable_dig = dict((lable,dig) for dig, lable in dig_lables.items())

print(lable_dig)

# 資料集標籤預處理

print('4:資料預處理')

print(len(lable_dig))

# 測試集標籤預處理

data_test=pd.read_excel(r'c:\users\admin\desktop\text_cf\zzyw.xlsx',sheetname='測試集')

data_test.fillna('',inplace=true)

data_test['標籤'] = data_test['一級'] + data_test['二級'] + data_test['**'] + data_test['四級'] + data_test['五級'] + data_test['六級']

data_test = data_test[data_test['投訴詳情描述'] != '']

def seg_sentences(sentence):

# 去掉特殊字元

sentence = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])","",sentence)

sentence_seged = list(jieba.cut(sentence.strip()))

return sentence_seged

corpus =pd.concat([df_data['投訴分詞'],data_test['投訴分詞']]).astype(str).values

vectorizer = tfidfvectorizer()

vectorizer=vectorizer.fit(corpus)

x= vectorizer.transform(df_data['投訴分詞'].astype(str).values)

y= vectorizer.transform(data_test['投訴分詞'].astype(str).values)

num_classes = len(dig_lables)

train_lables = to_categorical(df_data['標籤_數字'],num_classes=num_classes)

a=x.toarray()

#因為我這邊x.shape是(9859, 8120)

引數的計算方式是 : 832=32*5*5+32

10304=64*32*5+64

106434560=25984*4096+4096

4195328=4096*1024+1024

135300=1024*132+132

# evaluate the model with the metrics we defined earlier

y_test_evl=model.predict(x_test)

c=[i.argmax() for i in y_test_evl]

data_test['分類結果_**'] = [dig_lables[dig] for dig in c]

# 準確率

from sklearn import metrics

metrics.accuracy_score(data_test['標籤'],data_test['分類結果_**'])

文字向量化 詞袋模型 TF IDF

對文字資料進行建模,有兩個問題需要解決 模型進行的是數 算,因此需要數值型別的資料,而文字不是數值型別資料。模型需要結構化資料,而文字是非結構化資料。將文字轉換為數值特徵向量的過程,稱為文字向量化。將文字向量化,可以分為如下步驟 對文字分詞,拆分成更容易處理的單詞。將單詞轉換為數值型別,即使用合適的...

向量卷積和神經網格基礎(2)訊號感應

咪付技術帶頭人代豪是向量卷積和神經網格模型的提出者和建立者,本文將簡單闡述向量卷積和神經網格模型的訊號感應方式。訊號的基本感應方式 向量卷積和神經網格模型的訊號感應方式分靜態感應和動態感應兩種方式。當訊號階躍為0時,主要表現為靜態感應 當訊號階躍不為0時,主要表現為動態感應。由於訊號階躍是有方向的,...

詞向量和語言模型

詞向量是用來幹什麼的?有人拿它尋找近義詞或者相關詞,直接根據向量空間裡的距離遠近來判定詞的關係。也有不少早期的工作,直接拿詞向量做特徵,在現有系統中加入詞向量作為特徵。特徵嘛,就是要個多樣性,雖然不知道詞向量包含了什麼資訊,但是說不定就帶著新的資訊,效果就能提公升了。還有大量基於神經網路的工作,拿詞...