刘沙河 刘沙河
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希

花开半夏,半夏花开
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希
  • Python基础

  • Python进阶

    • 并发,并行同步,异步阻塞,非阻塞
    • 数据类型小结(各数据类型常用操作)
    • 数据分析 NumPy-Pandas
    • APScheduler定时任务框架
    • celery分布式任务队列
    • Django-celery
    • Django-crontab
    • gensim模块中Lsi模型自然语言处理
    • SQLalchemy 使用教程
  • Python并发编程

  • Django

  • Flask

  • 爬虫

  • Python
  • Python进阶
bigox
2021-03-22

gensim模块中Lsi模型自然语言处理

# gensim模块中Lsi模型自然语言处理

  • 使用jieba分词处理词库,使用gensim中的Lsi模型训练语料库
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import jieba
from gensim import corpora
from gensim import models
from gensim import similarities

q_l = ["今天你冷吗", "北京的雾霾去哪了", "北京的天蓝吗", "你叫什么名字", "你今年几岁啦", ]  # 问题库
q_s = "你今年多大了"  # 问题样本

# 1.问题库分词处理
all_doc_list = []
for doc in q_l:
    doc_list = [word for word in jieba.cut(doc)]
    all_doc_list.append(doc_list)
doc_test_list = [word for word in jieba.cut(q_s)]
# print(all_doc_list)
# print(doc_test_list)
'''
[['今天', '你', '冷', '吗'], ['北京', '的', '雾', '霾', '去', '哪', '了'], ['北京', '的', '天蓝', '吗'], ['你', '叫', '什么', '名字'], ['你', '今年', '几岁', '啦']]
['你', '今年', '多大', '了']
'''

# 2.制作语料库
dictionary = corpora.Dictionary(all_doc_list)  # 制作词袋:就是将很多很多的词,进行排列形成一个 词(key) 与一个 标志位(value) 的字典
# print("token2id", dictionary.token2id)
# print("dictionary", dictionary)
'''
token2id {'今天': 0, '你': 1, '冷': 2, '吗': 3, '了': 4, '北京': 5, '去': 6, '哪': 7, '的': 8, '雾': 9, '霾': 10, '天蓝': 11, '什么': 12, '叫': 13, '名字': 14, '今年': 15, '几岁': 16, '啦': 17}
dictionary Dictionary(18 unique tokens: ['今天', '你', '冷', '吗', '了']...)
'''


# 2.1问题库的语料库
corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]
# 这里是将all_doc_list 中的每一个列表中的词语 与 dictionary 中的Key进行匹配得到一个匹配后的结果,例如['你', '今年', '几岁', '了'],然后根据上面得到的 token2id {'今天': 0, '你': 1, '冷': 2, '吗': 3, '了': 4, '北京': 5, '去': 6, '哪': 7, '的': 8, '雾': 9, '霾': 10, '天蓝': 11, '什么': 12, '叫': 13, '名字': 14, '今年': 15, '几岁': 16, '啦': 17}
# 就可以得到 [(1, 1), (4, 1), (15, 1), (16, 1)]
# 1代表的的是 你 1代表出现一次, 4代表的是 了  1代表出现了一次, 以此类推 15 = 今年 , 16 = 几岁
# print("corpus", corpus, type(corpus))
'''
corpus [[(0, 1), (1, 1), (2, 1), (3, 1)], [(4, 1), (5, 1), (6, 1), (7, 1), (8, 1), (9, 1), (10, 1)], [(3, 1), (5, 1), (8, 1), (11, 1)], [(1, 1), (12, 1), (13, 1), (14, 1)], [(1, 1), (15, 1), (16, 1), (17, 1)]] <class 'list'>
'''

# 2.2问题的语料库
# 将需要寻找相似度的分词列表 做成 语料库 doc_test_vec
doc_test_vec = dictionary.doc2bow(doc_test_list)
# print("doc_test_vec", doc_test_vec, type(doc_test_vec))
'''
doc_test_vec [(1, 1), (4, 1), (15, 1)] <class 'list'>
'''
# 3. 将corpus语料库(初识语料库) 使用Lsi模型进行训练
lsi = models.LsiModel(corpus)
# 4 文本相似度获取
# 4.1 利用稀疏矩阵相似度算法 将 问题库的 语料库corpus的训练结果作为初始值
index = similarities.SparseMatrixSimilarity(lsi[corpus], num_features=len(dictionary.keys()))
'''
举个例子:
lsi 就是很多月饼模子
lsi[corpus] 把 问题库中的每一个问题都用模子压出一个月饼
lsi[doc_test_vec] 把问题样本压出一个月饼,拿着这个月饼,通过一定的算法去与lsi[corpus]比较。
'''
# 4.2 将 语料库doc_test_vec 在 语料库corpus的训练结果 中的 向量表示 与 语料库corpus的 向量表示 做矩阵相似度计算
sim = index[lsi[doc_test_vec]]
# print("sim", sim, type(sim))
'''
sim [ 4.3786496e-01  3.3099478e-01 -1.4901161e-08  4.3786496e-01
  8.7572986e-01] <class 'numpy.ndarray'>  
计算结果是:问题样本与问题库中的每一个问题匹配度的评分,根据评分就可以取到相似度最高问题
'''
# 5.排序,获取结果
cc = sorted(enumerate(sim), key=lambda item: -item[1])
# print(cc)
'''[(4, 0.87572986), (0, 0.43786496), (3, 0.43786496), (1, 0.33099478), (2, -1.4901161e-08)]'''

ret = q_l[cc[0][0]]
print(' 问题样本:', q_s, '\n', '匹配结果:', ret)
'''你今年多大了 你今年几岁啦'''
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#Python#
上次更新: 2023/04/16, 18:35:33
Django-crontab
SQLalchemy 使用教程

← Django-crontab SQLalchemy 使用教程→

最近更新
01
go与http代理
05-24
02
自制申威架构k8s-reloader
12-06
03
Docker Buildx 教程
12-01
更多文章>
Theme by Vdoing | Copyright © 2020-2024 小刘扎扎 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式