# 导入所需文件
import numpy as np
from sklearn.model_selection import ShuffleSplit
from data_utils import ENTITIES, Documents, Dataset, SentenceExtractor, make_predictions
from data_utils import Evaluator
from gensim.models import Word2Vec
# 数据文件读取
data_dir = "./data/train"
ent2idx = dict(zip(ENTITIES, range(1, len(ENTITIES) + 1)))
idx2ent = dict([(v, k) for k, v in ent2idx.items()])
# 训练集,测试集切分与打乱
docs = Documents(data_dir=data_dir)
rs = ShuffleSplit(n_splits=1, test_size=20, random_state=2018)
train_doc_ids, test_doc_ids = next(rs.split(docs))
train_docs, test_docs = docs[train_doc_ids], docs[test_doc_ids]
# 模型参数赋值
num_cates = max(ent2idx.values()) + 1
sent_len = 64
vocab_size = 3000
emb_size = 100
sent_pad = 10
sent_extrator = SentenceExtractor(window_size=sent_len, pad_size=sent_pad)
train_sents = sent_extrator(train_docs)
test_sents = sent_extrator(test_docs)train_data = Dataset(train_sents, cate2idx=ent2idx)
train_data.build_vocab_dict(vocab_size=vocab_size)test_data = Dataset(test_sents, word2idx=train_data.word2idx, cate2idx=ent2idx)
vocab_size = len(train_data.word2idx)
# 构建词嵌入模型
w2v_train_sents = []
for doc in docs:w2v_train_sents.append(list(doc.text))
w2v_model = Word2Vec(w2v_train_sents, size=emb_size)w2v_embeddings = np.zeros((vocab_size, emb_size))
for char, char_idx in train_data.word2idx.items():if char in w2v_model.wv:w2v_embeddings[char_idx] = w2v_model.wv[char]
# 构建双向长短时记忆模型模型加crf模型
import keras
from keras.layers import Input, LSTM, Embedding, Bidirectional
from keras_contrib.layers import CRF
from keras.models import Modeldef build_lstm_crf_model(num_cates, seq_len, vocab_size, model_opts=dict()):opts = {'emb_size': 256,'emb_trainable': True,'emb_matrix': None,'lstm_units': 256,'optimizer': keras.optimizers.Adam()}opts.update(model_opts)input_seq = Input(shape=(seq_len,), dtype='int32')if opts.get('emb_matrix') is not None:embedding = Embedding(vocab_size, opts['emb_size'], weights=[opts['emb_matrix']],trainable=opts['emb_trainable'])else:embedding = Embedding(vocab_size, opts['emb_size'])x = embedding(input_seq)lstm = LSTM(opts['lstm_units'], return_sequences=True)x = Bidirectional(lstm)(x)crf = CRF(num_cates, sparse_target=True)output = crf(x)model = Model(input_seq, output)model.compile(opts['optimizer'], loss=crf.loss_function, metrics=[crf.accuracy])return model
# 双向长短时记忆模型+CRF条件随机场实例化
seq_len = sent_len + 2 * sent_pad
model = build_lstm_crf_model(num_cates, seq_len=seq_len, vocab_size=vocab_size, model_opts={'emb_matrix': w2v_embeddings, 'emb_size': 100, 'emb_trainable': False})
model.summary()
# 训练集,测试集形状
train_X, train_y = train_data[:]
print('train_X.shape', train_X.shape)
print('train_y.shape', train_y.shape)
# 双向长短时记忆模型与条件随机场模型训练
model.fit(train_X, train_y, batch_size=64, epochs=10)
# 模型预测
test_X, _ = test_data[:]
preds = model.predict(test_X, batch_size=64, verbose=True)
pred_docs = make_predictions(preds, test_data, sent_pad, docs, idx2ent)
# 输出评价指标
f_score, precision, recall = Evaluator.f1_score(test_docs, pred_docs)
print('f_score: ', f_score)
print('precision: ', precision)
print('recall: ', recall)
# 测试样本展示
sample_doc_id = list(pred_docs.keys())[3]
test_docs[sample_doc_id]
# 测试结果展示
pred_docs[sample_doc_id]

以上代码全部来自于《阿里云天池大赛赛题解析(深度学习篇)》这本好书,十分推荐大家去阅读原书!

