brightgems / entity_linking

实体链接demo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

实体链接demo

简介

实体链接的demo,暂时支持百度百科的排序。

使用腾讯开源的800万词向量。使用lmdb_embeddings在线对文档进行embedding。

基于wmd距离的baseline方法

基本模块

1实体召回:

3种召回模式。一是召回百科词条/百科多义项/百科搜索的相关词条;二是直接用实体名进行召回,可以根据ES分数进行topN召回;三是根据映射字典对key采用精确匹配或模糊匹配进行召回,映射字典主要是通过规则得到的简称-全称字典。

2文档特征提取:

使用腾讯开源的800万词向量和fastext字向量对词进行embedding。细节:可以载入部分词典辅助jieba分词,这样分词更加准确。词向量读取使用lmdb-embeddings包。 对比:

#sentence='本期看点:杜淳倾情演绎泥石流版傻白甜,一心寻找武功秘籍不问世事,吃瓜群众表示很喜欢这个“追风少年”。大潘带上时尚假发,回>归学生时代猛追靓妹,却遭马苏连连补刀“太丑”。沙溢藏钱都不能走寻常路,程野表演直把自己逗笑场。更多花絮全搜罗,《喜剧艺能榜》与你一起分享。'
#不导入腾讯字典
['本期', '看点', '杜淳', '倾情', '演绎', '泥石流', '版', '傻', '白甜', '一心', '寻找', '武功', '秘籍', '问世', '事', '吃瓜', '群众', '表示', '喜欢', '“', '追风', '少年', '”', '大潘', '带上', '时尚', '假发', '回归', '学生', '时代', '猛追', '靓妹', '遭', '马苏', '连连', '补刀', '“', '太丑', '”', '沙溢藏', '钱', '不能', '走', '寻常路', '程野', '表演', '直', '逗笑', '场', '花絮', '全', '搜罗', '喜剧', '艺能', '榜', '一起', '分享']
#导入腾讯字典
['本期看点', '杜淳', '倾情演绎', '泥石流', '版', '傻白甜', '一心', '寻找', '武功秘籍', '不问世事', '吃瓜群众', '表示', '很喜欢', '“', '追风少年', '”', '大潘', '带上', '时尚假发', '回归', '学生时代', '猛追', '靓妹', '遭', '马苏', '连连', '补刀', '“', '太丑', '”', '沙溢', '藏钱', '都不能', '走', '寻常路', '程野', '表演', '直把', '逗笑', '场', '更多花絮', '全', '搜罗', '喜剧', '艺能', '榜', '与你一起', '分享']
#载入腾讯字典不仅分词更准确,并且还有这些明星们的词向量。

3实体排序

依据输入context和待排序实体的description来计算wmd距离。依赖pyemd包。

运行简单例子

使用前需先把lmdb词向量文件放入data目录下。文件在datanlp01下的/home/luyiming/entity_linking/lmdb_emb路径。

cd entity_rank
python wmd_baseline.py

例子

分值越低越好

