训练模型
构建索引
测试性能
检测服务api情况
实际效果受制于训练数据集和训练参数,模型效果针对不同问题参差不齐
政务问答 FAQ 系统
基于 SimCSE 和 WR 策略的无监督政务问答检索系统,能够高效处理政府工作人员日常政策解读工作。
项目特色
- 低门槛
- 无需相似 Query-Query 标注数据
- 使用无监督对比学习构建语义检索系统
- 效果好
- 采用预训练语言模型 BERT 作为基础编码器
- 集成 WR(Word Repetition)策略增强语义表示
- 性能快
- 基于 FAISS 高效向量检索
- 轻量级 API 服务快速部署
环境要求
- Python 3.8+
- PyTorch 2.0+
- FAISS 索引库
- 其他依赖见
requirements.txt
快速开始
- 安装依赖
pip install -r requirements.txt
- 准备数据
- 训练数据:
data/processed/train.csv
(每行一个问题) - 语料库数据:
data/processed/corpus.csv
(每行一个 FAQ 问题) - 测试数据:
data/processed/test_pair.csv
(tab 分隔的问题对)
- 训练数据:
- 训练模型
python main.py train
- 构建索引
python main.py build_index
- 评估模型
python main.py evaluate
- 启动服务
python main.py serve
API 使用
启动服务后,可以通过以下 API 检索相关问题:
# 设置PowerShell编码为UTF-8
$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# 然后再执行请求
$body = @{
query = "南昌市出台了哪些企业稳岗就业政策?"
top_k = 5
} | ConvertTo-Json
Invoke-RestMethod -Uri "http://localhost:8000/search" -Method Post -ContentType "application/json" -Body $body
模型原理
本项目基于 SimCSE (Simple Contrastive Learning of Sentence Embeddings)和 WR(Word Repetition)策略,通过无监督对比学习来学习文本的语义表示。
- SimCSE 原理:
- 将同一句子的不同 dropout 版本作为正样本对
- 同一 batch 中的其他句子作为负样本
- 通过对比学习拉近正样本对的表示,推开负样本对的表示
- WR 策略:
- 通过随机重复句子中的词语来创建正样本
- 保持句子语义不变但改变长度,增强表示鲁棒性
参考文献
ESimCSE: Enhanced Sample Building Method for Contrastive Learning of Unsupervised Sentence Embedding
SimCSE: Simple Contrastive Learning of Sentence Embeddings