基于Bi-lstm+attention机制实现经济领域的实体关系抽取(数据及代码实现)

 最近无意中发现了一份某人自己注释的经济领域数据集,但是只是采用了简单的方法进行实体关系抽取,闲来之余,便将新关注的attention机制加以深度学习再一次实现该实体关系抽取,废话不多说,下面开始进入正题;

数据集描述:

该数据集的收集者可能参考了某比赛数据集(竟然有从属关系),定义了5种实体关系,其分别为:股票关系;买卖关系;从属关系;角色关系;合作关系;

其五种数据的关系展示分别如下:

<宣亚国际终止 >收购 <映客 >股票 巨量 封死 跌停  ----股票关系
日前 <永辉超市 >公告 称 <腾讯 >拟 42 亿元 受让 5% 公司 股份 ----买卖关系
e公司 讯 深交所 12 月 18 日 消息 指数 编制 规则 <深圳证券交易所> <深圳证券信息有限公司> 2018 年 1 月 第一个 交易日 深证 成指 深证 100 中小板 指 创业板 指 创新 指数 实施 样本股 定期 调整----从属关系
来源 中国 证券报 · 中证网 中证网 讯 12 月 17 日 中国 证券报 记者< 雅百特> 官网 获悉 公司 12 月 15 日 遭 证监会 行政处罚 一事 雅百特 董事长 <陆永> 发表 公司 投资者 员工 公开 致歉信----角色关系
经济 成 消费 升级 推手 <美柚> <广誉远> 跨界 合作----合作关系

模型构建:

虽然有些关系构建的不是那么精确,但是也确实存在那些关系,于是,我们就构建了词级attention机制+双向LSTM进行关系抽取;

实验环境:python3.5 

词向量采用word2vec进行训练,也可以找训练好的直接用;

核心代码:

def attention(inputs, single_attention_vector=False):#attention机制
    time_steps = K.int_shape(inputs)[1]
    input_dim = K.int_shape(inputs)[2]
    a = Permute((2, 1))(inputs)
    a = Dense(time_steps, activation='softmax')(a)
    if single_attention_vector:
        a = Lambda(lambda x: K.mean(x, axis=1))(a)
        a = RepeatVector(input_dim)(a)

 a_probs = Permute((2, 1))(a)
    output_attention_mul = Multiply()([inputs, a_probs]) 
    return output_attention_mul

def bilstm(X_train, y_train,X_test, y_test):
     inputs = Input(shape=(TIME_STEPS, INPUT_DIM))
    drop1 = Dropout(0.3)(inputs)
    lstm_out = Bidirectional(LSTM(lstm_units, return_sequences=True), name=‘bilstm’)(drop1)
    attention_mul = attention(lstm_out)
    attention_flatten = Flatten()(attention_mul)
    drop2 = Dropout(0.25)(attention_flatten)
    output = Dense(10, activation=‘sigmoid’)(drop2)
    model = Model(inputs=inputs, outputs=output)
   model.compile(optimizer=‘adam’, loss=‘categorical_crossentropy’, metrics=[‘accuracy’])
   print(model.summary())
   print(‘Training————’)
   model.fit(X_train, y_train, epochs=10, batch_size=10)
   print(‘Testing————–’)
   loss, accuracy = model.evaluate(X_test, y_test)
   print(‘test loss:’, loss)
   print(‘test accuracy:’, accuracy)

最终的结果大家可以自行测试;

核心代码在这里已经给大家了,像什么embeding输入啦等等,大家可以自行实现,应该比较简单把!

数据集:经济方面实体关系数据集;大家也可以用其他数据集进行代码算法的测试

代码问题可以联系QQ:525894654

 

你可能感兴趣的:(计算机类,LSTM,keras,人工智能,深度学习)