You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动复制Flair NER模型输出构建列表时出现语法错误问题

问题排查:Flair模型输出手动赋值报错的原因及解决办法

在使用Flair和Hugging Face Transformers开发时,尝试手动复制模型输出的文本格式赋值给变量触发语法错误。模型返回的solu1是可遍历的列表对象,但手动写的solu2无法运行,代码及报错如下:

from flair.data import Sentence
from flair.models import SequenceTagger
from transformers import pipeline

class Klassensetzer:
    def __init__(self):
        self.tagger = SequenceTagger.load("flair/ner-german-large")
        self.classifier = pipeline('sentiment-analysis')
        self.content=None

    def TK_model(self,content):
        sentence = Sentence(content)
        self.tagger.predict(sentence)
        self.content=(sentence.get_spans('ner'))
        return self.content

K=Klassensetzer()
solu1=K.TK_model("Augustus besucht Berlin")
#Means Augustus visits Berlin

print(solu1)
#Output:         [Span[0:1]: "Augustus" → PER (1.0), Span[2:3]: "Berlin" → LOC (1.0)]

#Does work out

solu2=[Span[0:1]: "Augustus" → PER (1.0), Span[2:3]: "Berlin" → LOC (1.0)]
print(solu2)
#Output:         SyntaxError: invalid syntax

#Didn't worked out after the second use

错误原因

  • 你复制的是对象的字符串表示形式,不是合法的Python语法。Span[0:1]: "Augustus" → PER (1.0)是Flair的Span对象被print()时输出的可读性文本,仅用于方便开发者查看,不是能直接赋值的Python代码。
  • Python解释器无法识别Span[0:1]:这种语法,这只是对象的友好展示格式,不是创建Span对象的正确方式。

手动构建等效对象的方法

如果需要手动创建和solu1一致的列表,必须通过Flair提供的API来实例化Span对象:

from flair.data import Sentence, Span

# 先创建原句子对应的Sentence对象(Span依赖Sentence上下文)
sentence = Sentence("Augustus besucht Berlin")
# 调用Span构造方法创建实体
augustus_span = Span(sentence, start_position=0, end_position=1, label="PER", score=1.0)
berlin_span = Span(sentence, start_position=2, end_position=3, label="LOC", score=1.0)
# 组成列表
solu2 = [augustus_span, berlin_span]

print(solu2)
# 输出与solu1一致:[Span[0:1]: "Augustus" → PER (1.0), Span[2:3]: "Berlin" → LOC (1.0)]

调试替代方案

如果只是为了跳过模型推理加速调试,建议用序列化方式保存/加载实体数据:

import json

# 保存:将Span对象的关键信息转为字典并写入文件
spans_data = [
    {"start": s.start_position, "end": s.end_position, "label": s.label.value, "score": s.score} 
    for s in solu1
]
with open("spans.json", "w") as f:
    json.dump(spans_data, f)

# 加载:从文件读取数据,重建Span对象
with open("spans.json", "r") as f:
    spans_data = json.load(f)
sentence = Sentence("Augustus besucht Berlin")
solu2 = [
    Span(sentence, d["start"], d["end"], d["label"], d["score"]) 
    for d in spans_data
]

内容的提问来源于stack exchange,提问作者artMart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:28:32