context : 小米的用户忠诚度明显回升,但华为吸引力依旧是第一
mention : 小米
{
 "current_semantic": "",
 "tags": [
  "网站",
  "组织机构",
  "社会",
  "公司"
 ],
 "infobox": {
  "公司名称": "北京小米科技有限责任公司[7]",
  "外文名称": "MI",
  "总部地点": "北京市海淀区清河中街68号 华润五彩城写字楼[8]",
  "成立时间": "2010年3月",
  "经营范围": "电器,数码产品及软件",
  "公司类型": "有限责任公司",
  "公司口号": "探索黑科技,小米为发烧而生[9]",
  "年营业额": "1146亿元(2017年)[5]",
  "员工数": "约14000人(2017年)[10]",
  "董事长兼CEO": "雷军",
  "总裁": "林斌",
  "市值": "4309.64亿[11]",
  "股票代码": "01810[11]",
  "企业类型": "民营企业"
 },
 "description": "北京小米科技有限责任公司成立于2010年3月3日,是一家专注于智能硬件和电子产品研发的移动互联网公司,同时也是一家专注于高端智能手机、互联网电视以及智能家居生态链建设的创新型科技企业。为发烧而生”是小米的产品概念。小米公司创造了用互联网模式开发手机操作系统、发烧友参与开发改进的模式。小米还是继苹果、三星、华为之后第四家拥有手机芯片自研能力的科技公司。“让每个人都能享受科技的乐趣”是小米公司的愿景。小米公司应用了互联网开发模式开发产品的模式,用极客精神做产品,用互联网模式干掉中间环节,致力让全球每个人,都能享用来自**的优质科技产品。小米已经建成了全球最大消费类IoT物联网平台,连接超过1亿台智能设备,MIUI月活跃用户达到1.9亿。小米系投资的公司接近400家,覆盖智能硬件、生活消费用品、教育、游戏、社交网络、文化娱乐、医疗健康、汽车交通、金融等领域。2018年2月,Google 联合 WPP 和凯度华通明略发布的《2018 年**出海品牌 50 强报告》显示,小米在**出海品牌中排名第四,仅次于联想、华为和阿里巴巴。小米已进入74个国家,2017年底,在15个国家处于市场前5位。2018年第一季度,小米在印度的市场份额已超过30%,遥遥领先,成为第一名。2018年7月9日,正式登陆香港交易所主板。小米2018年出货量1.2亿台以上,占比8.7%,排名全球第四、**厂商第二,逆势上扬32.2%。",
 "related_entry": [
  "产品",
  "教育",
  "联想",
  "手机操作系统",
  "苹果",
  "游戏",
  "互联网电视",
  "智能硬件",
  "阿里巴巴",
  "MIUI",
  "生活消费",
  "智能家居",
  "娱乐",
  "社交网络",
  "小米科技有限责任公司",
  "文化",
  "物联网",
  "金融",
  "汽车",
  "三星",
  "发烧友",
  "华为",
  "创新",
  "Google",
  "小米公司",
  "医疗",
  "健康",
  "互联网",
  "交通"
 ]
}
score:0.5363
{
 "current_semantic": "禾本科狗尾草属一年生草本",
 "tags": [
  "生物物种"
 ],
 "infobox": {
  "中文名": "小米",
  "外文名": "Millet",
  "别称": "粟米",
  "主要原料": "谷子",
  "是否含防腐剂": "否",
  "主要营养成分": "蛋白质,脂肪,可溶性淀粉,胡萝卜素",
  "主要食用功效": "养胃,健脾",
  "适宜人群": "所有人群",
  "储藏方法": "阴凉干燥处",
  "界": "植物界",
  "门": "被子植物门 Angiospermae",
  "纲": "单子叶植物纲 Monocotyledoneae",
  "目": "禾本目 Graminales",
  "科": "禾本科 Gramineae",
  "属": "狗尾草属 Setaria",
  "种": "粱 Setaria italica"
 },
 "description": "小米,原名:粟,也称作粱、狗尾草、黄粟、粟米,拉丁文名:Setaria italica (L.) Beauv. var. germanica (Mill.) Schrad. 禾本科、狗尾草属一年生草本,须根粗大,秆粗壮,粟是谷子去皮后的结果,谷子是谷类植物,禾木本的一种,粟的营养价值很高,含丰富的蛋白质和脂肪和维生素,它不仅供食用,入药有清热、清渴,滋阴,补脾肾和肠胃,利小便、治水泻等功效,又可酿酒。其茎叶又是牲畜的优等饲料,它含粗蛋白质5-7%,超过一般牧草的含量1.5-2倍,而且纤维素少,质地较柔软,为骡、马所喜食;其谷糠又是猪、鸡的良好饲料。(文中图片均取自**植物图库)",
 "related_entry": [
  "狗尾草",
  "粟",
  "谷子",
  "禾本科"
 ]
}
score:0.5532
{
 "current_semantic": "电影《美食总动员》中角色",
 "tags": [
  "电影形象",
  "电影",
  "人物"
 ],
 "infobox": {
  "中文名": "小米",
  "外文名": "Remy",
  "角色性格": "执着、聪明",
  "出处": "《美食总动员》"
 },
 "description": "英文名称:Remy 中文名称:小米(大陆、**),味王(香港) 角色性格:执着、聪明 小米这只灰色的小老鼠是《料理鼠王》又名《美食总动员》的主角,他与众不同,一心想成为一个大厨,像他的偶像厨神那样,可是他的家人都不支持理解他,而他也会经历来自人类的各种困难。和小宽的偶遇让他有机会实现这个梦想…… 小米平时在老鼠部落中无法发挥他的才智,只能担当“毒性检测专家”,帮助鼠帮检测哪些垃圾是可以吃的,哪些是有毒的……而他想做的是做人类的大厨。 小米的爸爸是米爸,他还有一个哥哥叫大米",
 "related_entry": [
  "美食总动员",
  "料理鼠王"
 ]
}
score:0.5738

问题

1.使用jieba分词加载腾讯的字典作辅助词典时导入很慢。现在暂时注释掉了导入字典的那一行。见doc_fe/doc_process.py

2.使用代理ip进行百科页面爬取时速度较慢。现在暂时直接爬取html页面。若启用代理池,注释entity_recall/baike_recall.pyBaiduBaikeget_html方法即可。

About

实体链接demo


Languages

Language:Python 100.0%