NLP(11)--词向量

前言

仅记录学习过程,有问题欢迎讨论

one-hot 编码 i love u [1,2,3]

词向量训练目标:
如果两个词在文本出现,它的前后出现的词相似,则这两个词语义相似

cbow(基于窗口预测词)缺点
:输出层是vocab_size 会很大
收敛速度会很慢

skipGram --用中间词预测两侧词

哈夫曼树:
用词频来构造树,词频最大,在树的层级越小
对词向量输出层级过大的优化

Glove 词向量:
按照词来编写关于前后语义关系的矩阵—共现矩阵

词向量存在的问题:
1)词向量是“静态”的。每个词使用固定向量,没有考虑前后文

2)一词多义的情况。西瓜 - 苹果 - 华为

3)影响效果的因素非常多
维度选择、随机初始化、skip-gram/cbow/glove、分词质量、词频截断、未登录词、窗口大小、迭代轮数、停止条件、语料质量等

4)没有好的直接评价指标。常需要用下游任务来评价

句向量:
对于所有的词加和求平均 得到文本向量 计算其相似性和聚类
Kmeans
KMeans一些使用技巧:
先设定较多的聚类类别
聚类结束后计算类内平均距离
排序后,舍弃类内平均距离较长的类别

总结:
1.质变:将离散的字符转化为连续的数值

2.通过向量的相似度代表语义的相似度

3.词向量的训练基于很多不完全正确的假设,但是据此训练的词向量是有意义的

4.使用无标注的文本的一种好方法

代码

Demo1:使用gensim
pip install gensim
寻找词之间的相似性

