生成word2vec模型,但使用多单词关键字而不是单个单词。
keywords2vec的Python项目详细描述
关键词2VEC
A simple and fast way to generate a word2vec model, with multi-word keywords instead of single words.
示例结果
为“肥胖症找到相似的关键字”
index | term |
---|---|
0 | overweight |
1 | obese |
2 | physical inactivity |
3 | excess weight |
4 | obese adults |
5 | high bmi |
6 | obese adults |
7 | obese people |
8 | obesity-related outcomes |
9 | obesity among children |
10 | poor sleep quality |
11 | ssbs |
12 | obese populations |
13 | cardiometabolic risk |
14 | abdominal 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创建
- 项目
标签: