NLP(11)--词向量

ops/2024/10/18 17:24:22/

前言

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

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.ppmy.cn/ops/27832.html

相关文章

微信工具箱小程序多功能集合一体源码

介绍: 这是一款多功能集合一体工具箱小程序源码 1.短视频去水印; 2.运动步数查询; 3.网易云评论; 4.套图下载; 5.毒鸡汤,土味情话,舔狗日记等等功能组合成; 另外该小程序运营成本低可以说没有运营成…

LINUX基础培训三十一之实操题模拟测试试卷

一、前言 针对前面章节介绍的基础知识内容,为方便实操锻炼和了解学习的掌握程度,模拟设置了这条基础操作题,在实战过程中曾给部分童鞋实操测试过。本章只给出具体题目内容,实际做题还需要搭建部署对应实操模拟环境以及设置自动评分功能,此处略过没写了,因为环境和评分都跟…

hadoop学习---基于hive的聊天数据分析报表可视化案例

背景介绍: 聊天平台每天都会有大量的用户在线,会出现大量的聊天数据,通过对聊天数据的统计分析,可以更好的对用户构建精准的用户画像,为用户提供更好的服务以及实现高ROI的平台运营推广,给公司的发展决策提…

第三章、汇编1

编译选项知识 -Og:这是 GCC 和 Clang 编译器提供的优化选项之一。-Og 的含义是“优化级别为 g”,其中的 “g” 代表了"g优化"。这个选项的作用是启用一些基本的优化,以尽量保持生成的代码易读易调试。它通常会保留变量名和源代码结…

centos7 openresty lua 自适应webp和缩放图片

目录 背景效果图准备安装cwebp等命令,转换文件格式安装ImageMagick,压缩文件下载Lua API 操控ImageMagick的依赖包 代码参考 背景 缩小图片体积,提升加载速度,节省流量。 效果图 参数格式 : ?image_processformat,…

【项目学习01_2024.05.01_Day03】

学习笔记 3.6 开发业务层3.6.1 创建数据字典表3.6.2 编写Service3.6.3 测试Service 3.7 接口测试3.7.1 接口完善3.7.2 Httpclient测试 3.8 前后端联调3.8.1 准备环境3.8.2 安装系统管理服务3.8.3 解决跨域问题解决跨域的方法:我们准备使用方案2解决跨域问题。在内容…

Java Maven 编译资源文件拷贝错误 dirCompressed.zip failed with MalformedInputException:

完整的错误信息为: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1:resources (default-resources) on project core-java-io: filtering C:\WorkDir\Repository\iSharkfly-Docs\java-tutorials\core-java-modules\core-ja…

python - 3D图表绘制

Pyecharts 和 3D 图表绘制 Pyecharts 是一个用于生成各种图表的 Python 库,它基于 Echarts,支持大量的图表类型,非常适合用于数据分析和可视化。Pyecharts 主要优点是易于使用,可以直接在 Python 环境中绘制富有交互性的图表&…