Skip to content

xmxoxo/Tencent_ChineseEmbedding_Process

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

使用案例: 腾讯词向量搜索服务

腾讯词向量说明

腾讯AI Lab开源大规模高质量中文词向量数据,800万中文词 说明页面:https://ai.tencent.com/ailab/nlp/zh/embedding.html 下载地址 :https://ai.tencent.com/ailab/nlp/zh/data/Tencent_AILab_ChineseEmbedding.tar.gz

这个数据集提供了880万左右的词向量,维度为200

文件下载后大小为6.31G , 解压缩后大小为: 15.5G

向量提取处理

如果不想自己提取数据,可以直接下载1万条数据,进入第二步启动向量搜索服务

由于文件是文本格式,需要进行一下处理,把词和向量分别保存到数据文件和向量文件中,以便于向量搜索服务加载。、

这里提供了一个转换工具,可直接对数据进行提取, 把上面解压后的文本文件Tencent_AILab_ChineseEmbedding.txt放到dat目录下即可;

以下是使用说明:

11:55:48.15|F:>python dataprocess.py -h
usage: dataprocess.py [-h] -datfile DATFILE [-outpath OUTPATH]
                      [-dofilter DOFILTER] [-topn TOPN]

腾讯词向量提取工具

optional arguments:
  -h, --help          show this help message and exit
  -datfile DATFILE    数据文件名
  -outpath OUTPATH    输出目录
  -dofilter DOFILTER  是否过滤非中文,默认=0不过滤
  -topn TOPN          截取前N个向量,默认=0不截取

由于数据量很大,这里用下面的命令提取前1万条,作一个示例:

python dataprocess.py -outpath=./top1w -dofilter=1 -topn=10000

运行结果:

11:59:30.66|F:>python dataprocess.py -outpath=./top1w -dofilter=1 -topn=10000
运行参数: Namespace(datfile='./dat/Tencent_AILab_ChineseEmbedding.txt', dofilter=1, outpath='./top1w', topn=10000)
开始转换向量,请稍等...
总记录数:8824330
[进度: 0.11% 已过滤:  196] 第9999   行: 债务
正在保存字典文件...
正在保存向量文件...
转换完成, 处理10000行,过滤196行,输出9804行。

为了便于测试,这里把1万条数据打包上传了,文件名:top1w.zip

启动向量搜索服务

加载1万条词向量:

[2020-09-30 14:06:00,883]INFO -----------faiss向量搜索服务 v1.0.2-----------
[2020-09-30 14:06:00,883]INFO 正在加载数据文件...
[2020-09-30 14:06:00,883]INFO 加载数据文件完成: /mnt/sda1/corpora/TX_embeding/top1w/keywords.txt
[2020-09-30 14:06:00,884]INFO 正在加载向量并创建索引器...
[2020-09-30 14:06:00,892]INFO 向量文件:/mnt/sda1/corpora/TX_embeding/top1w/vector.npy
[2020-09-30 14:06:00,892]INFO 数据量:9803, 向量维度:200
[2020-09-30 14:06:00,892]INFO 距离计算方法:INNER_PRODUCT
[2020-09-30 14:06:00,892]INFO 监听端口:7801
[2020-09-30 14:06:01,131]INFO 索引创建完成,用时:0.247051秒
[2020-09-30 14:06:01,132]INFO Used Memory: 123.230 MB
[2020-09-30 14:06:01,169]INFO Running under Linux...

使用向量搜索服务进行加载,10万条数据 :

cd /mnt/sda1/transdat/sentence-similarity/vector_server
python VecSearch_faiss_server.py -port=7801 -npy='../tx_vector/top10w/vector.npy' -datfile='../tx_vector/top10w/keywords.txt'

服务端运行结果:

[2020-09-16 10:21:30,711]INFO 正在加载数据文件...
[2020-09-16 10:21:30,719]INFO 加载数据文件完成: ../tx_vector/top10w/keywords.txt
[2020-09-16 10:21:30,719]INFO 正在加载向量并创建索引器...
[2020-09-16 10:21:30,754]INFO 向量文件:../tx_vector/top10w/vector.npy
[2020-09-16 10:21:30,754]INFO 数据量:97115, 向量维度:200
[2020-09-16 10:21:30,754]INFO 距离计算方法:INNER_PRODUCT
[2020-09-16 10:21:30,754]INFO 监听端口:7800
[2020-09-16 10:21:31,402]INFO 索引创建完成,用时:0.682604秒
[2020-09-16 10:21:31,403]INFO Used Memory: 410.160 MB
[2020-09-16 10:21:31,413]INFO Running under Linux...
[2020-09-16 10:21:32,889]INFO 查询用时:2.20 毫秒
192.168.40.11 - - [2020-09-16 10:21:32] "POST /api/v0.1/sim HTTP/1.1" 200 225 0.008786
[2020-09-16 10:21:51,705]INFO 查询用时:1.49 毫秒
192.168.40.11 - - [2020-09-16 10:21:51] "POST /api/v0.1/sim HTTP/1.1" 200 227 0.002830
[2020-09-16 10:24:08,024]INFO 查询用时:1.80 毫秒
192.168.40.11 - - [2020-09-16 10:24:08] "POST /api/v0.1/sim HTTP/1.1" 200 227 0.003219

