【发布时间】:2018-12-08 23:19:32
【问题描述】:
我正在尝试创建一个模型来确定句子的主要主题是否是布拉格城市。
句子是斯洛伐克语。即:
“V Prahe bolo dobre”、“Praha je v Česku”...
我的csv 文件如下所示:
Praha je v Česku,1
Chodím do Blavy,0
Neviem čo to je za vetu,0
Pražský hrad,1
正如您所见,布拉格一词有多种形式,因此我不想将 csv 中的每个词都替换为某个数字。我的目标是在字符级别检测它。
试过这个:
train = pandas.read_csv("prague_train_set.csv",
usecols=[ "title"])
train['title'] = train['title'].fillna("None")
train['title'] = le.fit_transform(train['title'])
results = pandas.read_csv("prague_train_set.csv",
usecols=["result"])
# create model
model = Sequential()
model.add(Dense(12, input_dim=1, init='uniform', activation='relu'))
model.add(Dense(10, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(train, results, epochs=150, batch_size=10, verbose=2)
# calculate predictions
predictions = model.predict(train)
但输出就像是完全随机的:
编辑大约 1/4 的标题是关于布拉格的
...
Epoch 145/150
- 0s - loss: 0.1826 - acc: 0.7589
Epoch 146/150
- 0s - loss: 0.1827 - acc: 0.7589
Epoch 147/150
- 0s - loss: 0.1826 - acc: 0.7589
Epoch 148/150
- 0s - loss: 0.1827 - acc: 0.7589
Epoch 149/150
- 0s - loss: 0.1827 - acc: 0.7589
Epoch 150/150
- 0s - loss: 0.1827 - acc: 0.7589
我认为这是因为train['title'] = le.fit_transform(train['title']) 将整个句子转换为数字但不确定。你知道该怎么做吗?
【问题讨论】:
-
你的 csv 文件有多大?
-
大约 5000 篇文章
-
你在做二进制分类,对吧?我将首先使用“binary_crossentropy”作为您的损失函数,而不是均方误差,因为如果它是线性回归/输出层,您会想使用它......在这里使用没有意义。另外,读过 words2vec 吗?
-
如果
le是一个标签转换器,那么你是对的。此外,input_dim=1意味着每个样本都表示为一个具有一个值的向量。如果您不想使用迁移学习并且您有一个非常小的训练集,我会通过标记句子、将标记填充到相同长度以及使用内核大小等于该长度的卷积来帮助分类器。这样你也许能够识别一个句子是否至少包含城市名称。
标签: python tensorflow machine-learning keras