命名实体消歧的代码实现
将句中识别的实体与知识库中实体进行匹配,解决实体歧义问题。 可利用上下文本相似度进行识别。
本文准备了两个测试数据集,entity_list.csv是50个实体,valid_data.csv是需要消歧的语句。
结果提交在submit目录中,命名为entity_disambiguation_submit.csv。
格式为:第一列是需要消歧的语句序号,第二列为多个“实体起始位坐标-实体结束位坐标:实体序号”以“|”分隔的字符串。
需要进行实体消歧的语句如下:
实体类别如下:
下面讲解具体的实现步骤:
1.导入数据
import jieba
import pandas as pd# TODO:将entity_list.csv中已知实体的名称导入分词词典
entity_data = pd.read_csv('../data/entity_disambiguation/entity_list.csv', encoding = 'utf-8')# TODO:对每句句子识别并匹配实体
valid_data = pd.read_csv('../data/entity_disambiguation/valid_data.csv', encoding = 'gb18030')
- 建立关键词组
将需要进行实体消歧的实体存进keyword_list
import collectionss = ''
keyword_list = []
for i in entity_data['entity_name'].values.tolist():s += i + '|'
for k,v in collections.Counter(s.split('|')).items():if v > 1:keyword_list.append(k)
- 生成tfidf矩阵
from sklearn.feature_extraction.text import TfidfVectorizertrain_sentence = []
for i in entity_data['desc'].values:train_sentence.append(' '.join(jieba.cut(i)))vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(train_sentence)
- 获取包含关键词的句子中关键词所属的entity_id
import numpy as np
from sklearn.metrics.pairwise import cosine_similaritydef get_entityid(sentence):id_start = 1001 a_list = [' '.join(jieba.cut(sentence))]res = cosine_similarity(vectorizer.transform(a_list),X)[0]top_idx = np.argsort(res)[-1]return id_start + top_idx
- 将计算结果存入文件
row = 0
result_data = []
neighbor_sentence = ''
for sentence in valid_data['sentence']:res = [row]for keyword in keyword_list:if keyword in sentence:# 查询关键词在句子中的索引k_len = len(keyword)ss =''for i in range(len(sentence)-k_len+1):if sentence[i:i+k_len] == keyword:s = str(i) + '-' +str(i+k_len) + ':' # 拿到 x-x:if i > 10 and i + k_len < len(sentence)-9:neighbor_sentence = sentence [i-10:i+k_len+9]elif i < 10:neighbor_sentence = sentence [:20]elif i + k_len > len(sentence)-9:neighbor_sentence = sentence [-20:]s += str(get_entityid(neighbor_sentence)) # 拿到 x-x:idss += s + '|' # 拿到 x-x:id|x-x:idres.append(ss[:-1]) # 拼接成[0, 'x-x:id|x-x:id']result_data.append(res)row += 1
pd.DataFrame(result_data).to_csv('../submit/entity_disambiguation_submit.csv', index=False)
7.最后我们可以打印一下保存的结果
pd.read_csv('../submit/entity_disambiguation_submit.csv')
打印结果如下
格式为: 起始位置-结束位置|实体类别
我们可以看一下第一条 3-6:1008|109-112:1008|187-190:1008,确实是符合的。
在具体的实现过程中,我们可以通过测试数据的准确率去判断所抽取的字符长度是否合理,调整特征的抽取方式来优化准确率。
以上代码及训练数据已上传至github,有兴趣的同学可以点击这里查看。谢谢!
命名实体消歧的代码实现相关推荐
- 【工程处理技巧一篇】基于半规则数据的命名实体消歧识别【未完】
作者:finallyly 出处:博客园(转载请注明作者和出处) 看到这篇文章的标题,您一定会以为此篇博客要讲解一个何等高深的算法.其实不然,本篇博客旨在分享笔者在处理那些繁杂.冗踏.低端甚至于极其TM ...
- 知识图谱(五)——实体消歧
一.任务概述 多样性--同一实体在文本中会有不同的指称.eg:飞人.帮主.老大和MJ都指美国篮球运动员迈克尔·乔丹 歧义性--相同的实体指称在不同的上下文中可以指不同的实体.eg:迈克尔·乔丹指美国篮 ...
- 【创新实训】BERT4EL,基于文本相似度的实体消歧实现
任务描述 现有douban.mtime.maoyan三个来源的电影,包含名称.简介.导演.演员.类型等等属性. 需要相同的电影融合为一个电影条目,其中maoyan数量很少,可以合并到mtime中. 参 ...
- 信息抽取之实体消歧,统一
1.前言 信息抽取相关内容可以参考信息抽取简介 和关系抽取详解 2.实体消歧的本质 如小米,它是一个实体,在有些句子中表示"小米公司",但在某些语句下它表示一种谷物 又比如: 怎么 ...
- 【NLP】BiLSTM 命名实体识别 手写代码
[参考:pytorch_BiLSTM 命名实体识别 手写代码_哔哩哔哩_bilibili] [参考:shouxieai/nlp-bilstm_crf-ner: nlp-bilstm+crf-ner] ...
- nlp(贪心学院)——实体消歧、实体统一、指代消解、句法分析
任务212:Entity Disambiguation (实体消歧)介绍 小米是公司还是吃的? 苹果是公司还是吃的? 根据左边的上下文找出左边的James Craig到底是右边(1)(2)(3)哪个J ...
- 实体统一,实体消歧, 指代消解
指代消解:比较难,目前还没有得到很好的结果.
- 命名实体如何进行概念消歧?
1 引言 命名实体概念消歧是命名实体消歧(英语:Named Entity Disambiguation)的一个重要研究子领域(命名实体概念可见本文3.1章).什么叫概念消歧了?在这里举一个简单例子进行 ...
- 文献阅读课10-Neural Relation Extraction for Knowledge Base Enrichment(提取+嵌入+消歧+规范化联合模型,实体已知,仅关系抽取,多词实体)
文章目录 Abstract 1.Introduction 2. 相关工作 2.2 Entity-aware Relation Extraction 3.提出的模型 3.1 Solution Frame ...
- 论文浅尝 | 利用Lattice LSTM的最优中文命名实体识别方法
本文转载自公众号:机器之心. 选自arXiv 作者:Yue Zhang.Jie Yang 机器之心编译 参与:路.王淑婷 近日,来自新加坡科技设计大学的研究者在 arXiv 上发布了一篇论文,介绍了一 ...
最新文章
- 计算机教案word格式模板,用自定义模板编辑教案
- iconv 文件编码转换
- Linux基础知识1
- 组件生命周期管理和通信方案
- 纪中C组模拟赛总结(2019.7.5)
- php中reset函数,PHP reset()函数
- html表单与python交互,HTML表单不能与python一起使用
- css叠层_CSS 中重要的层叠概念
- CCF201803-1 跳一跳
- 人工神经网络简介和单层网络实现AND运算--AForge.NET框架的使用(五)
- 什么是信息系统安全等级保护
- 使用 github + jekyll 搭建个人博客
- 【数字信号调制】基于matlab GUI QPSK调制+解调【含Matlab源码 646期】
- java P1195 口袋的天空
- ctfshow菜狗杯webshell wp
- layui 数字步进器_光音移动设计规范 — 表单类
- 超级电容锂电池混合储能Simulink仿真
- 【SAP-CO】成本中心实际过账
- 云计算技术及应用选择题
- vue实现数字动态翻牌器