15  研究概要

通过大语言模型分析文献标题和摘要,确定其研究主题是否为“合成菌群”。

15.1 任务流程

首先将参考文献的摘要进行整理,然后使用模型来分析这些摘要。以下是一个基本的步骤:

  1. 收集摘要:将你所有参考文献的摘要收集起来,可以按照主题或年份等进行分类。
  2. 输入模型:将这些摘要分批输入模型。由于每个摘要可能较短,你可以一次输入多个摘要。
  3. 分析主题:要求模型根据输入的摘要,识别出每个参考文献的主要研究主题。

这样,你就可以利用模型快速了解大量参考文献的主要内容,并根据自己的兴趣和研究方向选择需要深入阅读的文献。

当然,以下是一个具体的实施示例,假设你有几篇参考文献的摘要,并希望模型分析其中的主要研究主题:

15.1.1 示例摘要

  1. 摘要 1: “This study explores the effects of soil microbiomes on plant growth in maize, focusing on nitrogen fixation and plant health under different environmental conditions.”
  2. 摘要 2: “The research investigates the impact of synthetic microbial communities on soil nutrient cycling, analyzing their potential to enhance agricultural sustainability.”
  3. 摘要 3: “This paper examines the interactions between soil microorganisms and plant roots, specifically in the context of drought resistance in crops.”

15.1.2 实施步骤

第一步:收集摘要

将这些摘要收集并整理好,可以按主题或关键字进行分类。

第二步:输入模型

假设你将这三个摘要分批输入模型,并让模型识别每个摘要的主要研究主题。你可以构造这样的提示:

提示词示例:

“请根据以下摘要识别每篇文章的主要研究主题:

  1. 摘要 1: [输入摘要]
  2. 摘要 2: [输入摘要]
  3. 摘要 3: [输入摘要]”

第三步:模型输出

模型将分析这些摘要,并识别出每篇文章的主题。例如,模型可能给出的结果如下:

  • 摘要 1 主题: 植物健康与氮固定在不同环境条件下的变化
  • 摘要 2 主题: 微生物群落在土壤养分循环中的作用及其对农业可持续性的影响
  • 摘要 3 主题: 土壤微生物与作物抗旱性之间的相互作用

15.2 代码实现

要实现这个过程,你可以使用 Python 结合 OpenAI 的 API 来处理文本。以下是一个代码示例,利用 GPT 模型分析摘要并提取主要主题。

环境准备:

(略)

实现代码:

  1. analyze_abstracts 函数:接受一个摘要列表,将它们拼接成一个请求提示,并传递给 GPT 模型进行处理。
  2. openai.chat.completions.create():调用 OpenAI 的模型来生成对话结果,输出每个摘要的主要主题。
  3. model=“gpt-4o-ca”:你可以根据需要选择不同的GPT模型。
  4. 摘要输入:输入多个摘要,模型会分析并提取主要的研究主题。

运行效果:

模型会返回每个摘要的研究主题:

import openai
import os
from IPython.display import Markdown

openai.base_url = "https://api.chatanywhere.tech"
openai.api_key = os.getenv("CHATANYWHERE_API_KEY")

system_prompt = "这些文章的主题是什么?"

def analyze_abstracts(abstracts):
  # Create prompt with multiple messages (abstracts)
  messages = [
      {"role": "system", "content": system_prompt}
  ]
  for abstract in abstracts:
      messages.append({"role": "user", "content": abstract})

  # Use Completion.create with messages list
  response = openai.chat.completions.create(
      model="gpt-4o-ca",  # Adjust model as needed
      messages=messages,
      n=1,  # Generate only 1 response
  )

  # Extract and return the analyzed content
  return response.choices[0].message.content

# 示例摘要
abstracts = [
  "Paper1: This study explores the effects of soil microbiomes on plant growth in maize, focusing on nitrogen fixation and plant health under different environmental conditions.",
  "Paper2: The research investigates the impact of synthetic microbial communities on soil nutrient cycling, analyzing their potential to enhance agricultural sustainability.",
  "Paper3: This paper examines the interactions between soil microorganisms and plant roots, specifically in the context of drought resistance in crops."
]


# 分析摘要并输出主题
themes = analyze_abstracts(abstracts)
Markdown(themes)

