当我尝试使用 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 个周期。
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
当算法未能在幂迭代方法的指定迭代次数内收敛到指定的容差时,会发生此错误。因此,您可以像这样在 nx.pagerank() 中增加错误容忍度:
nx.pagerank(sentence_similarity_graph, tol=1.0e-3)
默认值为 1.0e-6。
慕勒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)
添加回答
举报
0/150
提交
取消