Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Keyphrase or Keyword Extraction 基于预训练模型的中文关键词抽取方法(论文SIFRank: A New Baseline for Unsupervised Keyphrase Extraction Based on Pre-trained Language Model 的中文版代码)
| Date | Stars |
|---|---|
| 2026-07-24 | 431 |
| 2026-07-25 | 431 |
| 2026-07-28 | 431 |
| 2026-07-30 | 431 |
| 2026-07-31 | 431 |
| 2026-08-06 | 431 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
0.0
growth rate 0.00%/day
# SIFRank_zh
这是我们论文的相关代码 [SIFRank: A New Baseline for Unsupervised Keyphrase Extraction Based on Pre-trained Language Model](https://ieeexplore.ieee.org/document/8954611)
原文是在对英文关键短语进行抽取,这里迁移到中文上,部分pipe进行了改动。英文原版在[这里](https://github.com/sunyilgdx/SIFRank)。
## 版本介绍
* 2020/03/03——``最初版本``
本版本中只包含了最基本的功能,部分细节还有待优化和扩充。
## 核心算法
### 预训练模型ELMo+句向量模型SIF
词向量ELMo优势:1)经过大规模预训练,较TFIDF、TextRank等基于统计和图的具有更多的语义信息;2)ELMo是动态的,可以改善一词多义问题;3)ELMo通过Char-CNN编码,对生僻词非常友好;4)不同层的ELMo可以捕捉不同层次的信息
句向量SIF优势:1)根据词频对词向量进行平滑反频率加权,能更好地捕捉句子的中心话题;2)更好地过滤通用词
### 候选关键短语识别
首先对句子进行分词和词性标注,再利用正则表达式确定名词短语(例如:形容词+名词),将名词短语作为候选关键短语
### 候选关键短语重要程度排序(SIFRank)
利用相同的算法计算整个文档(或句子)和候选关键短语的句向量,再依次进行相似度计算(余弦距离),作为重要程度
### 文档分割(document segmentation,DS)+词向量对齐(embeddings alignment,EA)
DS:通过将文档分为较短且完整的句子(如16个词左右),并行计算来加速ELMo;
EA:同时利用锚点词向量对不同句子中的相同词的词向量进行对齐,来稳定同一词在相同语境下的词向量表示。
### 位置偏权(SIFRank+)
核心思想:对于长文本,`先出现的词往往具有更重要的地位`
因此利用每个词第一次出现的位置来产生权重:1/p+u(还要经过一个softmax拟合),u是一个超参数,经过实验设置为3.4
## 环境
```
Python 3.6
nltk 3.4.3
elmoformanylangs 0.0.3
thulac 0.2.1
torch 1.1.0
```
## 提示
哈工大的elmoformanylangs 0.0.3中有个较为明显的问题,当返回所有层Embeddings的时候代码写错了,当output_layer=-2时并不是返回所有层的向量,只是返回了倒数第二层的。问题讨论在这里[#31](https://github.com/HIT-SCIR/ELMoForManyLangs/issues/31)
```
elmo.sents2elmo(sents_tokened,output_layer=-2)
```
建议这样修改elmo.py里class Embedder(object)类中的代码。
原代码:
```
if output_layer == -1:
payload = np.average(data, axis=0)
else:
payload = data[output_layer]
```
修改后:
```
if output_layer == -1:
payload = np.average(data, axis=0)
#code changed here
elif output_layer == -2:
payload = data
else:
payload = data[output_layer]
```
## 下载
* 哈工大ELMo ``zhs.model`` 请从[这里](https://github.com/HIT-SCIR/ELMoForManyLangs) 下载,将其解压保存到 ``auxiliary_data/``目录下(注意要按照其要求更改config文件),本项目中已经将部分文件上传了,其中比较大的模型文件``encoder.pkl``和``token_embedder.pkl``请自行添加。
* 清华分词工具包THULAC ``thulac.models`` 请从[这里](http://thulac.thunlp.org/)下载, 将其解压保存到 ``auxiliary_data/``目录下。
## 用法
```
from embeddings import sent_emb_sif, word_emb_elmo
from model.method import SIFRank, SIFRank_plus
import thulac
#download from https://github.com/HIT-SCIR/ELMoForManyLangs
model_file = r'../auxiliary_data/zhs.model/'
ELMO = word_emb_elmo.WordEmbeddings(model_file)
SIF = sent_emb_sif.SentEmbeddings(ELMO, lamda=1.0)
#download from http://thulac.thunlp.org/
zh_model = thulac.thulac(model_path=r'../auxiliary_data/thulac.models/',user_dict=r'../auxiliary_data/user_dict.txt')
elmo_layers_weight = [0.5, 0.5, 0.0]
text = "计算机科学与技术(Computer Science and Technology)是国家一级学科,下设信息安全、软件工程、计算机软件与理论、计算机系统结构、计算机应用技术、计算机技术等专业。 [1]主修大数据技术导论、数据采集与处理实践(Python)、Web前/后端开发、统计与数据分析、机器学习、高级数据库系统、数据可视化、云计算技术、人工智能、自然语言处理、媒体大数据案例分析、网络空间安全、计算机网络、数据结构、软件工程、操作系统等课程,以及大数据方向系列实验,并完成程序设计、数据分析、机器学习、数据可视化、大数据综合应用实践、专业实训和毕业设计等多种实践环节。"
keyphrases = SIFRank(text, SIF, zh_model, N=15,elmo_layers_weight=elmo_layers_weight)
keyphrases_ = SIFRank_plus(text, SIF, zh_model, N=15, elmo_layers_weight=elmo_layers_weight)
```
## 用例展示
我们选取了一段百度百科中关于“计算机科学与技术”的描述作为被抽取对象(如下),用Top10来观察其效果。
> text = "计算机科学与技术(Computer Science and Technology)是国家一级学科,下设信息安全、软件工程、计算机软件与理论、计算机系统结构、计算机应用技术、计算机技术等专业。 [1]主修大数据技术导论、数据采集与处理实践(Python)、Web前/后端开发、统计与数据分析、机器学习、高级数据库系统、数据可视化、云计算技术、人工智能、自然语言处理、媒体大数据案例分析、网络空间安全、计算机网络、数据结构、软件工程、操作系统等课程,以及大数据方向系列实验,并完成程序设计、数据分析、机器学习、数据可视化、大数据综合应用实践、专业实训和毕业设计等多种实践环节。"
* SIFRank_zh抽取结果
```
关键词 权重
大数据技术导论 0.9346
计算机软件 0.9211
计算机系统结构 0.9182
高级数据库系统 0.9022
计算机网络 0.8998
媒体大数据案例 0.8997
数据结构 0.8971
软件工程 0.8955
大数据 0.8907
计算机技术 0.8838
```
* SIFRank+_zh抽取结果
```
关键词 权重
计算机软件 0.9396
计算机科学与技术 0.9286
计算机系统结构 0.9245
大数据技术导论 0.9222
软件工程 0.9213
信息 0.8787
计算机技术 0.8778
高级数据库系统 0.8770
computer 0.8717
媒体大数据案例 0.8687
```
* jieba分词TFIDF抽取结果
```
关键词 权重
数据 0.8808
可视化 0.5891
技术 0.3726
机器 0.3496
毕业设计 0.3369
专业 0.3260
网络空间 0.3235
数据库系统 0.2983
数据结构 0.2801
计算技术 0.2738
```
* jieba分词TextRank抽取结果
```
关键词 权重
数据 1.0000
技Excerpt of 5,155 characters
Read on GitHubWould you bet a product on this? Bounded 0–100 and slow moving.
matched fp:d1736f70a748b335, topic:sentence-embeddings