这些文章的主题如下:

  1. Paper 1: 研究土壤微生物群对玉米植物生长的影响,重点关注在不同环境条件下的固氮作用和植物健康。
  2. Paper 2: 调查合成微生物群落对土壤养分循环的影响,分析其增强农业可持续性的潜力。
  3. Paper 3: 探讨土壤微生物与植物根系之间的相互作用,特别是在作物抗旱方面的应用。

总体而言,这些文章均涉及土壤微生物与植物生长及健康之间的关系,关注点包括固氮、农业可持续性和抗旱性。

15.3 与导出文件联动

好的,接下来我们可以设计一个流程来自动读取 Web of Science 的导出文件(通常是 CSV/TSV 格式),然后每次批量处理 5 篇文献的摘要,并使用 GPT 模型提取主题,最后将提取的主题保存到本地文件中。下面是具体的实现思路和代码。

流程步骤:

  1. 读取CSV文件:从导出的Web of Science文件中读取文献的标题(ti列)和摘要(ab列)。
  2. 分批处理摘要:每次提取5篇文献的摘要,使用GPT模型分析主题。
  3. 保存结果:将每篇文献的标题、摘要以及提取到的主题保存到本地文件(如CSV文件)中。

15.3.1 读取文件

import pandas as pd

# 读取CSV文件中的标题和摘要
file = "example/wos-fast5k/savedrecs.txt"
    
# 根据文件的分隔符修改 delimiter 参数
# 设置 index_col=False 来确保第一列不会被当作行索引
data = pd.read_csv(file, delimiter='\t', index_col=False)  

# 删除全为 NaN 的列
data = data.loc[:, data.notna().sum() != 0]

# 查看处理后的数据
print(data[0:5])
  PT                                                 AU   BA   CA   GP  \
0  J  Just, Berta Singla; Marks, Evan Alexander Neth...  NaN  NaN  NaN   
1  J  Pereira-Marques, Joana; Ferreira, Rui M.; Figu...  NaN  NaN  NaN   
2  J  Golzar-Ahmadi, Mehdi; Bahaloo-Horeh, Nazanin; ...  NaN  NaN  NaN   
3  J  Li, Chenglong; Han, Yanfeng; Zou, Xiao; Zhang,...  NaN  NaN  NaN   
4  J  Hu, Yu; Wang, Yulin; Wang, Runhua; Wang, Xiaok...  NaN  NaN  NaN   

                                                  TI  \
0  Biofertilization increases soil organic carbon...   
1  A metatranscriptomics strategy for efficient c...   
2  Pathway to industrial application of heterotro...   
3  A systematic discussion and comparison of the ...   
4  Dirammox-dominated microbial community for bio...   

                                                  SO   VL   IS   BP  ...  \
0  INTERNATIONAL JOURNAL OF AGRICULTURAL SUSTAINA...   22    1  NaN  ...   
1                                       GUT MICROBES   16    1  NaN  ...   
2                             BIOTECHNOLOGY ADVANCES   77  NaN  NaN  ...   
3                SYNTHETIC AND SYSTEMS BIOTECHNOLOGY    9    4  775  ...   
4             APPLIED MICROBIOLOGY AND BIOTECHNOLOGY  108    1  NaN  ...   

     PY                                                 AB  \
0  2024  Protecting and building soil carbon has become...   
1  2024  The high background of host RNA poses a major ...   
2  2024  The transition to renewable energies and elect...   
3  2024  Synthetic microbial community has widely conce...   
4  2024  Direct ammonia oxidation (Dirammox) might be o...   

                                                  C1   CT   CY   SP   CL TC  \
