Skip to content

Instantly share code, notes, and snippets.

@sawyerbutton
Created April 26, 2025 04:47
Show Gist options
  • Select an option

  • Save sawyerbutton/17ba8d265da2e43d5d2ae3bcb12dd76a to your computer and use it in GitHub Desktop.

Select an option

Save sawyerbutton/17ba8d265da2e43d5d2ae3bcb12dd76a to your computer and use it in GitHub Desktop.

《AI工程核心算法拆解》课程设计


课程定位

聚焦技术实现细节,通过算法原理→代码实现→工业级优化的递进式教学,培养学员的深度技术落地能力。技术权重占比85%,商业与工程占比15%。


课程架构设计

graph TD
    A[技术模块] --> B[算法原理]
    A --> C[代码实现]
    A --> D[工业级优化]
    B --> E[核心公式推导]
    C --> F[关键代码解读]
    D --> G[生产环境适配]
Loading

核心模块与您的项目技术映射

模块1:文档解析核心算法(对应您的预处理模块)

重点技术拆解
  1. PDF结构解析算法

    • 数学原理$$\text{页面结构} = \arg\max_{S} P(S|D) = \prod_{b \in S} P(b|D) \cdot \prod_{(b_i,b_j)} \Psi(b_i,b_j)$$ (D: 文档数据,S: 结构假设,Ψ: 空间关系约束)
    • 代码映射
      # 您的construct_page_dict.py核心逻辑
      def build_page_structure(spans):
          spatial_graph = build_spatial_graph(spans)  # 空间关系图构建
          return hungarian_algorithm(spatial_graph)  # 最优结构匹配
    • 工业级挑战:处理扫描件倾斜、阴影干扰等现实噪声
  2. 重叠边界框处理算法

    • 算法流程
      graph TD
          A[检测所有IOU>0.3的框] --> B{主次判定}
          B -->|主体框| C[保留并分割重叠区]
          B -->|次要框| D[丢弃或合并]
          C --> E[生成修正后框]
      
      Loading
    • 代码实现
      # 您的remove_bbox_overlap.py核心方法
      def resolve_overlaps(bboxes):
          for b1, b2 in find_conflicts(bboxes):
              if is_primary(b1):
                  bboxes.append(split_bbox(b1, b2))
                  bboxes.remove(b2)

模块2:领域模型开发(对应您的MagicModel模块)

关键技术深度解耦
  1. 空间关系建模

    • 数学模型
      \text{区块关系} = \begin{cases} 
      \text{水平相邻} & \text{if } |y_c^{b1} - y_c^{b2}| < \epsilon_y \\
      \text{垂直包含} & \text{if } \text{IoU}_v > 0.7 
      \end{cases}
      
      ($y_c$为区块纵轴中心,$\epsilon_y$为容忍阈值)
    • 代码映射
      # 您的__tie_up_category_by_distance_v3方法
      def calculate_spatial_relation(b1, b2):
          if vertical_overlap(b1, b2) > 0.7:
              return CONTAINMENT
          elif horizontal_proximity(b1, b2):
              return ADJACENCY
  2. 表格结构识别算法

    • 核心步骤
      1. 基于OpenCV的线检测:
        lines = cv2.HoughLinesP(image, rho=1, theta=np.pi/180, threshold=50, 
                              minLineLength=30, maxLineGap=10)
      2. 单元格合并检测(您的表格处理模块):
        def detect_merged_cells(lines):
            # 水平线聚类
            h_clusters = DBSCAN(eps=3).fit(lines[:, [1,3]])
            # 垂直线聚类
            v_clusters = DBSCAN(eps=3).fit(lines[:, [0,2]])
            return reconstruct_grid(h_clusters, v_clusters)

模块3:生成优化算法(对应您的后处理模块)

核心算法拆解
  1. LLM辅助公式修正

    • 算法流程
      graph LR
          A[原始LaTeX] --> B{语法检测}
          B -->|正确| C[直接输出]
          B -->|错误| D[LLM修正]
          D --> E[渲染验证]
          E -->|失败| F[符号级修复]
      
      Loading
    • 关键技术
      • 语法树比对算法(AST Diff)
      • 渲染失败检测(MathJax异常捕获)
  2. 段落智能分割算法

    • 决策模型$$\text{分割点} = \arg\max_{t} \left[ \alpha \cdot \Delta_{\text{语义}} + \beta \cdot \Delta_{\text{布局}} \right]$$ (α=0.6, β=0.4 为可调参数)
    • 代码实现
      # 您的para_split_v3.py核心逻辑
      def find_split_points(blocks):
          semantic_shifts = bert_embeddings(blocks).diff()  # 语义突变
          layout_shifts = calculate_margin_changes(blocks) # 布局变化
          return peaks(semantic_shifts * 0.6 + layout_shifts * 0.4)

课程交付设计(待定)

教学形式创新

  1. 算法沙盒

    # 公式修正算法Demo
    original = r"\int_{0}^{1} x^2 dx"
    repaired = llm_fix_formula(original)
    Math(repaired)  # 显示渲染结果
    

    ![公式修正示例](https://via.placeholder.com/300x100?text=∫₀¹x²dx→\int_{0}^{1} x^2 ,dx)

  2. 代码手术室

    # 学员需修复的故意损坏代码
    def split_paragraphs(blocks):
        # 此处缺少语义分析步骤
        return [blocks[0]]  

实验体系设计

实验类型 您的项目映射 考核重点
基础实验 边界框IOU计算 空间关系算法理解
进阶实验 表格结构重建 计算机视觉与聚类算法
创新实验 LLM修正后的公式评估 自动化测试体系构建

课程优势矩阵

维度 传统课程 本课程优势
技术深度 讲解API调用 深入算法实现层
代码规模 示例代码<100行 直接解剖工业级代码库
真实性 使用Toy Dataset 真实学术PDF处理场景
可迁移性 限定场景 提供算法抽象方法论

技术演进路线

timeline
    title 技术深度递进路径
    第1周 : 基础空间计算(IOU/包含检测)
    第3周 : 复杂布局解析(您的布局分析模块)
    第5周 : 生成优化控制(LLM+规则引擎)
    第8周 : 工业级调优(内存管理/分布式处理)
Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment