混合AI策略:结合文本相似度与大语言模型实现学术文献SDG智能分类 1. 项目概述当学术文献遇见SDG如何让AI读懂“人类命运”最近几年但凡关注科研动态的朋友应该都绕不开一个词SDG也就是联合国可持续发展目标。这17个目标从消除贫困到气候行动几乎框定了全球发展的核心议题。随之而来的是海量的学术研究开始主动或被动地与这些目标挂钩。基金申请要写“本研究如何支持SDG X”论文发表要标注“本文贡献于SDG Y”机构评估也要看“SDG相关产出占比”。于是一个现实又棘手的问题摆在了所有研究者、图书馆员和科研管理者面前面对一篇全新的、动辄几十页的学术论文如何快速、准确、低成本地判断它到底关联了哪些SDG目标传统方法无外乎两种一是靠人工专家阅读、判断、打标签精度高但效率极低成本惊人二是基于关键词的简单匹配比如看到“carbon emission”就贴上“SDG13 气候行动”的标签这种方法快是快但粗糙得可怕经常闹出“研究肺癌治疗却因为提到‘贫困地区医疗资源’而被贴上‘SDG1 无贫穷’”的笑话。显然我们需要更聪明的工具。我手头这个项目就是尝试用AI来解决这个“分类”难题。它的核心思路不复杂但组合起来很有意思先用传统但稳健的“文本相似度”方法从海量已标注的“种子文献”库里为待分类文献找到最相似的邻居获得一个基础标签预测然后请出当今的NLP“顶流”——大语言模型比如GPT系列让它像一位博学的审稿人一样通读全文摘要进行深度的语义理解与推理给出另一个标签预测最后设计一套混合决策机制把这两条路径的结果“聪明地”融合在一起取长补短得出最终分类。这听起来像是个“112”的经典组合拳。但真正做起来你会发现里面门道不少相似度计算用哪种算法TF-IDF、BM25还是嵌入向量大模型是调用API还是本地部署提示词Prompt怎么设计才能让它别胡言乱语两个结果冲突了怎么办是投票还是加权每一个选择背后都是对效果、成本、可解释性的权衡。我折腾了小半年踩了不少坑也总结出一些还算实用的心得。如果你也正在为文献的智能分类、主题标注或者知识图谱构建头疼或许接下来的内容能给你一些直接的参考。2. 核心思路拆解为什么是“相似度GPT”的混合路线单独来看基于相似度的方法和基于大语言模型的方法在解决文献分类问题上各有鲜明的优缺点。把它们结合起来并非简单的堆叠而是针对各自短板进行的针对性补强。2.1 方法一基于相似度的分类——稳定但“近视”的专家系统这个方法的核心假设很直观如果两篇文献讨论的内容高度相似那么它们很可能属于相同的SDG类别。实现起来就是一个标准的检索-匹配流程。2.1.1 技术选型与背后的“为什么”首先你需要一个高质量的“种子库”。这是整个方法的基石。种子库里的每篇文献都必须有准确的人工标注的SDG标签。通常可以从一些开放数据集中获取比如UNESCO的SDG标签数据集或Elsevier的Mendeley数据。种子库的规模和质量直接决定了上限我建议至少准备数千篇覆盖各个SDG的文献并且要定期更新。接下来是关键如何量化“相似度”这里有几个主流选择TF-IDF 余弦相似度这是最经典、最快速的方案。TF-IDF词频-逆文档频率可以提取文本中的关键词并赋予权重余弦相似度则计算两篇文献关键词向量的夹角。它的优点是计算极快结果稳定对硬件要求低。但缺点也很明显它本质上是“词袋”模型完全忽略了词的顺序和上下文语义。“climate change”和“change climate”在它看来是一样的更无法理解“苹果公司”和“一种水果”的区别。对于SDG分类这种需要一定语义理解的任务它显得有点“近视”。BM25这是一个在信息检索领域被验证了数十年的概率模型尤其在全文搜索中表现出色。它比TF-IDF更聪明一些考虑了词频饱和度和文档长度归一化。对于从大型种子库中快速检索相关文献BM25通常是比朴素TF-IDF更好的选择。许多搜索引擎库如Elasticsearch都内置了高效的BM25实现。词向量/句向量相似度这是进入深度学习时代后的主流选择。使用预训练模型如Word2Vec, GloVe, 或更现代的Sentence-BERT将文献的标题、摘要甚至全文转换为一个稠密的向量嵌入。相似度通过计算向量间的余弦相似度或欧氏距离得到。这种方法能捕捉到一定的语义信息比如知道“机器学习”和“人工智能”是相近的。但它的效果严重依赖于预训练语料与学术领域的匹配度。实操心得在项目初期我强烈建议从BM25开始。它的实现复杂度、计算成本和效果之间取得了很好的平衡。你可以用rank_bm25这个Python库快速搭建原型。把种子库所有文献的摘要构建成索引然后对待分类文献的摘要进行检索返回相似度最高的Top-K篇比如K5或10。这K篇文献的SDG标签就可以作为待分类文献的候选标签集。2.1.2 决策机制从邻居到标签检索到Top-K篇最相似的文献后你得到的是一个标签的集合。如何从中得出最终的一个或多个SDG标签简单投票法统计K个邻居中各个SDG标签出现的频率选择频率最高的前N个例如频率50%的或直接取Top-3。这种方法简单粗暴但如果邻居们本身意见就很分散结果可能不靠谱。加权投票法考虑到“越相似的邻居其意见应该越重要”我们可以用相似度得分作为权重。为每个候选SDG标签计算加权分数相似度之和然后按分数排序。这比简单投票更合理。阈值法设定一个相似度阈值只采纳相似度高于该阈值的邻居的标签。这可以过滤掉那些“勉强相似”的噪声。我的经验是加权投票法在大多数情况下表现更稳健。你需要根据验证集一小部分有标注的测试数据来微调K值和最终选取标签的阈值比如只保留加权分数高于总分数一定比例的那些标签。2.1.3 方法一的优势与局限优势可解释性强你可以清晰地展示“这篇文献因为和A、B、C三篇已知属于SDG7的文献高度相似所以被分类为SDG7。”这对于需要审计或验证的场景非常重要。计算成本相对可控一旦建好索引单次分类的速度很快。不依赖外部API完全本地运行数据隐私有保障。局限严重依赖种子库如果种子库里没有某类新兴、小众研究的类似文献那么该方法将完全失效冷启动问题。比如一篇用区块链技术追踪可持续供应链的论文如果种子库里没有类似主题就可能无法被正确归类到SDG12负责任消费和生产。缺乏深度推理能力它只能做到“像”而无法理解“为什么像”。对于需要结合多段上下文、理解隐含意图的复杂文献容易误判。2.2 方法二基于大语言模型的分类——强大但“昂贵”的推理引擎以GPT为代表的大语言模型为我们提供了另一种范式直接与模型对话让它理解全文内容并做出判断。这更像是在模拟人类专家的审阅过程。2.2.1 核心提示词工程是成败关键你无法直接将一篇论文扔给GPT说“分类”。你需要精心设计一个“提示词”引导它完成任务。一个糟糕的提示词可能让GPT胡编乱造一个好的提示词则能激发它惊人的潜力。一个基础版的提示词框架如下你是一位学术专家擅长根据联合国可持续发展目标对研究论文进行分类。 请仔细阅读以下论文的标题和摘要 标题[论文标题] 摘要[论文摘要] 可持续发展目标包括 1. 无贫穷 2. 零饥饿 ... 17. 促进目标实现的伙伴关系 请分析该论文的研究内容判断其主要涉及哪一个或多个可持续发展目标。 请严格按照以下格式输出 **涉及的SDG编号** [例如 7, 13] **理由** [用一两句话简要说明你的判断依据]2.2.2 高级技巧与优化仅仅这样还不够我们需要让它更可靠少样本学习在提示词中提供几个正确分类的例子。这能极大地校准模型的行为让它明白你想要什么样的输出格式和推理深度。示例1 论文[示例论文1标题和摘要] 分类SDG 3, 9 理由该论文研究新型医疗诊断设备直接关乎健康福祉SDG3并涉及技术创新SDG9。 示例2 论文[示例论文2标题和摘要] 分类SDG 4, 5 理由该论文关注女童教育公平问题属于优质教育SDG4和性别平等SDG5范畴。 现在请对以下论文进行分类 [待分类论文标题和摘要]思维链鼓励模型“一步一步思考”。对于复杂论文这能提高其推理的准确性。请逐步思考1. 这篇论文研究的核心问题是什么2. 这个问题与哪些全球性挑战相关3. 这些挑战对应哪些SDG目标结构化输出与格式强制明确要求输出JSON等结构化格式并利用GPT的API参数如response_format进行约束便于后续程序化处理。温度参数将温度设置为较低值如0.1或0.2以减少输出的随机性使结果更确定、可重复。2.2.3 部署考量API vs. 本地模型使用OpenAI等云端API最省事效果通常最好尤其是GPT-4。但存在持续成本、数据出境隐私风险、网络依赖和潜在的政策变化风险。部署开源大模型如Llama 3、Qwen等。可以本地或私有化部署数据安全可控。但需要强大的GPU资源且模型效果特别是小尺寸模型在复杂推理任务上可能不及顶级商用API需要更多的提示词调优和评估。踩坑实录初期我直接使用GPT-3.5的默认参数发现它有时会“发明”SDG目标比如输出“SDG 18: 太空探索”或者理由非常空泛。通过引入少样本示例和强制结构化输出这些问题得到了显著改善。另外API调用成本需要精打细算对摘要进行适当的长度裁剪保留核心句能在保证效果的同时节省大量token。2.2.4 方法二的优势与局限优势强大的语义理解与推理能力能够处理新颖、跨学科、表述隐晦的文献解决相似度方法“认不出”的问题。零样本/少样本学习即使没有明确的训练数据也能通过提示词泛化到新任务。灵活性高通过修改提示词可以轻松让模型完成摘要、提取关键词、评估贡献度等衍生任务。局限成本高无论是API调用费还是本地部署的硬件成本。速度慢生成式响应比检索慢几个数量级。“黑箱”与不可控输出可能存在幻觉推理过程不透明难以解释“为什么是这个结果”。稳定性挑战模型输出可能存在轻微波动尽管调低温度可以缓解。2.3 混合策略设计让“老专家”和“新锐AI”协同工作既然两者互补那么如何混合不是简单地把两个结果用“或”操作合并那样会引入大量噪声。我们需要一个决策层。2.3.1 混合的时机早期融合 vs. 晚期融合晚期融合这是最直观的方式。两个模型独立运行各自产生一套SDG标签预测可能带有置信度分数然后在决策层进行融合。我们项目主要采用这种方式因为它模块化便于调试。早期融合将相似度方法检索到的Top-K篇文献的摘要或标签信息作为上下文Context整合进给大模型的提示词中。例如“以下是几篇与待分类论文主题相似的参考文献及其SDG分类[引用信息]。请结合这些信息重新评估目标论文的SDG分类。” 这种方式能让大模型获得更多领域知识但提示词会变得复杂成本也更高。2.3.2 我们的混合决策机制我们设计了一个基于置信度的加权投票机制为每个方法的结果赋予置信度相似度方法置信度我们使用Top-3相似文献的标签加权得分并将其归一化到一个0-1的区间作为该标签的置信度conf_sim。例如如果“SDG7”的加权得分远高于其他标签那么它的conf_sim就接近1。大模型方法置信度这是一个难点因为GPT本身不直接输出置信度。我们的做法是在提示词中要求模型对每个它认为相关的SDG提供一个“相关性强度”的定性描述如“高度相关”、“中度相关”然后将其映射为数值如1.0 0.7。同时我们记录模型生成答案的logprobs如果API支持作为内部确定性的一个间接度量。最终得到一个综合的conf_llm。设定阈值与决策规则高置信度一致如果两个方法对某个SDG标签的预测置信度都超过一个高阈值如0.8则直接采纳。高置信度冲突如果一个方法给出高置信度预测另一个方法给出低置信度或相反预测则进入“仲裁”流程。我们倾向于优先信任大模型因为其推理能力更强但会附加人工审核标志。例如相似度认为SDG13置信度0.9大模型认为不相关置信度0.1则最终结果标记为“SDG13 (需复核)”。低置信度或仅单方法预测如果只有一个方法以中等置信度预测了某个标签则采纳该标签但置信度得分折半。如果两个方法都只有低置信度预测则可能判定为“无法明确分类”或输出所有低置信度标签并注明。大模型“幻觉”过滤对于大模型预测中未出现在SDG官方列表1-17中的编号直接过滤掉。这套规则需要在一个有标注的验证集上反复调整阈值以在精确率和召回率之间取得最佳平衡。我们的目标是用相似度方法保住“基本盘”覆盖常见、明确的文献用大模型方法捕捉“潜力股”解决疑难、新兴文献用决策规则控制风险过滤噪声和错误。3. 系统构建全流程实操理论讲完了我们来看看怎么把它搭起来。整个流程可以分为数据准备、相似度引擎构建、大模型接口封装、混合决策器实现四个主要模块。3.1 数据准备与预处理3.1.1 种子库构建我们从多个开放获取期刊平台和机构库通过爬虫和API收集了约15万篇带有SDG标签的论文元数据标题、摘要、DOI、发表年份、作者等。关键步骤去重基于DOI和标题进行去重。标签清洗原始标签可能格式不一如“SDG 3”、“SDG3”、“Goal 3”需要统一规范化为数字列表如[3]或[7, 11, 13]。文本清洗去除摘要中的HTML标签、特殊字符、无意义的换行符统一转换为小写如果后续使用BM25则保留大小写信息可能更有益。划分训练/验证/测试集按7:2:1的比例随机划分确保每个SDG类别在数据集中都有一定比例的代表。3.1.2 待分类文献流我们设计了一个简单的REST API接口接收待分类文献的标题和摘要未来可扩展支持PDF解析。同样需要对输入文本进行相同的清洗操作。3.2 相似度引擎实现我们选择了BM25作为核心算法使用rank_bm25库实现。# 示例代码构建BM25索引并进行检索 from rank_bm25 import BM25Okapi import jieba # 对于中文需要分词。英文可以使用nltk的word_tokenize def build_bm25_index(seed_texts): 构建BM25索引 seed_texts: list of str, 种子文献的摘要列表 # 对每篇摘要进行分词以英文为例使用简单空格分词 tokenized_corpus [doc.split() for doc in seed_texts] bm25 BM25Okapi(tokenized_corpus) return bm25 def retrieve_similar(bm25_index, query_text, top_k10): 检索最相似的文献 bm25_index: 构建好的BM25索引对象 query_text: str, 待查询文献的摘要 top_k: int, 返回最相似的数量 tokenized_query query_text.split() scores bm25_index.get_scores(tokenized_query) # 获取top_k的索引和分数 top_indices np.argsort(scores)[::-1][:top_k] top_scores scores[top_indices] return list(zip(top_indices, top_scores)) # 实际使用 bm25_index build_bm25_index(seed_abstracts) similar_docs retrieve_similar(bm25_index, new_paper_abstract, top_k5) for idx, score in similar_docs: print(f种子文献索引 {idx}, 相似度得分: {score:.4f}, 标签: {seed_labels[idx]})3.2.1 从检索结果到标签置信度假设我们检索到Top-5的相似文献其标签和得分如下文献A: 标签 [7], 得分 0.95文献B: 标签 [7, 13], 得分 0.88文献C: 标签 [13], 得分 0.85文献D: 标签 [11], 得分 0.60文献E: 标签 [7], 得分 0.55我们计算每个SDG的加权置信度SDG7: (0.95 0.88 0.55) / (0.950.880.850.600.55) ≈ 0.62SDG13: (0.88 0.85) / 总和 ≈ 0.45SDG11: 0.60 / 总和 ≈ 0.16我们可以设定一个阈值比如0.2那么相似度模块的输出就是{7: 0.62, 13: 0.45}。3.3 大模型接口封装与提示词优化我们选择使用OpenAI的ChatCompletions APIGPT-3.5-turbo并封装了一个带重试和异常处理的客户端。# 示例代码封装GPT分类请求 import openai from tenacity import retry, stop_after_attempt, wait_exponential class GPTClassifier: def __init__(self, api_key, modelgpt-3.5-turbo): openai.api_key api_key self.model model self.system_prompt 你是一位资深的可持续发展研究专家。你的任务是根据论文的标题和摘要精确地判断其涉及的联合国可持续发展目标。请只从SDG 1到17中选择。输出必须为JSON格式{sdgs: [数字列表], reasoning: 简要理由} retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def classify(self, title, abstract): user_content f标题{title}\n\n摘要{abstract} try: response openai.ChatCompletion.create( modelself.model, messages[ {role: system, content: self.system_prompt}, {role: user, content: user_content} ], temperature0.2, # 低温度减少随机性 max_tokens150, response_format{type: json_object} # 强制JSON输出 ) result json.loads(response.choices[0].message.content) # 后处理确保sdgs是列表且在1-17范围内 sdgs result.get(sdgs, []) if isinstance(sdgs, int): sdgs [sdgs] sdgs [sg for sg in sdgs if 1 sg 17] return {sdgs: sdgs, reasoning: result.get(reasoning, )} except Exception as e: # 记录日志返回空结果或默认值 print(fGPT分类失败: {e}) return {sdgs: [], reasoning: 分类失败}3.3.1 提示词迭代过程我们的提示词并非一蹴而就。第一版简单的指令GPT经常输出多余的解释或格式错误。加入“输出必须为JSON格式”和response_format参数后格式问题基本解决。后来发现它对某些交叉学科论文分类模糊我们又加入了少样本示例效果提升明显。最终的系统提示词包含了角色定义、任务说明、输出格式约束和2-3个精心挑选的、涵盖不同分类难度的示例。3.4 混合决策器实现这是整个系统的“大脑”它接收两个模块的原始输出应用我们前面设计的规则。def hybrid_decision(sim_results, gpt_results, sim_threshold_high0.6, sim_threshold_low0.2, conflict_modefavor_llm): 混合决策函数 sim_results: dict, {sdg: confidence_score} gpt_results: dict, {sdgs: list, reasoning: str} final_sdgs [] notes [] # 记录决策备注如需要复核 gpt_sdg_set set(gpt_results.get(sdgs, [])) # 处理高置信度一致的情况 for sdg, conf in sim_results.items(): if conf sim_threshold_high and sdg in gpt_sdg_set: final_sdgs.append(sdg) notes.append(fSDG{sdg}: 双方法高置信度一致) # 处理冲突与单方法预测 all_candidate_sdgs set(sim_results.keys()) | gpt_sdg_set for sdg in all_candidate_sdgs: if sdg in final_sdgs: continue # 已处理 sim_conf sim_results.get(sdg, 0) in_gpt sdg in gpt_sdg_set if in_gpt and sim_conf sim_threshold_low: # 仅GPT预测且相似度很低 final_sdgs.append(sdg) notes.append(fSDG{sdg}: 主要由GPT模型识别相似度支持弱) elif sim_conf sim_threshold_high and not in_gpt: # 仅相似度高预测GPT不认为 if conflict_mode favor_llm: notes.append(fSDG{sdg}: 相似度预测({sim_conf:.2f})高但GPT未识别建议复核) # 可以选择不加入final_sdgs或加入但标记低置信度 else: final_sdgs.append(sdg) notes.append(fSDG{sdg}: 高相似度预测GPT未识别按规则采纳) elif sim_threshold_low sim_conf sim_threshold_high: # 相似度中等预测 if in_gpt: final_sdgs.append(sdg) notes.append(fSDG{sdg}: 双方法中等支持) else: # 仅相似度中等忽略或标记为低优先级 pass # 去重并排序 final_sdgs sorted(list(set(final_sdgs))) return { sdgs: final_sdgs, hybrid_notes: notes, gpt_reasoning: gpt_results.get(reasoning, ) }这个决策器可以根据实际评估结果灵活调整阈值和冲突解决策略。4. 评估、调优与踩坑实录构建系统只是第一步更重要的是评估它好不好用以及如何让它更好用。4.1 评估指标的选择对于多标签分类任务不能只看准确率。我们主要关注以下几个指标精确率对于每个SDG标签被系统预测为该标签的文献中真正属于该标签的比例。这衡量了“预测的准不准”。召回率对于每个SDG标签真正属于该标签的文献中被系统正确预测出来的比例。这衡量了“找的全不全”。F1分数精确率和召回率的调和平均数是综合性的指标。汉明损失预测的标签集合与真实标签集合不同的比例。这是一个整体损失指标越小越好。子集准确率预测的标签集合与真实标签集合完全一致的样本比例。这个指标非常严格。我们会在保留的测试集上分别评估相似度方法、大模型方法以及混合方法的这些指标。4.2 调优过程与发现相似度方法调优Top-K值K太小如3容易受噪声影响K太大如20会引入不相关的标签拉低置信度。通过网格搜索我们发现K5到10之间是一个甜点。文本字段最初只用摘要后来尝试“标题摘要”发现对某些标题信息量大的文献如“Assessment of solar energy potential in rural India”效果提升明显。但对于长标题和摘要拼接需要控制总长度。BM25参数k1和b参数使用默认值通常表现不错但在我们的学术语料上将b略微调高如0.75以增加对长文档的惩罚效果略有提升。大模型方法调优提示词是最大的杠杆加入少样本示例后F1分数平均提升了约15%。示例的质量和代表性至关重要。温度参数将温度从0.7降至0.2后输出的稳定性大幅提高重复实验的结果基本一致。处理长文本GPT有上下文长度限制。对于超长摘要我们采用了两段式策略先让GPT总结摘要核心再基于核心内容进行分类。也可以直接使用支持更长上下文的模型如GPT-4-128k但成本激增。成本控制我们统计了不同期刊摘要的平均长度并设定了截断阈值如500词。同时对分类结果进行缓存避免对同一篇文献重复调用。混合策略调优核心是调整决策阈值。我们绘制了不同sim_threshold_high和sim_threshold_low下混合方法在测试集上的F1分数和汉明损失的热力图寻找帕累托最优前沿。发现“优先信任GPT”的策略在大多数情况下能获得更高的F1分数但会略微降低子集准确率因为GPT偶尔的幻觉会被引入。因此对于要求极高准确率的场景如自动生成报告我们会在最终输出前对GPT单独预测且相似度无支持的标签进行额外的人工审核或二次提示词确认。4.3 遇到的典型问题与解决方案问题1大模型“幻觉”输出非1-17的SDG编号。解决方案在结果解析层增加强校验直接过滤掉不在1-17范围内的数字。并在提示词中反复强调“只从SDG 1到17中选择”。问题2对于涉及多个SDG的交叉学科论文模型倾向于只输出最明显的一个。解决方案在提示词中明确要求“列出所有相关的SDG目标”并在少样本示例中提供多标签的例子。还可以尝试让模型分步骤思考“第一步找出所有直接相关的SDG第二步找出所有间接相关的SDG。”问题3相似度方法对新兴、前沿研究失效冷启动。解决方案建立反馈循环。当混合系统以“低置信度”或“仅GPT支持”的方式分类了一篇文献且后续经过人工确认是正确的就将这篇文献及其标签加入到动态更新的“增强种子库”中。定期用新种子库更新BM25索引使系统能够与时俱进。问题4处理速度无法满足实时大批量需求。解决方案相似度检索部分可以预先建立索引速度很快。瓶颈在大模型API调用。我们采用了异步批量请求、合理设置速率限制、以及对非关键任务使用更小、更快的本地模型如经过LoRA微调的Llama 3 8B进行初筛仅对初筛结果不确定的文献调用GPT-4进行精判。问题5种子库标签质量不均。解决方案这是根本性问题。我们引入了简单的自动清洗规则如过滤掉标签数量超过5个的极端多标签记录这可能是垃圾数据并计划在未来引入基于大模型的种子库标签自动校验与修正模块。5. 总结与展望这套“相似度GPT”的混合方法在我们内部的测试和初步应用中展现出了比单一方法更鲁棒和全面的性能。它既保留了基于检索方法的速度、可解释性和对已有知识的利用能力又融入了大语言模型的深度语义理解和零样本推理能力。我个人最深的体会是在AI应用落地的过程中最重要的往往不是追求最前沿、最复杂的模型而是如何根据具体的业务场景、资源约束和价值需求设计出精巧的“组合拳”。在这个项目里相似度方法就像一位经验丰富、但知识可能有点陈旧的老专家能快速处理大量常规案例GPT则像一位思维活跃、知识面广但偶尔会天马行空的年轻专家。我们的混合决策器就是让这两位专家坐在一起会诊的“首席科学家”它制定议事规则处理分歧最终形成一份综合诊断报告。未来这个系统还有不少可以深化的方向多模态扩展对于包含大量图表、数据的论文是否可以结合视觉模型来分析图表内容辅助分类细粒度分类SDG下面还有更具体的目标Targets如SDG13下有13.1增强抵御灾害能力、13.2将气候变化纳入政策等。能否将分类做到Target级别贡献度量化不仅判断文献“涉及”哪些SDG还能评估其对每个SDG的“贡献程度”是高、中还是低全流程自动化与机构知识库、投稿系统打通实现从论文入库到自动标注、再到SDG分析报告生成的全流程自动化。这个项目让我看到将传统的、稳健的算法与新兴的、强大的AI能力相结合是解决许多实际复杂问题的一条务实且有效的路径。希望这套思路和实操中的细节能为你正在面临的文本分类或信息处理挑战提供一些切实的启发和可复用的代码片段。