880万向量全部加载大约需要120秒,内存28G,请注意环境并耐心等待。

加载后可以使用CURL命令或者浏览器插件 PostWoman进行调用

实时查询客户端

2020/11/4 对代码进行了优化:去掉加载数据,全部从接口读取; 直接使用命令行交互方式

启动命令为:

python online_search.py -api=http://192.168.15.111:7801

其中:api参数指向向量搜索服务端;

以下是运行结果:

17:52:22.41|F:>python online_search.py -api=http://192.168.15.111:7801
[2020-11-02 17:52:25,831]INFO Used Memory: 40.707 MB
----------------------------------------
腾讯词向量搜索工具
可输入多个词语,词语之间用","分隔;
输入1个词:查询相似的词;
输入2个词:查询两个词的相似度;
输入3个词:计算A-B+C,例如:国王-男人+女人=皇后

----------------------------------------
请输入词语(Q退出):用餐
[2020-11-02 17:52:31,831]INFO 查询词语的近义词:用餐
[2020-11-02 17:52:32,085]INFO 查询结果:
('用餐', 1.0)
('就餐', 0.8778643608093262)
('进餐', 0.7902611494064331)
('餐厅', 0.7464025616645813)
('餐厅里', 0.7445648312568665)
[2020-11-02 17:52:32,100]INFO 整体用时:268.50 毫秒
----------------------------------------
请输入词语(Q退出):晚餐,晚饭
[2020-11-02 17:52:37,661]INFO 查询 晚餐 与 晚饭 的相似度:
[2020-11-02 17:52:37,877]INFO 相似度:0.80474603
[2020-11-02 17:52:37,878]INFO 整体用时:217.50 毫秒
----------------------------------------
请输入词语(Q退出):国王,男人,女人
[2020-11-02 17:52:51,102]INFO 向量加减:国王+男人-女人
[2020-11-02 17:52:51,381]INFO 查询结果:
('王后', 0.7049502730369568)
('爵士', 0.6559655666351318)
('王子', 0.6505959033966064)
('骑士', 0.650031566619873)
[2020-11-02 17:52:51,389]INFO 整体用时:288.00 毫秒
----------------------------------------
请输入词语(Q退出):麻花,天津,上海
[2020-11-04 13:40:50,917]INFO 向量加减:麻花-天津+上海
[2020-11-04 13:40:51,197]INFO 查询结果:
('小笼包', 0.5818970203399658)
('粽子', 0.5648482441902161)
('的麻', 0.5591018795967102)
('油条', 0.5550578832626343)
[2020-11-04 13:40:51,214]INFO 整体用时:297.00 毫秒
----------------------------------------
请输入词语(Q退出):麻花,天津,哈尔滨
[2020-11-04 13:41:07,838]INFO 向量加减:麻花-天津+哈尔滨
[2020-11-04 13:41:08,156]INFO 查询结果:
('糖葫芦', 0.5892667174339294)
('冰棍', 0.5745514631271362)
('冰糖葫芦', 0.5584374666213989)
('烤肠', 0.5485786199569702)
[2020-11-04 13:41:08,166]INFO 整体用时:328.50 毫秒
----------------------------------------
请输入词语(Q退出):北京,中国,法国
[2020-11-04 13:41:22,350]INFO 向量加减:北京-中国+法国
[2020-11-04 13:41:22,881]INFO 查询结果:
('巴黎', 0.6858187317848206)
('在巴黎', 0.6453583836555481)
('法国巴黎', 0.611520528793335)
[2020-11-04 13:41:22,889]INFO 整体用时:539.50 毫秒
----------------------------------------
请输入词语(Q退出):码头,轮船,飞机
[2020-11-04 15:52:58,290]INFO 向量加减:码头-轮船+飞机
[2020-11-04 15:52:58,570]INFO 查询结果:
('机场', 0.7212138772010803)
('停机坪', 0.7156717777252197)
('直升机', 0.6654086112976074)
('起降', 0.6607031226158142)
[2020-11-04 15:52:58,581]INFO 整体用时:291.00 毫秒
----------------------------------------
请输入词语(Q退出):美女,女人,男人
[2020-11-04 15:54:09,246]INFO 向量加减:美女-女人+男人
[2020-11-04 15:54:09,527]INFO 查询结果:
('帅哥', 0.8955133557319641)
('妹子', 0.7441977262496948)
('小美女', 0.7396756410598755)
('漂亮妹子', 0.7382819652557373)
[2020-11-04 15:54:09,537]INFO 整体用时:291.00 毫秒
----------------------------------------
请输入词语(Q退出):

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages