Skip to content

Module 10: 机器学习与 LLM API

从 Scikit-learn 到大语言模型 —— 探索 Python 的前沿应用


本章概览

本章将带你进入 Python 最激动人心的领域:机器学习大语言模型(LLM)API。你将学习使用 Scikit-learn 构建预测模型,了解深度学习基础,并掌握调用 OpenAI、Anthropic、DeepSeek 等 LLM API 的实用技能。

重要提示:本章内容较为前沿,但对社科研究有巨大应用潜力(文本分析、内容分类、数据标注等)。建议在掌握 Module 9 后学习。


学习目标

学完本章后,你将能够:

  • 理解机器学习的基本概念
  • 使用 Scikit-learn 构建预测模型
  • 了解深度学习和神经网络基础
  • 调用 OpenAI GPT API 进行文本分析
  • 使用 LLM 进行情感分析、文本分类
  • 批量处理文本数据
  • 在研究中应用 LLM 技术

章节内容

01 - Scikit-learn 基础

核心问题: 如何用 Python 做机器学习?

核心内容:

  • 什么是机器学习?
    • 监督学习:回归(预测数值)、分类(预测类别)
    • 非监督学习:聚类、降维
    • Scikit-learn:Python 最流行的机器学习库
  • 线性回归示例:
    python
    from sklearn.linear_model import LinearRegression
    
    # 准备数据
    X = df[['education', 'age']]  # 特征
    y = df['income']  # 目标变量
    
    # 训练模型
    model = LinearRegression()
    model.fit(X, y)
    
    # 查看系数
    print(model.coef_)  # [5000, 1200]
    print(model.intercept_)  # 20000
    
    # 预测
    predictions = model.predict([[16, 30]])  # education=16, age=30
  • 分类模型(Logistic 回归):
    python
    from sklearn.linear_model import LogisticRegression
    
    # 预测是否高收入
    X = df[['education', 'age']]
    y = (df['income'] > 80000).astype(int)  # 0 或 1
    
    model = LogisticRegression()
    model.fit(X, y)
    
    # 预测概率
    proba = model.predict_proba([[16, 30]])[0, 1]  # P(高收入)
  • 模型评估:
    python
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import r2_score, mean_squared_error
    
    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(
        X, y, test_size=0.2, random_state=42
    )
    
    # 训练
    model.fit(X_train, y_train)
    
    # 评估
    y_pred = model.predict(X_test)
    r2 = r2_score(y_test, y_pred)
    rmse = mean_squared_error(y_test, y_pred, squared=False)
  • 对比 Stata:
    • Stata: reg income education age
    • Python: LinearRegression().fit(X, y)
    • 区别:Scikit-learn 更侧重预测,Stata 更侧重推断

为什么重要?

  • 机器学习是预测和分类的强大工具
  • 社科应用:预测行为、文本分类、推荐系统
  • 与传统计量的互补

02 - 深度学习入门

核心问题: 什么是深度学习?

核心内容:

  • 深度学习 vs 传统机器学习:
    • 传统 ML:手工设计特征
    • 深度学习:自动学习特征(神经网络)
  • 神经网络基础:
    • 层(Layer):输入层、隐藏层、输出层
    • 激活函数:ReLU、Sigmoid
    • 反向传播:如何训练网络
  • PyTorch 简介:
    python
    import torch
    import torch.nn as nn
    
    # 定义简单神经网络
    class SimpleNN(nn.Module):
        def __init__(self):
            super().__init__()
            self.fc1 = nn.Linear(2, 10)  # 输入层 → 隐藏层
            self.fc2 = nn.Linear(10, 1)  # 隐藏层 → 输出层
        
        def forward(self, x):
            x = torch.relu(self.fc1(x))
            x = self.fc2(x)
            return x
  • Hugging Face Transformers:
    • 预训练模型:BERT、GPT、LLaMA
    • 用途:文本分类、情感分析、翻译
    python
    from transformers import pipeline
    
    # 情感分析
    classifier = pipeline("sentiment-analysis")
    result = classifier("This product is amazing!")
    # [{'label': 'POSITIVE', 'score': 0.99}]

社科应用:

  • 文本情感分析
  • 新闻主题分类
  • 社交媒体内容检测
  • 图像识别(抗议人群估计)

