如何摆脱'nlp.max_length'限制?

问题描述 投票:0回答:2

我正在尝试使用 spacy 为文章进行自定义 NER;但是当我开始训练模型时,我收到错误消息: “[E088] 长度为 1021312 的文本超出最大值 1000000....” 尝试了以下解决方案: 我。增加 nlp.max_length = 1500000 ii.使用spacy“en_core_web_lg”,然后禁用不相关的spacy nlp管道。 三.尝试过 nlp.max_length = len(txt) + 5000 四.更改配置文件中的 max_length v.nlp.max_length = len(文本) vi.用 ' 分割数据 ’并与空间重新结合。 (新行字符“ ” 用于创建新行。) doc = nlp.make_doc(" ".join(text.split(' ')))

但这一切都是徒劳。

nlp spacy named-entity-recognition maxlength
2个回答
1
投票

我使用下面的代码。这对我有用。

    import spacy
    nlp = spacy.load('en_core_web_lg',disable=['parser', 'tagger','ner'])

    nlp.max_length = 1198623

0
投票

我解决这个问题的方法是分割文本,处理它然后像以前一样重新加入。在我的例子中,字符串位于 1 到 n 大小的列表中。

def split_elements(strings, limit):
    result = []
    original_positions = []
    
    for i, string in enumerate(strings):
        if len(string) > limit:
            start = 0
            while start < len(string):
                end = min(start + limit, len(string))
                result.append(string[start:end])
                original_positions.append(i)
                start = end
        else:
            result.append(string)
            original_positions.append(i)
    
    return result, original_positions

def rejoin_elements(split_strings, original_positions):
    result = []
    current_index = -1
    current_string = ""
    
    for i, string in enumerate(split_strings):
        if original_positions[i] != current_index:
            if current_string:
                result.append(current_string)
            current_index = original_positions[i]
            current_string = string
        else:
            current_string += string
    
    if current_string:
        result.append(current_string)
    
    return result

# Example usage
text = ["This is a very long string ... more than .", "Short one."]
limit = 999_999

# split the text into manageable chunks
split_text, original_positions = split_elements(text, limit)

nlp = spacy.load("en_core_web_sm")
for item in split_text:
    doc = nlp(item)
    # do stuff

# if wanted, put the text back to the original
original_text = rejoin_elements(split_text, original_positions)
© www.soinside.com 2019 - 2024. All rights reserved.