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

当我尝试使用 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_sent

def 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)))

慕丝7291255
浏览 466回答 3
3回答

回首忆惘然

也许你现在已经解决了。问题是您使用向量的时间太长了。您的向量是使用整个词汇表构建的,这对于模型来说可能太长而无法在仅 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 个周期。

拉莫斯之舞

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

慕勒3428872

我有同样的问题。原来sentence_similarity_graph具有“nan”值。怎么解决?在 def sentence_similarity中:if np.isnan(1 - cosine_distance(vector1, vector2)):  return 0return 1 - cosine_distance(vector1, vector2)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python