2017-09-06 86 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