阿里云天池大赛赛题(深度学习)——人工智能辅助构建知识图谱(完整代码)相关推荐

  1. 阿里云天池大赛赛题(机器学习)——O2O优惠券预测(完整代码)

    目录 赛题背景 全代码 算法包及全局变量 工具函数 训练及结果输出 算法分析 调参 整合及输出结果 赛题实践 结果生成 绘制学习曲线 参数调优 赛题背景 O2O行业天然关联着数亿消费者,各类App每天 ...

  2. 阿里云天池大赛赛题(机器学习)——工业蒸汽量预测(完整代码)

    目录 赛题背景 全代码 导入包 导入数据 合并数据 删除相关特征 数据最大最小归一化 画图:探查特征和标签相关信息 对特征进行Box-Cox变换,使其满足正态性 标签数据统计转换后的数据,计算分位数画 ...

  3. 阿里云天池大赛赛题解析――深度学习篇

    作者:天池平台 出版社:电子工业出版社 品牌:电子工业出版社 出版时间:2021-09-01 阿里云天池大赛赛题解析――深度学习篇

  4. 阿里云天池大赛赛题解析——深度学习篇

    阿里云天池大赛赛题解析--深度学习篇 (豆瓣)图书阿里云天池大赛赛题解析--深度学习篇 介绍.书评.论坛及推荐 https://book.douban.com/subject/35596114/

  5. 阿里云天池大赛赛题解析(深度学习篇)--阅读笔记1--赛题一

    阿里云天池大赛赛题解析(深度学习篇)–阅读笔记1 [x]表示遇到不懂的知识,将在[知识补充]给出具体讲解. 文章目录 阿里云天池大赛赛题解析(深度学习篇)--阅读笔记1 前言 赛题一 瑞金医院MMC人 ...

  6. 阿里云天池大赛赛题(深度学习)——视频增强(完整代码)

    目录 赛题背景 全代码 导入工具包 读取图片 实现FSRCNN网络 FSRCNN FSRCNN模型训练 FSRCNN模型验证 FSRCNN模型预测 保存图片查看 ESPCN 实现ESPCN网络 ESP ...

  7. 【赠书】阿里云天池大赛赛题解析,深度学习篇!

    ‍‍ 阿里云天池作为国内知名的竞赛平台和AI社区,自诞生以来就一直秉持着让更多人公平获得大数据的理念.也正因此,天池每场经典赛事沉淀的课题和数据集都会永久保留和开放.截至目前,天池平台已举办了超过20 ...

  8. 阿里云天池大赛赛题(机器学习)——天猫用户重复购买预测(完整代码)

    目录 赛题背景 全代码 导入包 读取数据(训练数据前10000行,测试数据前100条) 读取全部数据 获取训练和测试数据 切分40%数据用于线下验证 交叉验证:评估估算器性能 F1验证 Shuffle ...

  9. 阿里云天池大赛赛题(机器学习)——阿里云安全恶意程序检测(完整代码)

    目录 赛题背景 全代码(ML 和 DL) 特征工程进阶与方案优化 代码 特征工程进阶部分 基于LightGBM 的模型验证 模型测试 深度学习解决方案:TextCNN建模 代码 数据读取 数据预处理 ...

最新文章

  1. 今天有了自己得博客,心情不错。
  2. linux nice值_linux系统管理之交互式企业站点(连载)
  3. 别用这种方式聊天,你都不知道自己是怎么聊死的
  4. Java 异常处理入门
  5. npm/cnpm install是啥意思
  6. 订阅mysql的二进制日志_MySQL二进制日志
  7. java ceilingentry_java.util.TreeMap.ceilingKey()方法实例
  8. ApsaraDB for SQL Server 混合云场景一种解决方案
  9. 3.业务架构·应用架构·数据架构实战 --- 战略驱动的业务架构设计
  10. TikZ从零开始(一)——实例之受力分析图绘制
  11. 相见恨晚的英语学习方法!百万人读过!
  12. Spring源码解析之AOP篇(一)----代理模式详解
  13. macbook proa1708_苹果a1708是哪一年的
  14. python——列表定义及方法
  15. 用户体验五要素_【产品经理】如何理解“用户体验要素”5层模型?
  16. Laravel第三方登录开发之实现QQ登录
  17. msp fet430uif驱动
  18. DBSync数据库同步工具
  19. Spark综合大作业:RDD编程初级实践
  20. 作家助手macos_我们正在寻找一般兴趣作家

热门文章

  1. mac 类似matlab,10款Mac上科研人员必备的科研工具推荐和下载 | 玩转苹果
  2. 区块链项目 - 2 工作量证明
  3. sendmail配置详解
  4. 局域网arp攻击_图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”...
  5. linux下查看服务器的cpu、内存大小、硬盘大小
  6. 铿锵玫瑰回来了 男足还是臭脚吗
  7. 怎么做接口自动化的?
  8. windows查看端口
  9. 驾考题库API接口,免费好用
  10. python学习:向Firebird数据库表中插入数据