该项目基于Gensim的Word2vec词向量模型,通过平均向量,编辑距离,词移距离等相关理论基础,编写的相似性计算方法。
在Synonyms基础之上进行了修改,以便支持自定义模型的选择。
使用方式分为单独使用以及web接口方法是调用
只需要下载code/model文件夹即可,然后放到自己项目中。需要安装依赖包:
pip install -r requirements.txt
需要下载code内的全部代码,加载到自己的项目中。如果已有Flask的web服务,需要自行调整,API的路由定义在web/api下面。只需要将代码放置到自己的项目中,然后将路由配置到Flask APP 的蓝图配置中即可。
需要安装的依赖包:
pip install -r requirements_web.txt
from model import PhraseSimilarity
sim_obj = PhraseSimilarity(model_path='[自定义模型]')
model_path:该参数需要用户指定模型的地址,测试模型可以通过文档下方的模型获取下载,
或者用户可以自己使用Gensim库的Word2vec模型进行训练获得
simlarity = sim_obj.compare(sen1, sen2)
结果解释:直接返回两个词语 sen1和sen2 的相似度值
方式一:返回相似度矩阵,二维数组方式
result = sim_obj.compare_matrix(phrase_list)
结果解释:result[i][j]表示第i个词语与第j个词语的相似度值
方式二:以Map的方式返回
sim_obj.compare_map(phrase_list)
结果解释:通过result.get('k-i-j')获取第i个词语与第j个词语的相似度值
提供了Flask Web服务的访问方式。如果需要通过网络方式访问,需要运行项目web服务,然后以API接口的方式进行调用,步骤如下。
用户可以根据自己的语料进行训练后,在配置文件中定义MODEL_PATH路径既可。
{
"MODEL_PATH": "路径/model_name.bin" # 配置word2vec模型的路径
}
可以使用默认,如果需要不同端口,可以在config/server.json中进行配置。
{
"HOST": "127.0.0.1", # 配置哪些IP地址可以访问,默认本机,如果外网访问配置为"0.0.0.0"
"SERVER_PORT": 8099, # 自定义对外端口开放
"JSON_AS_ASCII": false # 无需修改,防止JSON化时中文乱码
}
python run_web.py
访问接口通过 http://localhost:8099/api访问。
注意:接口前缀统一为 '/api/',下面说明中均省略前缀。
其中 mode[map/mat]分别对应返回数据格式为map类型和矩阵类型
接口名称 | 接口地址 | 接口说明 |
---|---|---|
短语相似度比较 | /similarity/compare | 两个短语之间的相似度对比,返回对比相似度 |
多短语相似对比 | /similarity/mutual | 两个以上短语相互对比,返回两两之间的对比结果 |
{
"code": 200, //code为200表示成功,其他表示API访问失败
"message": "结果信息", // 失败后返回的信息
"data": "相似度对比结果" // 对应各类对比,相应的返回结果
}
-
短语相似度对比
- 请求示例
请求地址:http://localhost:8099/api/similarity/compare 请求类型:POST
- 请求参数
{ "sen1": "用户信息", "sen2": "新增用户" }
- 返回结果
{ "code": 200, "data": { "sen1": "用户信息", "sen2": "新增用户", "similar": "0.51" }, "message": "操作成功" }
-
多短语两两相互对比
- 请求示例
请求地址:http://localhost:8099/api/similarity/mutual 请求类型:POST
- 请求参数
{ "mode": "map", "sens": "用户信息;新增用户;删除用户;新建客户" } mode支持map和mat两种模式,默认为map
- 返回结果
{ "code": 200, "data": { "k-0-1": 0.512, "k-0-2": 0.537, "k-0-3": 0.459, "k-1-2": 0.513, "k-1-3": 0.934, "k-2-3": 0.465 }, "message": "操作成功" }
百度网盘地址:获取模型 提取码:yesd