为了账号安全,请及时绑定邮箱和手机立即绑定

当我尝试使用 python networkx 总结文本文档时出现错误

当我尝试使用 python networkx 总结文本文档时出现错误

慕丝7291255 2023-03-22 16:02:05
当我尝试使用 python networkx 总结文本文档时,我得到了 PowerIterationFailedConvergence:(PowerIterationFailedConvergence(...), 'power iteration failed to converge within 100 iterations') 如下面的代码所示。代码“scores = nx.pagerank(sentence_similarity_graph)”中显示的错误def read_article(file_name):    file = open(file_name, "r",encoding="utf8")    filedata = file.readlines()    text=""    for s in filedata:        text=text+s.replace("\n","")        text=re.sub(' +', ' ', text) #remove space        text=re.sub('—',' ',text)        article = text.split(". ")     sentences = []    for sentence in article:#         print(sentence)        sentences.append(sentence.replace("[^a-zA-Z]", "").split(" "))    sentences.pop()    new_sent=[]    for lst in sentences:        newlst=[]        for i in range(len(lst)):            if lst[i].lower()!=lst[i-1].lower():                newlst.append(lst[i])            else:                newlst=newlst        new_sent.append(newlst)    return new_sentdef sentence_similarity(sent1, sent2, stopwords=None):    if stopwords is None:        stopwords = []     sent1 = [w.lower() for w in sent1]    sent2 = [w.lower() for w in sent2]     all_words = list(set(sent1 + sent2))     vector1 = [0] * len(all_words)    vector2 = [0] * len(all_words)     # build the vector for the first sentence    for w in sent1:        if w in stopwords:            continue        vector1[all_words.index(w)] += 1     # build the vector for the second sentence    for w in sent2:        if w in stopwords:            continue        vector2[all_words.index(w)] += 1     return 1 - cosine_distance(vector1, vector2)def build_similarity_matrix(sentences, stop_words):    # Create an empty similarity matrix    similarity_matrix = np.zeros((len(sentences), len(sentences)))
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

也许你现在已经解决了。

问题是您使用向量的时间太长了。您的向量是使用整个词汇表构建的,这对于模型来说可能太长而无法在仅 100 个周期内收敛(这是 pagerank 的默认值)。

您可以减少词汇表的长度(您是否检查过它是否正确删除了停用词?)或使用任何其他技术,例如减少不常用的单词,或使用 TF-IDF。

就我而言,我遇到了同样的问题,但使用的是 Glove 词嵌入。300 维无法收敛,使用 100 维模型很容易解决。

您可以尝试的另一件事是在调用 nx.pagerank 时扩展 max_iter 参数:

nx.pagerank(nx_graph, max_iter=600) # Or any number that will work for you.

默认值为 100 个周期。


查看完整回答
反对 回复 2023-03-22
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

当算法未能在幂迭代方法的指定迭代次数内收敛到指定的容差时,会发生此错误。因此,您可以像这样在 nx.pagerank() 中增加错误容忍度:

nx.pagerank(sentence_similarity_graph, tol=1.0e-3)

默认值为 1.0e-6。

查看完整回答
反对 回复 2023-03-22
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我有同样的问题。原来sentence_similarity_graph具有“nan”值。怎么解决?


在 def sentence_similarity中:


if np.isnan(1 - cosine_distance(vector1, vector2)):

  return 0

return 1 - cosine_distance(vector1, vector2)


查看完整回答
反对 回复 2023-03-22
  • 3 回答
  • 0 关注
  • 457 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信