NLP 实验3 FAQ 政务问答

训练模型

构建索引

测试性能

检测服务api情况

实际效果受制于训练数据集和训练参数,模型效果针对不同问题参差不齐

政务问答 FAQ 系统

基于 SimCSE 和 WR 策略的无监督政务问答检索系统,能够高效处理政府工作人员日常政策解读工作。

项目特色

  1. 低门槛
    • 无需相似 Query-Query 标注数据
    • 使用无监督对比学习构建语义检索系统
  2. 效果好
    • 采用预训练语言模型 BERT 作为基础编码器
    • 集成 WR(Word Repetition)策略增强语义表示
  3. 性能快
    • 基于 FAISS 高效向量检索
    • 轻量级 API 服务快速部署

环境要求

  • Python 3.8+
  • PyTorch 2.0+
  • FAISS 索引库
  • 其他依赖见requirements.txt

快速开始

  1. 安装依赖
pip install -r requirements.txt
  1. 准备数据
    • 训练数据: data/processed/train.csv (每行一个问题)
    • 语料库数据: data/processed/corpus.csv (每行一个 FAQ 问题)
    • 测试数据: data/processed/test_pair.csv (tab 分隔的问题对)
  2. 训练模型
python main.py train
  1. 构建索引
python main.py build_index
  1. 评估模型
python main.py evaluate
  1. 启动服务
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)策略,通过无监督对比学习来学习文本的语义表示。

  1. SimCSE 原理:
    • 将同一句子的不同 dropout 版本作为正样本对
    • 同一 batch 中的其他句子作为负样本
    • 通过对比学习拉近正样本对的表示,推开负样本对的表示
  2. WR 策略:
    • 通过随机重复句子中的词语来创建正样本
    • 保持句子语义不变但改变长度,增强表示鲁棒性

参考文献

ESimCSE: Enhanced Sample Building Method for Contrastive Learning of Unsupervised Sentence Embedding

SimCSE: Simple Contrastive Learning of Sentence Embeddings

本技术内容仅供学习和交流使用,如有疑问请联系qq2014160588并注明来意。请确保在使用过程中遵守相关法律法规。任何因使用本技术内容而导致的直接或间接损失,作者概不负责。用户需自行承担因使用本技术内容而产生的所有风险和责任。请勿将本技术内容用于任何非法用途。
上一篇
下一篇