第三阶段:数据与特征工程

开源的自然语言数据管理和标注平台,专注于以数据为中心的NLP模型构建方法

DataLabelingNLPWeakSupervisionGitHubTextFreeEnglish

Refinery - 数据科学家的开源自然语言数据管理工具

项目概述

Refinery是由Kern AI开发的开源数据标注和训练数据管理平台,专门针对自然语言处理(NLP)任务。该项目旨在帮助数据科学家"构建更好的NLP模型,采用以数据为中心的方法",并"将训练数据视为软件工件"。

核心特性

1. 数据标注功能

  • 手动和程序化标注:支持分类和跨度标注任务
  • 半自动化标注:通过启发式方法自动化部分标注工作
  • 多任务支持:单个项目可处理多个标注任务

2. 数据管理能力

  • 智能数据浏览器:可按置信度、启发式重叠、用户、注释等维度过滤、排序和搜索数据
  • 数据质量监控:识别训练数据中的低质量子集
  • 项目指标概览:提供置信度分布、标签分布和混淆矩阵

3. 机器学习集成

  • 🤗 Hugging Face集成:自动创建文档级和token级嵌入
  • spaCy集成:利用预训练语言模型
  • 神经搜索:基于Qdrant的相似记录检索和异常检测

4. 启发式和弱监督

  • 标注函数:创建和管理基于规则的自动标注逻辑
  • 弱监督学习:整合多个噪声和不完美的启发式方法
  • 知识库管理:创建和管理查找列表支持标注过程

5. 协作功能

  • 团队工作空间:多用户环境(商业版本)
  • 角色基础访问控制:管理用户权限
  • 众包标注集成:支持外部标注工作流

技术架构

核心服务

- embedder: 嵌入生成服务
- weak-supervisor: 弱监督学习服务
- tokenizer: 分词服务
- neural-search: 神经搜索服务
- ui: 用户界面
- gateway: API网关

第三方集成

- PostgreSQL: 数据存储
- Minio: 对象存储
- MailHog: 邮件服务
- Ory Kratos: 身份管理
- Ory Oathkeeper: 访问控制

机器学习库

- scikit-learn: 传统机器学习
- spaCy: 自然语言处理
- Hugging Face Transformers: 预训练模型
- Qdrant: 向量数据库

安装和使用

快速安装

# 使用pip安装
pip install kern-refinery

# 启动服务
cd your-project-directory
refinery start

# 访问应用
# 浏览器打开 http://localhost:4455

手动安装

# 克隆仓库
git clone https://github.com/code-kern-ai/refinery.git
cd refinery

# 启动服务 (Mac/Linux)
./start

# 启动服务 (Windows)
start.bat

# 停止服务
./stop  # 或 stop.bat (Windows)

数据格式支持

输入格式

  • JSON文件
  • CSV文件
  • 电子表格
  • 文本文件
  • 通用JSON格式

输出格式

[
  {
    "running_id": "0",
    "headline": "T. Rowe Price (TROW) Dips More Than Broader Markets",
    "date": "Jun-30-22 06:00PM  ",
    "headline__sentiment__MANUAL": null,
    "headline__sentiment__WEAK_SUPERVISION": "NEGATIVE",
    "headline__sentiment__WEAK_SUPERVISION__confidence": 0.62,
    "headline__entities__MANUAL": null,
    "headline__entities__WEAK_SUPERVISION": [
      "STOCK", "STOCK", "STOCK", "STOCK", "STOCK", "STOCK", "O", "O", "O", "O", "O"
    ],
    "headline__entities__WEAK_SUPERVISION__confidence": [
      0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.00, 0.00, 0.00, 0.00, 0.00
    ]
  }
]

Python SDK

项目提供了完整的Python SDK,支持:

  • 数据上传和下载
  • 项目管理
  • 标注数据导出
  • 与Rasa等框架的适配器
# 拉取数据
rsdk pull

# 推送数据
rsdk push <file_name>

开源bricks库

Refinery集成了开源的bricks库,提供:

  • 现成的自动化标注功能
  • 文本元数据提取(语言检测、句子复杂度等)
  • 预构建的标注函数模板

适用场景

理想用户群体

  1. 个人NLP项目开发者:缺乏足够标注数据的研究人员
  2. 团队协作项目:需要管理和评估训练数据质量的团队
  3. 资源有限的项目:需要优化标注资源(人力、预算、时间)的项目

主要用例

  • 情感分析
  • 命名实体识别
  • 文本分类
  • 信息提取
  • 多语言文本处理

商业模式

  • 开源版本:单用户版本,完全免费
  • 商业版本:多用户环境,提供团队协作功能
  • 企业级解决方案:本地部署和定制化服务

社区和支持

  • Discord社区:技术讨论和支持
  • GitHub Issues:问题报告和功能请求
  • 文档中心:详细的使用指南和教程
  • YouTube频道:视频教程和演示

项目优势

  1. 数据为中心的方法:专注于提高训练数据质量而非仅仅增加数据量
  2. 半自动化标注:大幅减少手动标注工作量
  3. 可扩展架构:微服务架构支持灵活部署
  4. 开源透明:完全开源,社区驱动发展
  5. 企业级功能:支持大规模部署和团队协作

学习资源

Refinery代表了现代NLP数据管理的最佳实践,为数据科学家提供了一个强大而灵活的工具来构建高质量的训练数据集。