重要提示:深度学习需要 GPU 和大量数据,社科学生通常调用预训练模型而非从头训练。


03 - LLM API 快速使用

核心问题: 如何调用 GPT、Claude 等大模型?

核心内容:

  • 为什么社科学生要学 LLM API?
    • 文本数据分析(新闻、社交媒体、访谈)
    • 内容分类和编码
    • 文献总结和综述
    • 问卷设计助手
    • 数据清洗和标注
  • OpenAI API:
    python
    from openai import OpenAI
    
    client = OpenAI(api_key='your-api-key')
    
    response = client.chat.completions.create(
        model="gpt-5",
        messages=[
            {"role": "system", "content": "你是数据分析助手"},
            {"role": "user", "content": "解释什么是回归分析"}
        ]
    )
    
    print(response.choices[0].message.content)
  • Anthropic Claude API:
    python
    import anthropic
    
    client = anthropic.Anthropic(api_key='your-api-key')
    
    message = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=1024,
        messages=[
            {"role": "user", "content": "分析这段文本的情感"}
        ]
    )
  • DeepSeek API(国产,便宜):
    python
    from openai import OpenAI  # DeepSeek 兼容 OpenAI SDK
    
    client = OpenAI(
        api_key='your-deepseek-key',
        base_url='https://api.deepseek.com'
    )

实战案例:

案例 1:批量情感分析:

python
def analyze_sentiment(text):
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "情感分析专家。回答:正面、负面或中性"},
            {"role": "user", "content": f"分析:{text}"}
        ]
    )
    return response.choices[0].message.content

# 批量分析评论
reviews = df['comment'].tolist()
sentiments = [analyze_sentiment(r) for r in reviews]
df['sentiment'] = sentiments

案例 2:文本分类:

python
def classify_news(text, categories):
    prompt = f"""
    将以下新闻分类到这些类别之一:{', '.join(categories)}
    
    新闻:{text}
    
    只返回类别名称。
    """
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message.content.strip()

# 批量分类
categories = ['政治', '经济', '社会', '文化']
df['category'] = df['content'].apply(lambda x: classify_news(x, categories))

案例 3:结构化数据提取:

python
def extract_info(text):
    prompt = f"""
    从以下文本提取信息,返回 JSON 格式:
    - name: 人名
    - age: 年龄
    - occupation: 职业
    
    文本:{text}
    """
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{"role": "user", "content": prompt}]
    )
    return json.loads(response.choices[0].message.content)

# 批量提取
infos = [extract_info(text) for text in df['biography']]
df_info = pd.DataFrame(infos)

成本和效率:

  • GPT-4o-mini:约 $0.001/1K tokens(便宜)
  • GPT-5:约 $0.03/1K tokens(贵但更准)
  • DeepSeek:约 GPT 价格的 1/10(国产替代)
  • 批量处理:使用 ThreadPoolExecutor 并发调用

传统计量 vs 机器学习 vs LLM

维度传统计量 (Stata)机器学习 (Scikit-learn)LLM (GPT/Claude)
目标因果推断、解释预测文本理解、生成
输出系数、p 值预测值、准确率文本、分类、标签
数据量小样本也可以需要中大样本零样本/少样本学习
可解释性
适用场景论文发表预测建模文本分析、内容生成

互补使用策略:

  1. 探索性分析:LLM 快速分类和标注
  2. 预测建模:机器学习构建预测器
  3. 因果推断:传统计量(DID、RDD、IV)
  4. 论文发表:传统计量为主,ML/LLM 为辅

如何学习本章?

学习路线

第 1-2 天(4小时): Scikit-learn 基础

  • 阅读 01 - Scikit-learn 基础
  • 练习线性回归和 Logistic 回归
  • 理解训练集/测试集划分

第 3 天(2小时): 深度学习入门

  • 阅读 02 - 深度学习入门
  • 了解神经网络概念
  • 尝试 Hugging Face pipeline

第 4-5 天(6小时): LLM API

  • 阅读 03 - LLM API 快速使用
  • 注册 OpenAI/DeepSeek 账号
  • 实现文本分类和情感分析
  • 批量处理真实数据

总时间: 12 小时(1 周)

最小化学习路径

对于社科学生,优先级如下:

必学(实用技能,6小时):

  • 03 - LLM API 快速使用(完整学习)
  • 情感分析和文本分类
  • 批量处理技巧

重要(扩展视野,4小时):

  • 01 - Scikit-learn 基础(线性回归、Logistic)
  • 理解预测 vs 推断的区别

可选(深入探索):

  • 02 - 深度学习入门
  • Fine-tuning 预训练模型
  • Prompt Engineering 技巧

学习建议

  1. LLM 是社科学生的"超级助手"

    • 文本分类:手工编码 1000 篇需要几周,LLM 几小时
    • 情感分析:传统方法需要训练模型,LLM 直接调用
    • 数据清洗:LLM 可以理解非结构化文本
  2. 注意 LLM 的局限性

    • 不能用于因果推断(仍需 DID、IV 等方法)
    • 可能有偏见(训练数据的偏见)
    • 需要验证(不要盲目信任 LLM 输出)
    • 最佳实践:LLM 标注 + 人工抽样验证
  3. 成本控制

    • 开发阶段用 GPT-3.5-Turbo(便宜)
    • 生产阶段考虑 DeepSeek(更便宜)
    • 批量处理时设置最大 token 限制
    • 缓存重复请求的结果
  4. 实践项目:新闻情感分析流水线

    python
    import pandas as pd
    from openai import OpenAI
    from tqdm import tqdm
    
    client = OpenAI(api_key='your-key')
    
    def analyze_sentiment(text):
        try:
            response = client.chat.completions.create(
                model="gpt-3.5-turbo",
                max_tokens=10,
                messages=[
                    {"role": "system", "content": "情感分析。回答:正面/负面/中性"},
                    {"role": "user", "content": text}
                ]
            )
            return response.choices[0].message.content.strip()
        except Exception as e:
            print(f"错误: {e}")
            return "未知"
    
    # 读取数据
    df = pd.read_csv('news.csv')
    
    # 批量分析(带进度条)
    sentiments = []
    for text in tqdm(df['content']):
        sentiment = analyze_sentiment(text)
        sentiments.append(sentiment)
    
    df['sentiment'] = sentiments
    
    # 保存结果
    df.to_csv('news_with_sentiment.csv', index=False)
    
    # 统计
    print(df['sentiment'].value_counts())

常见问题

Q: 机器学习能替代传统计量吗? A: 不能。两者目标不同:

  • 机器学习:预测("这个用户会点击广告吗?")
  • 传统计量:因果推断("广告导致了多少购买?")
  • 论文发表仍以传统计量为主

Q: LLM API 很贵吗? A:

  • GPT-3.5-Turbo:1000 条短文本约 $1-2(很便宜)
  • GPT-5:1000 条约 $30(贵)
  • DeepSeek:GPT 价格的 10%(国产替代)
  • 学术研究的文本量,成本通常 <$100

Q: LLM 标注准确吗?能用于论文吗? A:

  • 准确率:通常 80-95%(取决于任务)
  • 最佳实践:LLM 标注 + 人工验证(抽样 10-20%)
  • 顶刊接受度:越来越多论文使用 LLM 辅助标注
  • 必须说明:在方法部分解释 LLM 使用和验证流程

Q: 需要 GPU 吗? A:

  • 不需要(调用 API)
  • 只有训练大模型才需要 GPU
  • 社科学生 99% 情况是调用 API,不训练模型

Q: 如何选择 LLM API? A:

  • 开发/测试:GPT-3.5-Turbo(快且便宜)
  • 高质量需求:GPT-5 或 Claude-3.5-Sonnet
  • 预算有限:DeepSeek(国产,便宜)
  • 中文优先:DeepSeek、通义千问、文心一言

下一步

完成本章后,你将掌握:

  • 使用 Scikit-learn 构建预测模型
  • 了解深度学习和神经网络基础
  • 调用 OpenAI/Claude/DeepSeek API
  • 批量处理文本数据(情感分析、分类)
  • 在社科研究中应用 LLM 技术

Module 11 中,我们将学习代码规范、调试和 Git 版本控制,让你的代码更专业。

LLM 正在改变社科研究!掌握这项技能,让你的研究如虎添翼!


快速链接

基于 MIT 许可证发布。内容版权归作者所有。