高维空间向量搜索—腾讯词向量相似检索实践

最近工作上遇到一些语料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++,门槛有点高,编译有点复杂)。

高维空间向量搜索---腾讯词向量相似检索实践相关推荐

  1. 将词向量传入MySQL_【腾讯词向量】腾讯中文预训练词向量

    腾讯词向量介绍 腾讯词向量(Tencent AI Lab Embedding Corpus for Chinese Words and Phrases)提供了预训练好的800万中文词汇的word em ...

  2. lda 可以处理中文_自然语言处理——使用词向量(腾讯词向量)

    向量化是使用一套统一的标准打分,比如填写表格:年龄.性别.性格.学历.经验.资产列表,并逐项打分,分数范围[-1,1],用一套分值代表一个人,就叫作向量化,虽然不能代表全部,但至少是个量度.因此,可以 ...

  3. 自然语言处理——使用词向量(腾讯词向量)

    向量化是使用一套统一的标准打分,比如填写表格:年龄.性别.性格.学历.经验.资产列表,并逐项打分,分数范围[-1,1],用一套分值代表一个人,就叫作向量化,虽然不能代表全部,但至少是个量度.因此,可以 ...

  4. 对句子分词,找到对应词的腾讯词向量模型并使用Python进行faiss检索

    目录 一.下载腾讯的词向量 二.停用词 三.代码部分 3.1.代码思想 四.输出结果 本文主要是将句子分词转向量,再加总词向量求平均变为句子向量.接着再存储到faiss中.等待新句子到来,同样按照上述 ...

  5. 自然语言处理(NLP):23 Word2Vec词向量研究以及实践

    本文主要同大家分享word2vec原理以及应用,通过文本相似度和新闻文本分类为案例进行展开,最后对词向量技术发展进行简述. 作者:走在前方 博客:https://wenjie.blog.csdn.ne ...

  6. 腾讯词向量下载链接(Tencent_AILab_ChineseEmbedding.txt)

    https://ai.tencent.com/ailab/nlp/en/download.html

  7. faiss通用向量搜索服务玩转腾讯880万词向量

    通用向量搜索服务 faiss是个高效的向量搜索解决方案,经过测试对比,可以感受到它的飞速,关于faiss性能测试的见这里:faiss包装与性能对比 这次开源的是使用faiss搭建的通用向量搜索服务. ...

  8. 推荐:腾讯开源的词向量精简版本下载

    腾讯AI Lab 宣布开源大规模.高质量的中文词向量数据,该数据包含800多万中文词汇,相比现有的公开数据,在覆盖率.新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言处理方向的业务 ...

  9. 推荐:腾讯开源的词向量精简版本下载|湾区人工智能

    腾讯AI Lab 宣布开源大规模.高质量的中文词向量数据,该数据包含800多万中文词汇,相比现有的公开数据,在覆盖率.新鲜度及准确性上大幅提高,为对话回复质量预测和医疗实体识别等自然语言处理方向的业务 ...

  10. 快速索引词向量-annoy

    annoy 是 高维空间求近似最近邻的框架,速率快,轻便实用. GitHub地址:https://github.com/spotify/annoy 配合腾讯词向量,可以快速查找语义接近的向量: ten ...

最新文章

  1. Makefile_05:Make命令的自动推导
  2. 关于JQuery简单介绍
  3. iOS-如何返回某个字符串的拼音助记码
  4. 百度作业帮-产品分析
  5. 融云聊天 php_thinkphp整合系列之融云即时通讯在线聊天
  6. textarea内容有换行时存入数据库丢失问题的解决 (转载)
  7. 关于Silverlight安装问题之四
  8. linux中crontab的用法
  9. 一张图片放两个二维码_经验 | 图片排版的「17个实用技巧」
  10. linux系统进入管理员命令行,电脑如何进入管理员命令提示符
  11. 【ArcGIS微课1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)
  12. SpringBoot整合Validation进行参数校验
  13. 人工智能技术应用的领域主要有哪些?
  14. PAT考试经验总结(甲乙级均适用)~~想满分的请看这里!~~
  15. 2020 用html jQuery实现广告轮播图自动切换 滚动页面 鼠标悬浮下标且左右切换图片
  16. macsv服务器状态,macsv操作员站下装过程及服务器下装过程备课讲稿.pdf
  17. 1919 Problem A 二叉排序树
  18. xmm1是什么器件_模拟电子技术multisim仿真1二极管特性仿真.ppt
  19. Java五子棋Ai-权值法
  20. 素数统计 平移区间筛质数(1e9)

热门文章

  1. 虎牙直播怎么换html5,虎牙直播怎么换徽章-虎牙直播更换粉丝徽章的方法 - 河东软件园...
  2. Python灰帽子黑客与逆向工程师的Python编程之道
  3. 惠普台式机电源风扇不转
  4. 软件测试——界面测试
  5. 系统内存占用率高导致电脑卡顿的解决方案
  6. #微信公众号互联登录-01#
  7. mtk 耳机accdet检测驱动分析
  8. windows配置本地的虚拟主机
  9. Python数据分析案例篇(一)泰坦尼克号数据分析
  10. 7-8 约分最简分式 (15 分)