在中文地址解析系统中实现BiLSTM和CRF

2024-04-20 15:04:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在用keras和keras\u contrib开发一个bilstmcrf模型,用于中文地址解析任务。 我已经建立了有和没有CRF层的模型,在添加CRF层之后,我得到了奇怪的预测,不断重复相同的错误。你知道吗

Address: ['長', '沙', '灣', '億', '利', '工', '業', '中', '心']
Pred: ['d', 'd', 'd', 'b', 'b', 'b', 'b', 'd', 'b']
Ture: ['d', 'd', 'd', 'b', 'b', 'b', 'b', 'b', 'b']

Address: ['銅', '鑼', '灣', '東', '角', '中', '心']
Pred: ['d', 'd', 'd', 'b', 'b', 'd', 'b']
True: ['d', 'd', 'd', 'b', 'b', 'b', 'b']

字符“C”总是用“d”(地区)标记,但是它应该是建筑物名称的一部分,而建筑物名称应该用“b”(建筑物)标记。心具有中心的含义,应将其视为一个整体。用d和心作为b标记C是无效的。 训练数据总数为4476个,但其中1564个被赋予错误的标签,其中大多数包含错误的标签,即将“cifie”标记为“d”。与没有crf层的模型相比,只有136个预测错误。 我尝试过使用其他激活函数和优化器,改变了嵌入维数或不同层中神经元的数量,但结果要么返回一个无法预测的坏模型,要么返回上面相同的错误。 我想知道我在设置中是否做错了什么,或者可能的解决方法是什么?你知道吗

input = Input(shape=(max_len,))
model = Embedding(input_dim=n_words + 1, output_dim=20, input_length=max_len, mask_zero=True)(input)
model = Bidirectional(LSTM(units=50, return_sequences=True, recurrent_dropout=0.1))(model) 
model = TimeDistributed(Dense(50, activation="relu"))(model)
crf = CRF(n_tags)
out = crf(model)
model = Model(input, out)
model.compile(optimizer="rmsprop", loss=crf.loss_function, metrics=[crf.accuracy])
print(model.summary())
history = model.fit(X_tr, np.array(y_tr), batch_size=32, epochs=10, validation_split=0.1, verbose=1)

Tags: 标记模型名称trueinputmodeladdress错误