http://aias.top/
问答系统(Question Answering System, QA)是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。问答系统是人工智能和自然语言处理领域中一个倍受关注并具有广泛发展前景的研究方向。
本例子基于文本搜索引擎,支持上传csv文件,使用句向量模型提取特征,并基于milvus向量引擎进行后续检索。
句向量是指将语句映射至固定维度的实数向量。将不定长的句子用定长的向量表示,为NLP下游任务提供服务。 支持 15 种语言: Arabic, Chinese, Dutch, English, French, German, Italian, Korean, Polish, Portuguese, Russian, Spanish, Turkish.
句向量应用:
# 安装依赖包
npm install
# 运行
npm run dev
npm run build:prod
cd /usr/local/etc/nginx/
vi /usr/local/etc/nginx/nginx.conf
# 编辑nginx.conf
server {
listen 8080;
server_name localhost;
location / {
root /Users/calvin/Documents/qa_system/dist/;
index index.html index.htm;
}
......
# 重新加载配置:
sudo nginx -s reload
# 部署应用后,重启:
cd /usr/local/Cellar/nginx/1.19.6/bin
# 快速停止
sudo nginx -s stop
# 启动
sudo nginx
# 文件存储路径
file:
mac:
path: ~/file/
linux:
path: /home/aias/file/
windows:
path: D:/aias/file/
# 文件大小 /M
maxSize: 3000
...
# 运行程序
java -jar qa-system-0.1.0.jar
安装文档
sudo docker pull milvusdb/milvus:0.10.0-cpu-d061620-5f3c00
vector_engine.zip
/Users/calvin/vector_engine为主机路径,根据需要修改。conf下为引擎所需的配置文件。
docker run -d --name milvus_cpu_0.10.0 \
-p 19530:19530 \
-p 19121:19121 \
-p 9091:9091 \
-v /Users/calvin/vector_engine/db:/var/lib/milvus/db \
-v /Users/calvin/vector_engine/conf:/var/lib/milvus/conf \
-v /Users/calvin/vector_engine/logs:/var/lib/milvus/logs \
-v /Users/calvin/vector_engine/wal:/var/lib/milvus/wal \
milvusdb/milvus:0.10.0-cpu-d061620-5f3c00
##################### 向量引擎 ###############################
search:
host: 127.0.0.1
port: 19530
indexFileSize: 1024 # maximum size (in MB) of each index file
nprobe: 256
nlist: 16384
faceDimension: 512 #dimension of each vector
faceCollectionName: questions #collection name
commDimension: 512 #dimension of each vector
commCollectionName: comm #collection name
2). 点击特征提取按钮. 等待CSV文件解析,特征提取,特征存入向量引擎。通过console可以看到进度信息。
String host = "127.0.0.1";
int port = 19530;
final String collectionName = "questions"; // collection name
MilvusClient client = new MilvusGrpcClient();
// Connect to Milvus server
ConnectParam connectParam = new ConnectParam.Builder().withHost(host).withPort(port).build();
try {
Response connectResponse = client.connect(connectParam);
} catch (ConnectFailedException e) {
e.printStackTrace();
}
// 检查 collection 是否存在
HasCollectionResponse hasCollection = hasCollection(client, collectionName);
if (hasCollection.hasCollection()) {
dropIndex(client, collectionName);
dropCollection(client, collectionName);
}
...
官网链接