0  [Just, Berta Singla; Llenas, Laia; Ponsa, Serg...  NaN  NaN  NaN  NaN  0   
1  [Pereira-Marques, Joana; Ferreira, Rui M.; Fig...  NaN  NaN  NaN  NaN  2   
2  [Golzar-Ahmadi, Mehdi; Norouzi, Forough; Holus...  NaN  NaN  NaN  NaN  0   
3  [Li, Chenglong; Han, Yanfeng; Zou, Xiao; Zhang...  NaN  NaN  NaN  NaN  0   
4  [Hu, Yu; Wang, Yulin; Liu, Shuang-Jiang] Shand...  NaN  NaN  NaN  NaN  0   

                                                  WC                   UT  
0  Agriculture, Multidisciplinary; Green & Sustai...  WOS:001247571700001  
1        Gastroenterology & Hepatology; Microbiology  WOS:001176335800001  
2               Biotechnology & Applied Microbiology  WOS:001316252000001  
3               Biotechnology & Applied Microbiology  WOS:001273513000001  
4               Biotechnology & Applied Microbiology  WOS:001252334300001  

[5 rows x 24 columns]

下面,将 dataframe 中的数据逐批处理,生成 JSON 格式的文本。

  1. batch_to_json():这是函数的主体,将数据按批次进行处理,并将每行数据转化为 JSON 格式。
  2. 批次切分:使用 data[i:i+batch_size]DataFrame 进行分批处理。
  3. 构建 JSON:每行数据提取出 UTTIAB 列的值,并构建一个包含 idtiab 键的 JSON 对象。
  4. json.dumps():将列表形式的 JSON 对象转换为 JSON 字符串。
  5. ensure_ascii=False:确保输出的 JSON 字符串支持非 ASCII 字符。
import pandas as pd
import json

def batch_to_json(data, batch_size):
    # 确保输入的 data 是一个 DataFrame,且 batch_size 是正整数
    if not isinstance(data, pd.DataFrame):
        raise ValueError("data 应该是一个 pandas DataFrame")
    if not isinstance(batch_size, int) or batch_size <= 0:
        raise ValueError("batch_size 应该是一个正整数")
    
    # 提取 dataframe 中的每 batch_size 行数据
    batches = [data[i:i+batch_size] for i in range(0, len(data), batch_size)]
    
    result = []
    for batch in batches:
        json_batch = []
        for _, row in batch.iterrows():
            # 构建每行的 JSON 对象
            json_obj = {
                "ID": row["UT"],
                "TI": row["TI"],
                "AB": row["AB"]
            }
            json_batch.append(json_obj)
        result.append(json.dumps(json_batch, ensure_ascii=False))  # 转换为 JSON 格式的字符串
    return result

# 示例使用
batch_size = 2
json_output = batch_to_json(data[0:6], batch_size)

from pprint import pprint
for batch in json_output:
    Markdown(batch)

15.3.2 调整提示词

Note: 将提示词换成英文效果可能会更好。

# 使用三引号插入一个非常长的系统提示符
system_prompt = """  
请根据以下内容识别每篇文章的研究主题与**合成菌群**研究的相关性,并给出评分(完全不相关 0 分,十分相关 10 分,部分相关 1-9 分):

请注意:

1. 合成菌群是指人们利用一个或者多个微生物组成的复合物,它可以是一个益生菌,一种生物肥料,或者一个小型的微生物群落。所有与这些内容相关的研究都应该被认为是合成菌群的相关研究。
2. 后续的这些内容都会以 JSON 格式给出文章的 ID、标题(TI)和摘要(AB),请根据标题和摘要的内容进行判断,并且记录 ID 用于回答。
3. 务必按照下面的要求回答。

回答要求:

1. 在回答时请给出文章的 ID,评分(score)与简短理由(reason)。
2. 请使用 JSON 格式回答。


下面是一个示例回答:

{results: [{"ID":"WOS:000996233600009","score":5, "reason": "reason in Chinese"},
{"ID":"WOS:001247571700001","score":10, "reason": "reason in Chinese"}]}

"""

要使 OpenAI API 调用的结果以统一的 JSON 格式返回,可以按照以下步骤进行设置:

def analyze_content(content):
  # Create prompt with multiple messages (abstracts)
  messages = [
      {"role": "system", "content": system_prompt}
  ]
  
  messages.append({"role": "user", "content": content})

  # Use Completion.create with messages list
  response = openai.chat.completions.create(
      model="gpt-4o-ca",  # Adjust model as needed
      messages=messages,
      response_format={"type": "json_object"}
  )

  # Extract and return the analyzed content
  return response.choices[0].message.content


Markdown(analyze_content(json_output[0]))

{ “results”: [ { “ID”: “WOS:001247571700001”, “score”: 10, “reason”: “这篇文章研究了生物肥料微生物接种剂对土壤有机碳浓度的影响,符合合成菌群的定义,即一个或多个微生物组成的复合物。” }, { “ID”: “WOS:001176335800001”, “score”: 7, “reason”: “这篇文章虽然主要讨论了在人类组织中低微生物含量情况下的微生物组表征策略,但提到了对合成样本的测试,涉及通过合成的方式来验证方法,因此部分相关。” } ] }

15.3.3 批处理

现在可以进行批处理,并将结果保存下来。

batches = batch_to_json(data[0:20], batch_size=5)

results = []

for batch in batches:
  result = analyze_content(batch)
  results.append(result)

将列表合并成一个数据框,并保存到硬盘中供后续分析使用。

import json

data_list = []


for json_data in results:
  data = json.loads(json_data)
  result = data['results']

  for item in result:
    data_list.append([item['ID'], item['score'], item['reason']])

df = pd.DataFrame(data_list, columns=['ID', 'score', 'reason'])

df
# df.to_csv('output.csv', index=False)
ID score reason
0 WOS:001247571700001 9 该研究评估了微生物接种剂(生物肥料)对土壤有机碳浓度的影响,这里讨论了不同类型的生物肥料和微...
1 WOS:001176335800001 7 这篇文章描述了合成样本(包含微生物和宿主细胞组成)的生成及其用于优化和建立分析流程,尽管重点...
2 WOS:001316252000001 6 这篇文章探讨了异养微生物在从电子废物中回收金属的产业应用,其中涉及人工微生物群落和合成生物学...
3 WOS:001273513000001 10 本文系统讨论和比较了合成微生物群落的构建方法,直接讨论了合成菌群的概念、应用和构建方法,是完...
4 WOS:001252334300001 8 该研究介绍了一种特定的微生物群落在废水处理中的应用,虽然重点是Dirammox细菌,但涉及微...
5 WOS:001209713100001 6 这篇文章虽然主要讨论的是微藻用于生物燃料和其他增值产品的可持续利用,但也提到微藻可以作为生物...
6 WOS:001198552100002 9 本研究专注于微生物群落的交互作用研究,并提到了开发合成微生物共生体的定量和定性方法,因此它与...
7 WOS:001171546000001 10 这篇文章明确讨论了一种基于功能基因的合成微生物群落的构建,以促进水稻硫循环。完全符合合成菌群...
8 WOS:001314268600001 10 本研究设计了一种用于促进污染地块小麦生长的合成微生物群落,并使用了基因组规模代谢模型。这完全...
9 WOS:001313702300001 0 该研究主要探讨了多重应激源对淡水生态系统的影响,而没有涉及合成菌群的概念或应用。因此,与合成...
10 WOS:001320306700001 8 虽然主要研究对象是塑料降解,但使用了微藻,这符合合成菌群的定义,即利用多个微生物组成的复合物...
11 WOS:001319961700001 10 研究集中在从蕃茄根际土壤中分离和评价促进植物生长的根际细菌,这完全符合合成菌群的研究。
12 WOS:001318177900001 10 研究探讨了藻类-细菌共生系统用于污染物去除,涉及多个微生物组成的复合物和其代谢优势,完全符合...
13 WOS:001318328600001 6 研究虽然涉及污水处理和细菌群落结构分析,但主要集中在化学处理方法上,合成菌群的参与程度中等。
14 WOS:001317596600001 3 主要聚焦于抗菌肽及其合成类似物作为抗生素替代品的开发,与合成菌群关系较弱。
15 WOS:001291429900001 8 这篇文章研究了将乳牛废水与水果和蔬菜残渣进行厌氧共消化的效果,并利用生成的生物肥料,这直接涉...
16 WOS:001319156200001 7 这篇文章研究了固氮蓝藻减少水稻中镉毒性和镉累积的问题,涉及到蓝藻作为生物肥料和重金属吸附剂的...
17 WOS:001307986400001 6 这篇文章在合成环境中研究了微生物社区组成的变化,涉及到多种微生物在共同代谢系统中的相互作用和...
18 WOS:001319855200001 9 这篇文章研究了Paenibacillus polymyxa J2-4和Pseudomonas...
19 WOS:001314605300007 10 本研究通过基因组学和合成社区实验揭示了醋酸细菌在酵母发酵中的关键代谢作用,直接涉及创建和操控...