目录

一、下载腾讯的词向量

二、停用词

三、代码部分

3.1、代码思想

四、输出结果


本文主要是将句子分词转向量,再加总词向量求平均变为句子向量。接着再存储到faiss中。等待新句子到来,同样按照上述方法处理。达到在faiss能检索出相似的向量。

一、下载腾讯的词向量

下载后放到一个地方,待会代码部分需要使用。下载地址:  Embedding Dataset -- NLP Center, Tencent AI Lab

二、停用词

可以上网查找一些停用词表,或者自己定义一个stop_words.txt。同样代码部分需要使用。

三、代码部分

3.1、代码思想

1)首先加载腾讯的词向量模型

2)把要初始化的句子和要检索的句子

3)对句子分词,找出词在腾讯词向量模型里面的向量

4)每个句子的所有词向量加总取平均做为句子向量

5)存入faiss,等待检索

6)输入待检索句子向量,输出相似句子向量

from gensim.models import Word2Vec
import os
import jieba.posseg as pseg
import faiss
from gensim.models import KeyedVectors
import pandas as pd
import numpy as np# 获取腾讯词向量
file = r'D:\Gitlab\extract_key\baidu_word_model\tencent-ailab-embedding-zh-d100-v0.2.0_small.txt'
wv_from_text = KeyedVectors.load_word2vec_format(file, binary=False)  # 加载时间比较长
wv_from_text.init_sims(replace=True)def jieba_postag(text):words = pseg.cut(text)return wordsdef defined_stop_words():all_stop_words = []for i, file in enumerate(os.listdir(r'D:\Gitlab\extract_key\stop_words')):# 读取图片filepath = fr'D:\Gitlab\extract_key\stop_words\{file}'with open(filepath, 'r', encoding='utf-8') as fp:all_line = fp.readlines()for line in all_line:all_stop_words.append(line.replace('\n',''))return all_stop_wordsdef load_baidu_model(sentence_list):sen_list = []vector_list = []# 外层列表 多个句子的分词结果for sentence in sentence_list:count = 0avg_list = []# 内层,每个句子的分词结果for word in sentence:# 找出对应词的百度词向量if word in wv_from_text.index_to_key:count += 1# 取出对应词向量vector = wv_from_text[word]# 存储起来avg_list.append(vector)# 一句话结束后,把所有词向量相加求平均sen_vector = np.vstack(avg_list) / count# 添加返回信息sen_list.append(sentence)vector_list.append(sen_vector)#        句子     对应句子向量return sen_list,vector_listdef word2vec(content):# 获取停用词stop_words = defined_stop_words()# jieba分词sentence = []for con in content:sen = []word = jieba_postag(con)for w in word:# 去停用词if w.word not in stop_words:sen.append(w.word)sentence.append(sen)# jieba 分词结果print(sentence)# 句子列表  句子向量sen_list,vector_list = load_baidu_model(sentence)return vector_listdef faiss_calculate(word_vec,test_word_vec,near_size):vec_shape = 100index = faiss.IndexFlatL2(vec_shape)# # 有多少条数据训练# print(index.ntotal)# # 是否已经训练# print(index.is_trained)# 添加向量for i,vec in enumerate(word_vec):print(f"添加第{i}个向量")index.add(vec)# print(index.ntotal)print("向量添加成功\n")# search vectorsk = near_sizefor i,test_vec in enumerate(test_word_vec):print(f"检索第{i}个向量")I,D = index.search(test_vec,k)print(I)print(D)if __name__ == '__main__':content = ["长江是中国第一大河,干流全长6397公里(以沱沱河为源),一般称其6300公里。流域总面积一百八十余万平方公里,年平均入海量约九千六百余亿立方米。以干流长度和入海水量论,长江居世界第三位。","长江干流宜昌以上为上游,长4504公里,流域面积100万平方公里,其中直门达至宜宾称金沙江,长3364公里;宜宾至宜昌河段习称川江,长1040公里;宜昌至湖口为中游,长955公里,流域面积68万平方公里。湖口以下为下游,长938公里,流域面积12万平方公里。"]search_content = ["长江干流宜昌以上为上游,长4504公里,流域面积100万平方公里,其中直门达至宜宾称金沙江,长3364公里;宜宾至宜昌河段习称川江,长1040公里;宜昌至湖口为中游,长955公里,流域面积68万平方公里。湖口以下为下游,长938公里,流域面积12万平方公里。"]word_vec = word2vec(content)test_word_vec = word2vec(search_content)faiss_calculate(word_vec,test_word_vec,5)

四、输出结果

前面两个列表分别是content和search_content分词后的结果。往下看就是faiss的代码部分。最后的是向量和对应下标内容。