"""
实现一个 TFIDF
"""
import gensim
import jiebadef gensim_train(corpus, dim):model = gensim.models.Word2Vec(corpus,  # 用于训练的语料数据vector_size=dim,  # 是指特征向量的维度,默认为100。window=5,  # 一个句子中当前单词和被预测单词的最大距离。min_count=1,  # 可以对字典做截断. 词频少于min_count次数的单词会被丢弃掉, 默认值为5。sg=1)model.save("word2vec.w2v")return modeldef main():sentences = []with open("D:\\NLP\\test\\week5\\corpus.txt",encoding="utf8") as f:for line in f:sentences.append(jieba.lcut(line))model = gensim_train(sentences, 100)return modelif __name__ == '__main__':# model = main()# 加载模型model = gensim.models.Word2Vec.load("word2vec.w2v")# print(model.wv.most_similar(positive=["男人", "母亲"], negative=["女人"]))while True:  #找相似string = input("input:")try:print(model.wv.most_similar(string))except KeyError:print("输入词不存在")

kmeans Demo

#!/usr/bin/env python3  
#coding: utf-8#基于训练好的词向量模型进行聚类
#聚类采用Kmeans算法
import math
import re
import json
import jieba
import numpy as np
from gensim.models import Word2Vec
from sklearn.cluster import KMeans
from collections import defaultdict#输入模型文件路径
#加载训练好的模型
def load_word2vec_model(path):model = Word2Vec.load(path)return modeldef load_sentence(path):sentences = set()with open(path, encoding="utf8") as f:for line in f:sentence = line.strip()sentences.add(" ".join(jieba.cut(sentence)))print("获取句子数量:", len(sentences))return sentences#将文本向量化
def sentences_to_vectors(sentences, model):vectors = []for sentence in sentences:words = sentence.split()  #sentence是分好词的,空格分开vector = np.zeros(model.vector_size)#所有词的向量相加求平均,作为句子向量for word in words:try:vector += model.wv[word]except KeyError:#部分词在训练中未出现,用全0向量代替vector += np.zeros(model.vector_size)vectors.append(vector / len(words))return np.array(vectors)def main():model = load_word2vec_model("model.w2v") #加载词向量模型sentences = load_sentence("titles.txt")  #加载所有标题vectors = sentences_to_vectors(sentences, model)   #将所有标题向量化n_clusters = int(math.sqrt(len(sentences)))  #指定聚类数量print("指定聚类数量:", n_clusters)kmeans = KMeans(n_clusters)  #定义一个kmeans计算类kmeans.fit(vectors)          #进行聚类计算sentence_label_dict = defaultdict(list)for sentence, label in zip(sentences, kmeans.labels_):  #取出句子和标签sentence_label_dict[label].append(sentence)         #同标签的放到一起for label, sentences in sentence_label_dict.items():print("cluster %s :" % label)for i in range(min(10, len(sentences))):  #随便打印几个,太多了看不过来print(sentences[i].replace(" ", ""))print("---------")if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【综述】多核处理器芯片

文章目录 前言 Infineon处理器 AURIX™系列 TC399XX-256F300S 典型应用 开发工具 参考资料 前言 见《【综述】DSP处理器芯片》 Infineon处理器 AURIX™系列,基于TriCore内核,用于汽车和工业领域。 XMC™系列,基于ARM Cortex-M内核&…

test4282

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

2024五一杯数学建模A题思路分析-钢板最优切割路径问题

文章目录 1 赛题选题分析 2 解题思路3 最新思路更新 1 赛题 A题 钢板最优切割路径问题 提高钢板下料切割过程中的工作效率,是模具加工企业降低成本和增加经济效益的重要途径,其中钢板切割的路径规划是钢板切割过程的一个关键环节。 钢板切割就是使用特殊…

2024 五一杯高校数学建模邀请赛(C题)| 煤矿深部开采冲击地压危险预测 |建模秘籍文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,构建了这一题的详细解答哦! 为大家量身打造创新解决方案。小秘籍团队,始终引领着建模问题求解的风潮。 抓紧小秘籍,我们出发吧~ 让我们看看五一杯的C题! 完…

【Jenkins】持续集成与交付 (十二):Jenkins构建(Maven类型项目)和部署项目

🟣【Jenkins】持续集成与交付 (十二):Jenkins构建(Maven类型项目)和部署项目 一、安装Maven Integration插件二、创建Maven项目三、配置项目3.1 配置执行构建操作3.2 执行Maven项目构建3.3 部署项目3.5 再次构建3.4 验证访问四、总结💖The Begin💖点点关注,收藏不迷…

ChatGPT 网络安全秘籍(一)

原文:zh.annas-archive.org/md5/6b2705e0d6d24d8c113752f67b42d7d8 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 在不断发展的网络安全领域中,由 OpenAI 推出的 ChatGPT 所代表的生成式人工智能和大型语言模型(LLMs&#xf…

MATLAB初学者入门(30)—— 数据库开发

在MATLAB中实现数据库开发涉及连接数据库、执行SQL查询、处理查询结果以及将数据用于分析和可视化。MATLAB提供了数据库工具箱,该工具箱支持与多种数据库系统的连接,包括但不限于MySQL、Oracle、SQL Server、PostgreSQL等。 案例分析:使用MA…

【软件开发规范篇】JAVA后端开发编码格式规范

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

软件网关--Nginx

Nginx 的多功能用途 Nginx 是构建现代化分布式应用程序的重要工具,它的功能远不止于高性能的 Web 服务器和反向代理。它还能充当 API 网关,处理前后端通信、认证、授权、监控等任务。以下是 Nginx 的主要用途: 前后端通信代理:N…

公共 IP 地址与私有 IP 地址区别有哪些?

​  IP 地址是分配给互联网上每个设备的唯一数字 ID。 IP 地址可以在 Internet 上公开使用,也可以在局域网 (LAN)上私有使用。本文,我们主要探讨公共 IP 地址和私有 IP 地址之间的区别。 公共IP地址:公共IP地址是用于访问Internet的向外的I…

头歌:SparkSQL简单使用

第1关:SparkSQL初识 任务描述 本关任务:编写一个sparksql基础程序。 相关知识 为了完成本关任务,你需要掌握:1. 什么是SparkSQL 2. 什么是SparkSession。 什么是SparkSQL Spark SQL是用来操作结构化和半结构化数据的接口。…

c++缓冲区同步原理与std::ios::sync_with_stdio作用

缓冲区同步机制 为什么需要缓冲区同步 c是基于c语言的扩展语言,本质上它继承了c语言许多特性,同时也继承了C语言特性,在c语言中stdio为输入输出缓冲区,stdin是输入缓冲区,stdout是输出缓冲区,C不与C语言使…

Python爬虫-车主之家详情页汽车数据

前言 本文是该专栏的第26篇,后面会持续分享python爬虫干货知识,记得关注。 本文以车主之家的汽车详情页为例,获取对应车型的全部汽车相关数据(包含车型配置,车型销售数据,以及上牌数据等等)。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,…

AI家居设备的未来:智能家庭的下一个大步

🔒目录 ☂️智能家居设备的发展和AI技术的作用 ❤️AI技术实现智能家居设备的自动化控制和智能化交互的依赖 AI家居设备的未来应用场景 💣智能家庭在未来的发展和应用前景 💥智能家居设备的发展和AI技术的作用 智能家居设备的发展和AI技术的…

Liunx发布tomcat项目

Liunx在Tomcat发布JavaWeb项目 1.问题2.下载JDK3.下载Tomcat4.Tomcat本地JavaWeb项目打war包、解压、发布5.重启Tomcat,查看项目 1.问题 1.JDK 与 Tomcat 版本需匹配,否则页面不能正确显示 报错相关:Caused by: java.lang.ClassNotFoundException: java…

优化NGINX性能:使用NGINX_THREADS提高并发处理能力

目录标题 1. 什么是NGINX_THREADS?2. 配置NGINX_THREADS3. 使用NGINX_THREADS处理耗时操作4. 性能调优5. 结论 NGINX作为一个高性能的HTTP和反向代理服务器,在处理高并发请求时表现出色。但随着互联网应用对性能要求的不断提高,深入了解和优化…

DA14531如何配置SDK工程路径

1 前言 当我们获取一个DA14531的工成样列,有时是不包括SDK中的公共部分的代码,只有用户项目代码。而想拷贝到自己的SDK中,如:F:\A02_Work\A01_Dailog\DA145xx_SDK\6.0.18.1182.1\projects\User\ble_app_sensor,打开工…

去水印思考

当然,关于去除图片或视频中水印的代码改进,这需要基于您当前使用的技术栈(如Python、OpenCV、PIL等)和具体的需求(例如水印的位置是否固定、水印的颜色、透明度等)。这里我提供一个基于Python和OpenCV的基本…

高颜值管理系统界面,我敢保证你肯定看不够,看了又看。

有不少老铁,还坚持10年前的老思路,总觉得B端管理系统颜值不颜值不重要,关键是好用就行,这就犯了二元论的错误。 谁说高颜值的管理系统,就不好用了呢?高颜值和易用性冲突吗?我看未必吧。看看大厂…

羊大师:羊奶与传统牛奶在健康方面的差异

羊大师:羊奶与传统牛奶在健康方面的差异 羊奶与传统牛奶在健康方面的差异主要体现在以下几个方面: 营养成分:羊奶与传统牛奶在营养成分上有所不同。羊奶中含有更多的维生素A、碳水化合物、烟酸以及磷,而牛奶在钙、蛋白质和锌的含…