生成word2vec模型,但使用多单词关键字而不是单个单词。

keywords2vec的Python项目详细描述


关键词2VEC

A simple and fast way to generate a word2vec model, with multi-word keywords instead of single words.

示例结果

为“肥胖症找到相似的关键字

indexterm
0overweight
1obese
2physical inactivity
3excess weight
4obese adults
5high bmi
6obese adults
7obese people
8obesity-related outcomes
9obesity among children
10poor sleep quality
11ssbs
12obese populations
13cardiometabolic risk
14abdominal obesity

安装

pip install keywords2vec

如何使用

让我们下载一些示例数据

data_filepath = "epistemonikos_data_sample.tsv.gz"

!wget "https://s3.amazonaws.com/episte-labs/epistemonikos_data_sample.tsv.gz" -O "{data_filepath}"

我们创建模型。如果需要向量,请查看here

^{pr2}$
processing file: epistemonikos_data_sample.tsv.gz

然后我们可以得到最相似的关键词

get_similars(tree, labels, "obesity")
['obesity',
 'overweight',
 'obese',
 'physical inactivity',
 'excess weight',
 'high bmi',
 'obese adults',
 'obese people',
 'obesity-related outcomes',
 'obesity among children',
 'poor sleep quality',
 'ssbs',
 'obese populations',
 'cardiometabolic risk',
 'abdominal obesity']
get_similars(tree, labels, "heart failure")
['heart failure',
 'hf',
 'chf',
 'chronic heart failure',
 'reduced ejection fraction',
 'unstable angina',
 'peripheral vascular disease',
 'peripheral arterial disease',
 'angina',
 'congestive heart failure',
 'left ventricular systolic dysfunction',
 'acute coronary syndrome',
 'heart failure patients',
 'acute myocardial infarction',
 'left ventricular dysfunction']

动机

这个想法起源于知识论数据库www.epistemonikos.org,这是一个科学文章的数据库,供人们就临床或卫生政策问题作出决定。在这种情况下,所使用的科学/卫生语言很复杂。您可以很容易地找到以下关键字:

  • 哮喘
  • 心力衰竭
  • 膝关节内侧骨关节炎
  • 保留左心室收缩功能
  • 非选择性非甾体抗炎药

我们尝试了一些方法来查找这些关键字,比如ngrams、ngrams+tf-idf、identifentity等。但是我们没有得到很好的结果。在

我们的方法

我们发现使用非单词+非单词字符进行标记对于“查找”关键字非常有用。例如:

  • 输入:“心脏手术后急性肾功能衰竭的替代治疗时机”
  • 输出:[ “计时”, “替代疗法”, “急性肾功能衰竭”, “心脏手术” ]在

所以当我们发现:

  • 停止语
  • 非单词字符(/,!?。etc)(除了-and')

就这样。在

但是,由于一些包含停止语的关键字存在一些问题,例如:

  • 维生素A
  • 甲肝
  • 科学网

所以我们决定添加另一个方法(nltk和一些语法定义)来覆盖大多数情况。要使用它,您需要添加参数keywords_w_stopwords=True,此方法大约慢20倍。在

参考文献

似乎是个老主意(2004):

米哈尔恰、拉达和保罗·塔鲁。”2004年自然语言处理经验方法研讨会论文集。2004

在阅读textrank的一个实现时,我意识到他们使用stopwords来分离和创建图形。然后我想用它作为word2vec的标记器

正如@deliprao在twitter thread中指出的那样。Rake(2010)也使用了它:

Rose,Stuart&Engel,Dave&Cramer,Nick&Cowley,Wendy。(2010年)。从单个文档自动提取关键字。10.1002/9780470689646.ch1。

正如@astent在Twitter帖子中指出的,这个概念被称为chinking(排除分块) https://www.nltk.org/book/ch07.html#Chinking

多语种

我们在一个可以在多种语言中使用的实现中工作。当然,并不是所有的语言都适合使用这种方法。我们在英语、西班牙语和葡萄牙语方面都取得了不错的成绩

在网上试试

你可以试试看here(需要时间加载,仅小写,还不能用于移动)MPV:)

这些嵌入是使用827341 title/abstract从@epithemonikos数据库创建的。 使用至少重复10次的关键字。总词汇量为349080个关键字(可管理的数量)

声音大小

这种方法的一个主要优点是词汇量大。 例如,对于Epitemonikos数据集(827341 title/abstract),使用至少重复10次的关键字,我们得到以下voab大小:

^{tb2}$

有关比较的详细信息,请查看文件夹analyze。在

学分

此项目已使用nbdev创建

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Spring启动测试中的java MockBean注释导致NonuniqueBeandDefinitionException   java Spring Hateoas调试模板不能为null   递归培根游戏Java程序?   java在Android中保存少量数据(对象)的最简单方法是什么?   异常处理Java中finally块的要点是什么?   是java。util。货币真的是工厂方法模式吗?   java如何输入字符以停止循环   java如何对流的某些部分执行缩减操作   java new Gson()。单例类的toJson(object)返回null   java Itext泰米尔字体显示不正确   java运行时。getRuntime()。gpg命令不起作用的exec()   java如何在preparedstatemenet中将字符连接到SQL字符串   java将同一实体的多个表示形式与lazyload合并时出错   JavaSpring、Hibernate和JPA:在entitymanager上调用persist似乎并没有提交到数据库   java osgi r6服务。组成部分注释属性列表