何文松 71cca1726f debug: 添加实体位置信息调试日志 1 сар өмнө
..
app 71cca1726f debug: 添加实体位置信息调试日志 1 сар өмнө
tests 926e4a13ee feat: 实现 NER 实体识别服务并移除 Docker 相关配置 1 сар өмнө
.env.example 7930fda12e chore: 切换默认模型为 qwen3-nothink 无思考版本 1 сар өмнө
README.md 68d3d79433 feat: 添加 UniversalNER 模型支持 1 сар өмнө
requirements.txt 926e4a13ee feat: 实现 NER 实体识别服务并移除 Docker 相关配置 1 сар өмнө

README.md

NER Service

命名实体识别(NER)服务,提供实体提取和关系抽取功能。

功能特性

  • 实体提取:从文本中识别人名、机构、地点、日期、数值、设备等实体
  • 关系抽取:从实体间抽取语义关系
  • 多模式支持:
    • rule:基于规则的简单 NER(开发测试用,速度快但准确率低)
    • ollama:使用本地 Ollama LLM(推荐生产环境,准确率高)
    • api:使用远程 API(如百炼、DeepSeek)
  • 长文本自动分块处理

快速开始

1. 安装依赖

cd python-services/ner-service
pip install -r requirements.txt

2. 配置环境

# 复制配置文件
cp .env.example .env

# 编辑配置(选择 NER 模式)
vim .env

3. 启动服务

# 规则模式(默认,用于开发测试)
NER_MODEL=rule uvicorn app.main:app --host 0.0.0.0 --port 8001

# Ollama LLM 模式(推荐生产环境)
NER_MODEL=ollama OLLAMA_MODEL=qwen2.5:7b uvicorn app.main:app --host 0.0.0.0 --port 8001

4. 确保 Ollama 服务可用(如使用 ollama 模式)

# 安装 Ollama(如未安装)
curl -fsSL https://ollama.com/install.sh | sh

# 拉取推荐模型
ollama pull qwen2.5:7b

# 确认服务运行
curl http://localhost:11434/api/tags

API 接口

健康检查

GET /health

实体提取

POST /ner/extract
Content-Type: application/json

{
  "documentId": "doc-001",
  "text": "待提取的文本内容...",
  "entityTypes": ["PERSON", "ORG", "LOC"],  // 可选
  "extractRelations": true
}

关系抽取

POST /ner/relations
Content-Type: application/json

{
  "documentId": "doc-001",
  "text": "原始文本",
  "entities": [...]  // 已提取的实体列表
}

实体类型

类型 说明 示例
PERSON 人名 张三、李经理
ORG 机构 成都检测公司
LOC 地点 成都市高新区
DATE 日期 2024年5月15日
NUMBER 数值 100万元、50分贝
DEVICE 设备 噪音检测设备
PROJECT 项目 环境监测项目
TERM 专业术语 -

关系类型

类型 说明
负责 主体负责某事
属于 隶属关系
位于 位置关系
包含 包含关系
使用 使用关系
检测 检测关系
合作 合作关系

配置说明

基础配置

配置项 说明 默认值
NER_MODEL NER 模型类型 (rule/ollama/api) rule
LOG_LEVEL 日志级别 INFO
MAX_TEXT_LENGTH 最大文本长度 50000

Ollama 模式配置

配置项 说明 默认值
OLLAMA_URL Ollama 服务地址 http://localhost:11434
OLLAMA_MODEL 使用的模型 qwen2.5:7b
OLLAMA_TIMEOUT 请求超时(秒) 120
CHUNK_SIZE 分块大小(字符) 2000
CHUNK_OVERLAP 分块重叠(字符) 200

推荐模型

模型 大小 中文能力 特点 推荐场景
zeffmuks/universal-ner ~4.2GB ⭐⭐⭐ NER 专用,速度快 首选
qwen2.5:7b ~4.7GB ⭐⭐⭐⭐⭐ 通用 LLM,中文强 需要复杂理解
qwen2.5:14b ~9GB ⭐⭐⭐⭐⭐ 更强的通用能力 显存充足时

UniversalNER vs 通用 LLM:

  • UniversalNER: 专为 NER 优化,输出简洁,速度快
  • Qwen: 通用能力强,可输出详细信息(如位置),但较慢

测试

# 运行测试
pytest tests/ -v

# 手动测试 NER
curl -X POST http://localhost:8001/ner/extract \
  -H "Content-Type: application/json" \
  -d '{"documentId":"test", "text":"2024年5月15日,成都检测公司完成了环境监测项目", "extractRelations": true}'

开发计划

  • 基于规则的 NER
  • Ollama LLM 模式(支持长文本分块)
  • 集成 spaCy 中文模型
  • 集成 Transformers NER 模型
  • 实现远程 API 模式(百炼)
  • 优化关系抽取准确率