3. 环境搭建:Python、Biopython、spaCy 与 transformers 安装

好,我们正式进入实操环节。搞文本挖掘,环境搭不对,后面全是坑。我见过太多人卡在第一步——装了半天,跑起来全是红字报错。

这一章,我带你从头搭一套能用的环境。说白了,就是装 Python、装几个关键库、再验证一遍能不能跑通。你跟着我走,半小时内搞定。

3.1 整体架构预览

在动手之前,先看看我们到底要搭什么。下面这张图,是我做的环境结构图。你一眼就能看明白各层的关系。

PubMed 药物靶点抽取 —— 环境栈 应用层:药物-靶点抽取管道 NLP 与文本处理层 spaCy transformers BioBERT ScispaCy 生物信息学工具层 Biopython PubMed API (Biopython.Entrez) 基础环境层 Python 3.9+ pip / conda 虚拟环境 越往上,越接近业务逻辑;越往下,越接近系统基础设施。

图里分四层。最底下是 Python 和虚拟环境。往上走,是 Biopython 这种生物信息学专用库。再往上,是 spaCy 和 transformers。最顶层,才是我们最终要写的抽取管道。

嗯,记住这个分层结构。你后面遇到报错,就知道该去哪一层找原因。

3.2 Python 环境搭建

我个人习惯用 pyenv 管理 Python 版本。为什么?因为不同项目依赖的 Python 版本不同。比如 transformers 有些特性要求 3.9+,你拿 3.7 跑直接就崩。

如果你刚接触,我建议直接用 Anaconda 发行版。它自带 conda 包管理器和一大票数据科学库,省事。

先检查你系统里有没有 Python:

python --version

如果看到版本号,比如 Python 3.9.13,好,系统级 Python 有了。但我强烈建议——不要直接用它。创建一个独立的虚拟环境。

3.2.1 创建虚拟环境

用 conda 的话:

conda create -n pubmed_drug python=3.9
conda activate pubmed_drug

用 venv 也行:

python -m venv pubmed_drug
source pubmed_drug/bin/activate  # Linux/Mac
pubmed_drug\Scripts\activate      # Windows

激活后,终端前面会多出 (pubmed_drug) 这个提示符。我见过有人忘记激活环境,结果库装到了系统 Python 里,后面跑项目时死活 import 不到。嗯,这一点必须注意。

3.3 核心库安装

环境激活好了,接下来装我们需要的工具。我习惯一次性列好 requirements.txt,然后一把梭。但这里,我拆开讲,方便你理解每个库是干什么的。

3.4 安装 Biopython

Biopython 是我们的「手」——用来抓 PubMed 文献。它的 Entrez 模块可以直接访问 NCBI 数据库。

pip install biopython

验证:

python -c "from Bio import Entrez; print(Entrez.email)"

如果没报错,说明装好了。注意,这里 Entrez.email 其实是空的。你需要自己在代码里设置邮箱。NCBI 要求你提供联系方式,不然请求会被限流甚至封禁。这是规约,不是代码问题。

⚠️ 重要提醒:使用 Biopython 的 Entrez 模块前,必须设置你的邮箱。否则 NCBI 可能断开你的连接。我曾经在凌晨跑批量抓取,忘了设邮箱,结果跑了半小时全断了——白干。
from Bio import Entrez
Entrez.email = "your.email@example.com"

3.5 安装 spaCy 与下载模型

spaCy 是 NLP 界的瑞士军刀。分词、词性标注、命名实体识别,一条龙。对于生物医学文本,我们还要装它的专用模型。

pip install spacy

装完后,下载通用英文模型:

python -m spacy download en_core_web_sm

如果是生物医学场景,我推荐用 en_ner_bc5cdr_md —— 它专门针对药物和疾病实体进行了训练。

pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.5.4/en_ner_bc5cdr_md-0.5.4.tar.gz

验证:

python -c "import spacy; nlp = spacy.load('en_core_web_sm'); doc = nlp('Aspirin inhibits COX-2.'); print([(ent.text, ent.label_) for ent in doc.ents])"

你应该能看到 [('Aspirin', 'DRUG'), ('COX-2', 'GENE')] 类似的输出。

3.6 安装 transformers 与 PyTorch

transformers 是 Hugging Face 家的王牌库。它让我们能用预训练的语言模型,比如 BioBERT、PubMedBERT,来做更精准的实体识别。

pip install transformers

transformers 底层依赖深度学习框架。我一般用 PyTorch。安装前,先去 PyTorch 官网根据你的 CUDA 版本选命令。如果你没有 GPU,装 CPU 版本就行:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

验证 transformers:

python -c "from transformers import pipeline; ner = pipeline('ner', model='dmis-lab/biobert-v1.1'); print(ner('Aspirin inhibits COX-2.'))"

第一次运行会下载模型,稍微有点慢。看到结果出来,就表示环境通了。

3.7 工具安装速查表

工具/库 用途 安装命令 验证方法 避坑要点
Python 3.9+ 基础运行环境 conda/venv 创建 python --version 别用系统 Python 裸跑
Biopython PubMed 文献抓取 pip install biopython from Bio import Entrez 必须设 Entrez.email
spaCy 基础 NLP 流水线 pip install spacy spacy.load('en_core_web_sm') 模型和数据要分开下载
SciSpacy (BC5CDR) 生物医学实体识别 pip install 指定 URL 实体识别输出 模型较大,要有耐心
transformers 预训练语言模型 pip install transformers pipeline('ner', model=...) 注意 PyTorch 版本匹配
PyTorch 深度学习后端 官网命令安装 import torch CUDA 版本必须对

3.8 一次性安装脚本

你可能觉得一个个装麻烦。好,我给你一个 requirements.txt,一步到位:

biopython==1.81
spacy==3.7.2
transformers==4.36.2
torch==2.1.2
scispaCy==0.5.4
en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl

然后运行:

pip install -r requirements.txt

嗯,这里要特别说明:en-core-web-sm 那一行是指定直接从 GitHub 的模型包安装。这样你就不用再跑 python -m spacy download 了。

💡 实用技巧:如果下载速度慢,可以换国内镜像源。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

3.9 环境验证脚本

所有东西装完后,跑一遍这个脚本。它能一次性验证所有核心依赖是否正常工作:

# check_env.py
import sys
print(f"Python 版本: {sys.version}")

try:
    from Bio import Entrez
    print("✅ Biopython: OK")
except ImportError:
    print("❌ Biopython: 未安装")

try:
    import spacy
    nlp = spacy.load("en_core_web_sm")
    doc = nlp("Aspirin inhibits COX-2.")
    print("✅ spaCy: OK")
except Exception as e:
    print(f"❌ spaCy: {e}")

try:
    from transformers import pipeline
    print("✅ transformers: OK")
except ImportError:
    print("❌ transformers: 未安装")

try:
    import torch
    print(f"✅ PyTorch: OK, CUDA 可用: {torch.cuda.is_available()}")
except ImportError:
    print("❌ PyTorch: 未安装")

保存为 check_env.py,然后执行:

python check_env.py

如果所有项都打上了绿色对勾,恭喜你,环境搭建完毕。如果某一项挂了,回去检查对应的安装步骤。

🎯 核心要点:
  1. 必须使用虚拟环境,不要污染系统 Python。
  2. Biopython 的 Entrez 必须设置邮箱,这是使用 NCBI API 的硬性要求。
  3. spaCy 模型和数据是分开的,pip 安装库之后,还要下载模型文件。
  4. transformers 的预训练模型会在首次使用时自动下载,确保网络畅通。
  5. PyTorch 的版本必须与你的 CUDA 驱动兼容,否则默认退回到 CPU 模式。