C:\Users\dell\Anaconda3\python.exe D:/Gitlab/extract_key/faiss_demo.py
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\dell\AppData\Local\Temp\jieba.cache
[['长江', '中国', '第一', '大河', '干流', '全长', '6397', '公里', '沱沱河', '源', '称', '6300', '公里', '流域', '总面积', '一百八十', '余万平方公里', '年', '平均', '入海量', '约', '九千', '六百余', '亿立方米', '干流', '长度', '入海', '水量', '长江', '居', '世界', '第三位'], ['长江', '干流', '宜昌', '上游', '长', '4504', '公里', '流域面积', '100', '万平方公里', '直门', '达至', '宜宾', '称', '金沙江', '长', '3364', '公里', '宜宾', '宜昌', '河段', '习称', '川江', '长', '1040', '公里', '宜昌', '湖口', '中游', '长', '955', '公里', '流域面积', '68', '万平方公里', '湖口', '下游', '长', '938', '公里', '流域面积', '12', '万平方公里']]
Loading model cost 0.467 seconds.
Prefix dict has been built successfully.
[['长江', '干流', '宜昌', '上游', '长', '4504', '公里', '流域面积', '100', '万平方公里', '直门', '达至', '宜宾', '称', '金沙江', '长', '3364', '公里', '宜宾', '宜昌', '河段', '习称', '川江', '长', '1040', '公里', '宜昌', '湖口', '中游', '长', '955', '公里', '流域面积', '68', '万平方公里', '湖口', '下游', '长', '938', '公里', '流域面积', '12', '万平方公里']]
添加第0个向量
添加第1个向量
向量添加成功检索第0个向量
[[2.3283064e-10 7.9978607e-05 7.9978607e-05 2.4693029e-04 3.2110960e-04][1.1641532e-10 7.9978839e-05 7.9978839e-05 1.4126929e-04 2.5593187e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 1.6702199e-04 1.6702199e-04][0.0000000e+00 5.6024292e-05 2.0133099e-04 3.0256179e-04 3.0258833e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00][0.0000000e+00 2.0129327e-04 3.3610640e-04 4.1364867e-04 4.2342267e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.1641532e-10][1.1641532e-10 1.1641532e-10 3.4924597e-10 2.6041776e-04 2.9876560e-04][0.0000000e+00 2.3221667e-04 2.6178535e-04 5.0974241e-04 5.1002507e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 2.9876560e-04 2.9876560e-04][1.1641532e-10 1.1641532e-10 1.6702199e-04 1.6702199e-04 1.6702199e-04][1.1641532e-10 7.9978723e-05 3.5184540e-04 5.9754209e-04 5.9754209e-04][0.0000000e+00 2.5593187e-04 3.1231623e-04 3.4288963e-04 3.6646723e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00][0.0000000e+00 2.0129327e-04 3.5257672e-04 4.4940610e-04 4.7621201e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.1641532e-10][1.1641532e-10 1.1641532e-10 1.6702199e-04 1.6702199e-04 1.6702199e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 1.6702199e-04 1.6702199e-04][0.0000000e+00 1.4126929e-04 2.7304713e-04 2.7304713e-04 3.0256179e-04][1.1641532e-10 3.5184540e-04 5.6083419e-04 7.7203778e-04 7.8827370e-04][0.0000000e+00 2.4693029e-04 3.1231623e-04 4.1363190e-04 4.1363190e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00][0.0000000e+00 2.9964186e-04 3.3610640e-04 3.4230750e-04 3.5257672e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.1641532e-10][0.0000000e+00 0.0000000e+00 0.0000000e+00 1.6702199e-04 1.6702199e-04][0.0000000e+00 0.0000000e+00 3.7042430e-04 3.9958593e-04 3.9958593e-04][1.1641532e-10 2.0133099e-04 2.1574745e-04 4.6068663e-04 4.7935866e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00][1.1641532e-10 2.0490785e-04 2.9964186e-04 4.1288522e-04 4.1364867e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.1641532e-10][1.1641532e-10 1.1641532e-10 3.4924597e-10 2.6041776e-04 2.9876560e-04][0.0000000e+00 2.3221667e-04 2.4346728e-04 4.1288522e-04 4.3369649e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 2.9876560e-04 2.9876560e-04][0.0000000e+00 0.0000000e+00 3.7042430e-04 3.9958593e-04 3.9958593e-04][0.0000000e+00 5.6024292e-05 2.1574751e-04 3.3985404e-04 3.4211029e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00][2.3283064e-10 2.0490785e-04 3.4230767e-04 4.2342278e-04 4.3369655e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 0.0000000e+00 1.1641532e-10][1.1641532e-10 1.1641532e-10 3.4924597e-10 2.6041776e-04 2.9876560e-04][0.0000000e+00 2.4346705e-04 2.6178546e-04 5.1894749e-04 5.1894749e-04][0.0000000e+00 0.0000000e+00 0.0000000e+00 2.9876566e-04 2.9876566e-04]]
[[30 26  0 50 33][31  4 22 48 42][47 32 54 40 46][33 64 56 48 31][34 51 57 65 43][35 44 52 58 66][45 36 59 53 67][60 37 68 31 62][38 61 69 52 58][62 70 39 60 37][46 40 47 54 32][41 10 49 43 34][42 31 50 48 30][34 51 57 65 43][44 35 52 66 58][45 36 59 53 67][46 40 47 54 32][47 32 54 40 46][48 31  4 22 33][49 41 10 64 30][50 30 42 63 55][34 51 57 65 43][52 58 35 66 44][45 36 59 53 67][47 32 54 40 46][63 55 30 54 47][56 33 64 30 31][34 51 57 65 43][58 66 52 61 35][45 36 59 53 67][60 37 68 31 62][61 38 69 58 66][62 70 39 60 37][63 55 30 54 47][64 33 56 48 31][34 51 57 65 43][66 58 52 35 61][45 36 59 53 67][60 37 68 31 62][69 61 38 43 57][62 70 39 68 60]]Process finished with exit code 0

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

  1. 【自然语言处理】Word2Vec 词向量模型详解 + Python代码实战

    文章目录 一.词向量引入 二.词向量模型 三.训练数据构建 四.不同模型对比 4.1 CBOW 4.2 Skip-gram 模型 4.3 CBOW 和 Skip-gram 对比 五.词向量训练过程 5 ...

  2. 2.3.NLTK工具包安装、分词、Text对象、停用词、过滤掉停用词、词性标注、分块、命名实体识别、数据清洗实例、参考文章

    2.3.NLTK工具包安装 2.3.1.分词 2.3.2.Text对象 2.3.3.停用词 2.3.4.过滤掉停用词 2.3.5.词性标注 2.3.6.分块 2.3.7.命名实体识别 2.3.8.数据 ...

  3. solr配置同义词,停止词,和扩展词库(IK分词器为例)

    定义 同义词:搜索结果里出现的同义词.如我们输入"还行",得到的结果包括同义词"还可以". 停止词:在搜索时不用出现在结果里的词.比如is .a .are .& ...

  4. 基于ik分词器和布隆过滤器实现敏感词过滤

    文章目录 准备阶段 为何选用IK Analyzer 什么是布隆过滤器 开发过程 整合Ik 总结 <基于ik分词器和布隆过滤器实现敏感词过滤>首发 牧马人博客转发请加此提示 最近公司业务有个 ...

  5. NLP-文本处理:基本技术【命名实体识别、分词、拼写纠错、停用词、词性标注】、文本序列化、文本向量化、文本语料的数据分析、文本特征处理(Ngram特征添加、文本长度规范)、数据增强

    分词(tokenization):英文通过空格或者标点符号,就可以将词分开:而中文的分词会涉及很多问题(未登录词问题.分词歧义问题.分词不一致问题),所以会有各种不同分词的算法. 清洗:我们需要对文本 ...

  6. 【LeetCode】【HOT】438. 找到字符串中所有字母异位词(滑动窗口)

    [LeetCode][HOT]438. 找到字符串中所有字母异位词 文章目录 [LeetCode][HOT]438. 找到字符串中所有字母异位词 package hot;import java.uti ...

  7. 438. 找到字符串中所有字母异位词【异位词-哈希数组】

    438. 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引.不考虑答案输出的顺序. 异位词 指由相同字母重排列形成的字符串(包括 ...

  8. python中文词云图代码_python词云图与中文分词

    2019-12-12中文文本分词和词云图具体功能介绍与学习代码: import jieba a="由于中文文本的单词不是通过空格或者标点符号来进行分割" #jieba.lcut() ...

  9. Java实现 LeetCode 438 找到字符串中所有字母异位词

    438. 找到字符串中所有字母异位词 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p ...

最新文章

  1. 批量导入LYNC 2010用户的联系人
  2. css实现页面文字不换行、自动换行、强制换行
  3. BAPI_SALESORDER_CREATEFROMDAT2 BAPI创建VA01 销售订单
  4. paradox 修改字段长度_关于生日的作文500字9篇
  5. IPC之——消息队列
  6. java面试解决项目难题_Java转换难题者,不适合工作(或面试)
  7. 测试常用——linux 基础命令
  8. js for in遍历对象_JS中轻松遍历对象属性的几种方式
  9. 深入理解Linux内核01:内存寻址
  10. 《Pro Ogre 3D Programming》读书笔记 之 第十一章 动态阴影 (转)
  11. Android Contentprovider的学习实例总结
  12. c语言完整表白程序代码,C语言告白代码,一闪一闪亮晶晶~
  13. 未签订书面劳动合同的仲裁时效
  14. App Store商店图片文案填写说明
  15. 【刷题】BZOJ 4698 Sdoi2008 Sandy的卡片
  16. 大数据与人工智能方向基础 --- 概述
  17. 想成为魅力十足的人的十大习惯
  18. excel自动增加序号
  19. 【前辈经验】——前端职位描述
  20. android蓝牙传输文件到mysql_蓝牙opp文件发送过程剖析

热门文章

  1. sqlalchemy 学习笔记(全)
  2. 编码的奥秘:定点数和浮点数
  3. 用二进制计数器集成芯片74161设计一个64进制计数器
  4. java中while和dowhile
  5. 【连接ipv6】有ipv6地址,但是还是上不了ipv6的网站
  6. 跳动的文字:CSS3动画、倒影、变量
  7. 腾讯微信事业群简单一面
  8. Python 基础学习 00 01 基础语法规则
  9. Cocos 亮相OPPO开发者大会,将率先支持OPPO光追
  10. 数据压缩:protobuf 的使用