sunyilgdx / SIFRank_zh

Keyphrase or Keyword Extraction 基于预训练模型的中文关键词抽取方法(论文SIFRank: A New Baseline for Unsupervised Keyphrase Extraction Based on Pre-trained Language Model 的中文版代码)
417 stars 80 forks source link

请问词性标注用的什么工具 啊?名词性短语,如何考虑虚词的呢? #11

Closed dongrixinyu closed 3 years ago

dongrixinyu commented 4 years ago

您好: 请问词性标注用的什么工具 啊? 名词性短语,如何考虑虚词的呢? 比如,名词性短语“计算机科学与技术”,其中“与”字是虚词,如何被考虑进去的呢?形容词加名词的正则会忽略虚词的。

sunyilgdx commented 4 years ago

词性标注用的是清华分词工具包THULAC,如果要考虑虚词的话可能需要定义比较复杂的正则方法,这里面用的如下规则,

GRAMMAR_zh = """  NP:
        {<n.*|a|uw|i|j|x>*<n.*|uw|x>|<x|j><-><m|q>} # Adjective(s)(optional) + Noun(s)"""

在英文关键短语抽取中一般用如下规则,比较经典的算法一般都是基于这个,而且从评测来看也是效果最好的

GRAMMAR1 = """  NP:
        {<NN.*|JJ>*<NN.*>}  # Adjective(s)(optional) + Noun(s)"""

但基于规则匹配的方法确实会误判或漏判一些名词短语,所以最好能有一个类似NER的模型,先筛选出候选的名词短语,可能效果会好一些,现在也有些模型直接把关键词抽取当成NER问题来解决,也取得了一定的效果,但主要问题是可能会缺乏长文的全局信息,因此两者结合应该会效果不错,感兴趣的话可以继续研究^-^

dongrixinyu commented 4 years ago

词性标注用的是清华分词工具包THULAC,如果要考虑虚词的话可能需要定义比较复杂的正则方法,这里面用的如下规则,

GRAMMAR_zh = """  NP:
        {<n.*|a|uw|i|j|x>*<n.*|uw|x>|<x|j><-><m|q>} # Adjective(s)(optional) + Noun(s)"""

在英文关键短语抽取中一般用如下规则,比较经典的算法一般都是基于这个,而且从评测来看也是效果最好的

GRAMMAR1 = """  NP:
        {<NN.*|JJ>*<NN.*>}  # Adjective(s)(optional) + Noun(s)"""

但基于规则匹配的方法确实会误判或漏判一些名词短语,所以最好能有一个类似NER的模型,先筛选出候选的名词短语,可能效果会好一些,现在也有些模型直接把关键词抽取当成NER问题来解决,也取得了一定的效果,但主要问题是可能会缺乏长文的全局信息,因此两者结合应该会效果不错,感兴趣的话可以继续研究^-^

谢谢! 请问这个词性规则,是手写规则实现的吗?还是什么匹配工具的语法?<-> 符号是什么意思啊?

dongrixinyu commented 4 years ago

我找到了,谢谢

sunyilgdx commented 4 years ago

完全是我根据THULAC的词性标注符号写的,试了很久,觉得这个还不错,后半部分想匹配一些特殊名词如“歼-20”等

n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名
m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词
v/动词 vm/能愿动词 vd/趋向动词 a/形容词 d/副词
h/前接成分 k/后接成分 i/习语 j/简称
r/代词 c/连词 p/介词 u/助词 y/语气助词
e/叹词 o/拟声词 g/语素 w/标点 x/其它 
zhangdeshan commented 3 years ago

运行test报错: numpy : ValueError: index can't contain negative values numpy版本1.17,其他的都和博主版本一致 平台是windows,pytorch是py36-1.1.0版本 有没有人遇到过?

stephen-nju commented 3 years ago

运行test报错: numpy : ValueError: index can't contain negative values numpy版本1.17,其他的都和博主版本一致 平台是windows,pytorch是py36-1.1.0版本 有没有人遇到过?

阅读README,修改下源码elmo.py代码

stephen-nju commented 3 years ago

完全是我根据THULAC的词性标注符号写的,试了很久,觉得这个还不错,后半部分想匹配一些特殊名词如“歼-20”等

n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名
m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词
v/动词 vm/能愿动词 vd/趋向动词 a/形容词 d/副词
h/前接成分 k/后接成分 i/习语 j/简称
r/代词 c/连词 p/介词 u/助词 y/语气助词
e/叹词 o/拟声词 g/语素 w/标点 x/其它 

这里想请教一个问题,怎么限制候选短语的长度还不影响短语的质量?这里主要是因为对于较短的文本,缺乏句法结构的句子(类似词语堆砌的场景)

sunyilgdx commented 3 years ago

@stephen-nju 可以尝试修改正则表达式,限制前缀的个数

Sundyo commented 3 years ago

运行test报错: numpy : ValueError: index can't contain negative values numpy版本1.17,其他的都和博主版本一致 平台是windows,pytorch是py36-1.1.0版本 有没有人遇到过?

请问解决了嘛?我照着改了,还是没用诶