Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

参数‘corpus_files’ 和 ‘quality_phrase_files'的使用 #12

Open
IKIUJK opened this issue Aug 31, 2021 · 2 comments
Open

参数‘corpus_files’ 和 ‘quality_phrase_files'的使用 #12

IKIUJK opened this issue Aug 31, 2021 · 2 comments

Comments

@IKIUJK
Copy link

IKIUJK commented Aug 31, 2021

你好,在实践中对参数‘corpus_files’ 和 ‘quality_phrase_files有些疑问。

  1. 如果想for循环地使用AutoPhraseX(例如语料被分为n份,依次对每份语料进行挖掘),corpus_files该参数只能对文件进行操作吗?我试图将该参数换成数组或者字符串,会报错。在不方便将处理过的语料写入txt文件的情况下(即语料被分为n份,n较大),如果想for循环地使用AutoPhraseX,我该怎么做呢?非常感谢!
  2. 当我使用简单的quality_phrase_files='userDic.txt'(例如userDic.txt中包含“知识图谱”),发现挖掘出来的结果中将不出现“知识图谱”,然后尝试将userDic.txt中的“知识图谱”删掉,挖掘结果中则出现“知识图谱”该词。尝试多种例子,产生了quality_phrase_files是停用词表的错觉,不知道是语料较少的问题或是使用方式不对的问题。

实践代码如下:
from autophrasex import *

构造autophrase

autophrase = AutoPhrase(
reader=DefaultCorpusReader(tokenizer=JiebaTokenizer()),
selector=DefaultPhraseSelector(),
extractors=[
NgramsExtractor(N=4),
IDFExtractor(),
EntropyExtractor()
]
)

开始挖掘

predictions = autophrase.mine(
corpus_files=['answers.txt'],
quality_phrase_files='userDic.txt', #quality_phrase_files??像是停用词
callbacks=[
LoggingCallback(),
ConstantThresholdScheduler(),
EarlyStopping(patience=2, min_delta=3)
# EarlyStopping()
]
)

输出挖掘结果

for pred in predictions:
print(pred)

非常感谢大家的帮助,谢谢!

@wangruian153
Copy link

wangruian153 commented Jan 21, 2022

我不是作者,但你的第二个问题我可以回答你:
源代码里,他是这么干的:首先对整个待抽取的文本,得到所有的ngram,然后过滤一下,之后将这些ngram与quality_phrase_files中的词匹配,如果ngram存在于quality_phrase则它被放入正例池,否则放入负例池。最后抽取的时候,只会对原负例池中的词打分,如果它被放入正例池了,就不会被再预测!
顺便说一下,这份代码的原理和autoPhrase差距巨大,甚至说毫不相关也可以,可能是作者没完成吧,就是很简单地用idf,pmi,左右熵做特征,用随机森林打了个分,关于POS的部分完全不存在,而且正例中没包含全部的知识库词汇,也没有限制训练集的大小,也没有多线程设置,建议作者继续改进一下代码吧......

@wangruian153
Copy link

当然你用for也很简单吧,先把带切分数据切成N份,然后for循环每次重新mine一下,应该没有困难的地方...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants