2017-09-06 16 views
1

我有csv中的原始數據,與具有公司名稱的列名稱w1相同。用於ML字符串匹配的神經網絡RNN算法

w1 
abcd reit pvt ltd 
abcd reit private ltd 
ac abcd pte limited 
abcd reit pvt ltd 
abcd singapore private limited company 
abcd reit pvt ltd company 
abcd reit private limited company 
abcd reit private limited 
abcd reit private ltd 
abcd pte limited 
abcd reit pvt ltd company 
abcd singapore private limited company 
abcd reit pvt ltd company 
abcd reit private limited company 

我正在寫一個神經網絡ML程序,它將自行學習以識別類似的公司名稱。只使用ML算法如神經網絡,RNN等

我創建了一個列標籤來歸類屬於同一組的相似名稱,以便我的數據集變成。

w1         label 
abcd reit pvt ltd      1 
abcd reit private ltd     1 
ac abcd pte limited      2 
abcd reit pvt ltd      1 
abcd singapore private limited company 3 
abcd reit pvt ltd company    1 
abcd reit private limited company  1 
abcd reit private limited    1 
abcd reit private ltd     1 
abcd pte limited       1 
abcd reit pvt ltd company    1 
abcd singapore private limited company 3 
abcd reit pvt ltd company    1 
abcd reit private limited company  1 

我創建哈希矩陣,但我不能這個矩陣饋送到神經網絡。

附上了我的代碼

library(readxl) 
data <- read_excel("~/data.xlsx") 
data1<-as.data.frame(data) 
library(FeatureHashing) 
library(Matrix) 

############### split data test train 
library(caTools) 
set.seed(101) 
data2<-as.data.frame(data1) 
# Create Split (any column is fine) 
split = sample.split(data2$label, SplitRatio = 0.70) 

# Split based off of split Boolean Vector 
train = subset(data2, split == TRUE) 
print(head(train,1)) 
test = subset(data2, split == FALSE) 

hash.size(train) 
d1<- hashed.model.matrix(label~ split(w1, delim= " "), 
         data = train, hash.size = 16, signed.hash = FALSE , 
create.mapping = TRUE) 

這裏我有問題,因爲我不知道如何將這種D1哈希矩陣當我運行輸入這個哈希矩陣的神經網絡,我得到錯誤送入neuralnet ,

####### test hash input to neural net 
nn <- neuralnet(
label~w1, 
data=train, hidden=2, err.fct="sse", 
linear.output=TRUE) 

predicted.nn.values <- compute(nn,test[1:1]) 
plot(nn) 

是否有任何其他方式做到這一點,而且我不知道如何將這種D1哈希矩陣送入神經網絡

+0

訓練數據集有多大?模型的輸入是什麼?我假設它會以2個公司的字符串表示形式出現,並且網絡的輸出結果可能是相同的? – shark8me

+0

培訓數據集包含公司名稱的1000條記錄,無論是像pvt ltd這樣的縮寫,還是完整的,我的目標是以最佳概率匹配兩個公司名稱 – avinash

+0

是的,你是正確的概率匹配,,但只使用機器學習技術 – avinash

回答

0

我覺得一個RNN是不正確的工具這裏因爲公司名稱是短序列。可以先嚐試一個更簡單的模型。

段落向量(Word2vec的一般形式)可用於生成公司名稱的高維表示。

假設段向量給出了一個300維的實值向量,那麼模型的輸入可以是一對公司名稱(由300 + 300代表)向量。輸出應該是二進制的,其中1表示同一公司,0表示它們不同。

+0

這是正確的 – avinash

+0

dtMatrix < - create_matrix(DATA2) 容器< - create_container(dtMatrix,DATA2 $標籤,trainSize = 1:11, 處女= FALSE) STR(dtMatrix) #訓練SVM模型 模型< - train_model(container,「SVM」,kernel =「linear」,cost = 1) model2 < - train_model(container,「NNET」,kernel =「linear」,cost = 1) predictionData < - list(「htsg reit pvt有限公司「, 」htsg singapore private limited company「, 」HTSG pte limited「, 」htsg pte。systems「, 」ac HTSG pte limited「) – avinash

+0

#predictionData < - list(」dangerous be「,」donated many 「,」大部分「,」電視「); 庫(TM) 庫(RTextTools) #trace( 「create_matrix」,編輯= T) 語料庫< - 語料庫(VectorSource(predictionData)) ˚F<-TermDocumentMatrix(語料庫) STR(predictionData) PD < - 如。matrixSize(predictionData) predMatrix < - create_matrix(predictionData,originalMatrix = dtMatrix) predSize = length(predictionData) predictionContainer < - create_container(predMatrix,labels = rep(0,predSize),testSize = 1:predSize,virgin = FALSE) 結果< - classify_model(predictionContainer,模型2) 結果 情節(結果) # – avinash