高维空间向量搜索---腾讯词向量相似检索实践
高维空间向量搜索—腾讯词向量相似检索实践
最近工作上遇到一些语料OOV问题,想到可以使用同义词进行替换来弥补部分OOV带来的问题,于是就有了本篇博客的相关实验。
最简单的可以使用gemsim在语料库上训练一个word2vec,然后使用gemsim自带的相似度API直接进行计算,这种方法是最简单的(不考虑内存消耗,计算时间的情况下)。但是自己的语料本身就有OOV问题,训练后,估计效果也不行,于是想到使用腾讯的语料,网上有一篇使用腾讯语料计算相似词的文章,但是只能使用公众号来请求,没有给出代码。
本文记录一下使用腾讯的全部词向量,使用高维空间向量搜索工具:hnsw进行的相关实验。
主要包括
1. 文件读取
腾讯词向量下载自行百度,下载后解压,大约16G的样子,是200维的高维向量
读取很简单
import numpy as np
def load_tencent_emb_data(path):"""加载腾讯词向量:param path: :return: """datas = []word_id_map = {}with open(path, 'r', encoding='utf-8') as fd:for idx, line in enumerate(fd):if idx == 0:continueline = line.strip().split(' ')word_id_map[line[0]] = idxdatas.append([float(x) for x in line[1:]])return np.asarray(datas), word_id_map
因为hnsw的输入需要时numpy格式的,所以讲向量转成了nparray
2. 构建索引
一般的高维向量搜索, 都需要去构建索引,例如faiss,nsg,ssg等(这些demo后面有时间补上)
构建索引的方法在hnsw的readme中有很好的说明,我只是一个搬运工
首先,安装hnsw包
pip install hnswlib
下面是构建腾讯词向量索引的代码
import hnswlib
def build_hnsw_search_index(data):num_elements, dim = data.shape# Generating sample datadata_labels = np.arange(num_elements)# Declaring indexp = hnswlib.Index(space='cosine', dim=dim) # possible options are l2, cosine or ip# Initing index - the maximum number of elements should be known beforehandp.init_index(max_elements=num_elements, ef_construction=200, M=16)# Element insertion (can be called several times):p.add_items(data, data_labels)return p
3. 向量搜索
def search_word_similarity(word, k=10):"""查找与word最相近的k个词:param word: :param k: :return: """w_id = word_id_map.get(word, None)if not w_id:print('do not found {} embeding'.format(word))return []return p.knn_query(data[w_id], k=k)
例如,搜索北京,可以得到如下词
中方:
因为是相似搜索,时间和精确度的权衡可以参考这里https://github.com/nmslib/hnswlib/blob/master/ALGO_PARAMS.md
4. 索引序列化和加载
4.1 序列化
p.save_index(path)
4.2 加载
p.load_index(path)
5. 总结
hnsw是一个相比faiss在精度上更有优势的库,15G的腾讯词向量转化为索引后,需要占用8G的内存。faiss库也是一个很好地库,但是在使用过程中,感觉精度并没有hnsw库好。当然最近浙大和阿里也有相关工作,后续有时间,也会贴出相关实验代码(浙大的库全是C++,门槛有点高,编译有点复杂)。
高维空间向量搜索---腾讯词向量相似检索实践相关推荐
- 将词向量传入MySQL_【腾讯词向量】腾讯中文预训练词向量
腾讯词向量介绍 腾讯词向量(Tencent AI Lab Embedding Corpus for Chinese Words and Phrases)提供了预训练好的800万中文词汇的word em ...
- lda 可以处理中文_自然语言处理——使用词向量(腾讯词向量)
向量化是使用一套统一的标准打分,比如填写表格:年龄.性别.性格.学历.经验.资产列表,并逐项打分,分数范围[-1,1],用一套分值代表一个人,就叫作向量化,虽然不能代表全部,但至少是个量度.因此,可以 ...
- 自然语言处理——使用词向量(腾讯词向量)
向量化是使用一套统一的标准打分,比如填写表格:年龄.性别.性格.学历.经验.资产列表,并逐项打分,分数范围[-1,1],用一套分值代表一个人,就叫作向量化,虽然不能代表全部,但至少是个量度.因此,可以 ...
- 对句子分词,找到对应词的腾讯词向量模型并使用Python进行faiss检索
目录 一.下载腾讯的词向量 二.停用词 三.代码部分 3.1.代码思想 四.输出结果 本文主要是将句子分词转向量,再加总词向量求平均变为句子向量.接着再存储到faiss中.等待新句子到来,同样按照上述 ...
- 自然语言处理(NLP):23 Word2Vec词向量研究以及实践
本文主要同大家分享word2vec原理以及应用,通过文本相似度和新闻文本分类为案例进行展开,最后对词向量技术发展进行简述. 作者:走在前方 博客:https://wenjie.blog.csdn.ne ...
- 腾讯词向量下载链接(Tencent_AILab_ChineseEmbedding.txt)
https://ai.tencent.com/ailab/nlp/en/download.html
- faiss通用向量搜索服务玩转腾讯880万词向量
通用向量搜索服务 faiss是个高效的向量搜索解决方案,经过测试对比,可以感受到它的飞速,关于faiss性能测试的见这里:faiss包装与性能对比 这次开源的是使用faiss搭建的通用向量搜索服务. ...
- 推荐:腾讯开源的词向量精简版本下载
腾讯AI Lab 宣布开源大规模.高质量的中文词向量数据,该数据包含800多万中文词汇,相比现有的公开数据,在覆盖率.新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言处理方向的业务 ...
- 推荐:腾讯开源的词向量精简版本下载|湾区人工智能
腾讯AI Lab 宣布开源大规模.高质量的中文词向量数据,该数据包含800多万中文词汇,相比现有的公开数据,在覆盖率.新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言处理方向的业务 ...
- 快速索引词向量-annoy
annoy 是 高维空间求近似最近邻的框架,速率快,轻便实用. GitHub地址:https://github.com/spotify/annoy 配合腾讯词向量,可以快速查找语义接近的向量: ten ...
最新文章
- Makefile_05:Make命令的自动推导
- 关于JQuery简单介绍
- iOS-如何返回某个字符串的拼音助记码
- 百度作业帮-产品分析
- 融云聊天 php_thinkphp整合系列之融云即时通讯在线聊天
- textarea内容有换行时存入数据库丢失问题的解决 (转载)
- 关于Silverlight安装问题之四
- linux中crontab的用法
- 一张图片放两个二维码_经验 | 图片排版的「17个实用技巧」
- linux系统进入管理员命令行,电脑如何进入管理员命令提示符
- 【ArcGIS微课1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)
- SpringBoot整合Validation进行参数校验
- 人工智能技术应用的领域主要有哪些?
- PAT考试经验总结(甲乙级均适用)~~想满分的请看这里!~~
- 2020 用html jQuery实现广告轮播图自动切换 滚动页面 鼠标悬浮下标且左右切换图片
- macsv服务器状态,macsv操作员站下装过程及服务器下装过程备课讲稿.pdf
- 1919 Problem A	二叉排序树
- xmm1是什么器件_模拟电子技术multisim仿真1二极管特性仿真.ppt
- Java五子棋Ai-权值法
- 素数统计 平移区间筛质数(1e9)