N5 使用Gensim库训练Word2Vec模型

前言

这周学习训练一个Word2Vec模型,并进行一些基本的词向量操作。

Word2Vec 模型

Word2Vec 是一种基于神经网络的词向量表示方法,通过从大规模文本语料中学习到的词向量,捕捉词汇之间的语义关系。

训练一个Word2Vec模型

1. 导入所需的库

python 复制代码
import jieba
import jieba.analyse
import chardet
  • jieba用于中文分词。
  • chardet用于检测文件编码。
  • jieba.analyse用于关键词提取(未在本代码中使用)。

2. 添加自定义词频

python 复制代码
jieba.suggest_freq('沙瑞金', True)
# ... (其他类似的词)
jieba.suggest_freq('赵德汉', True)
  • suggest_freq方法用于调整词频,使得分词器能够更好地识别这些特定词汇。

3. 读取和分词处理文本文件

python 复制代码
result_cut = []
with open('./in_the_name_of_people.txt', 'rb') as f:
    raw_data = f.read()
    encoding = chardet.detect(raw_data)['encoding']
    lines = raw_data.decode(encoding).splitlines()
    for line in lines:
        result_cut.append(list(jieba.cut(line)))
  • 以二进制方式读取文本文件内容。
  • 使用chardet检测文件编码,并进行解码。
  • 将文本按行分割,并对每行使用jieba.cut进行分词,结果存入result_cut列表。

4. 去除停用词

python 复制代码
stopwords_list = [",", "。", "\n", "\u3000", " ", ":", "!", "?", "..."]

def remove_stopwords(ls):
    return [word for word in ls if word not in stopwords_list]

result_stop = [remove_stopwords(x) for x in result_cut if remove_stopwords(x)]
  • 定义一个停用词列表,包括常见的标点符号和空格。
  • remove_stopwords函数用于从分词结果中去除停用词。
  • 对分词结果result_cut应用remove_stopwords函数,得到result_stop。

5. 训练Word2Vec模型

python 复制代码
from gensim.models import Word2Vec

model = Word2Vec(result_stop, 
                 vector_size=100, 
                 window=5, 
                 min_count=1)
  • 使用gensim库的Word2Vec模型训练词向量。
  • vector_size设置词向量的维度为100。
  • window设置上下文窗口大小为5。
  • min_count设置为1,即出现次数少于1次的词语将被忽略。

6. 计算词语相似度

python 复制代码
print(model.wv.similarity('沙瑞金', '季昌明'))
print(model.wv.similarity('沙瑞金', '田国富'))
  • 使用similarity方法计算两个词语之间的相似度。

7. 找出最相似的词

python 复制代码
for e in model.wv.most_similar(positive=['沙瑞金'], topn=5):
    print(e[0], e[1])
  • 使用most_similar方法找出与'沙瑞金'最相似的5个词语及其相似度。

8. 找出不匹配的词

python 复制代码
odd_word = model.wv.doesnt_match(["苹果", "香蕉", "橙子", "书"])
print(f"在这组词汇中不匹配的词汇:{odd_word}")
  • 使用doesnt_match方法找出列表中最不符合其余词语的词语。

9. 获取词频

python 复制代码
word_frequency = model.wv.get_vecattr("沙瑞金", "count")
print(f"沙瑞金:{word_frequency}")
  • 使用get_vecattr方法获取词语'沙瑞金'在语料中的出现次数。

结果

总结

通过Word2Vec模型,我们可以有效地捕捉词汇之间的语义关系,应用在自然语言处理任务中如文本分类、聚类和推荐系统等。

相关推荐
pusheng2025几秒前
普晟传感再获“消防产业核心配套优质品牌”:以可靠传感技术,让全球合规变简单
大数据·前端·人工智能·物联网·安全
sunshine88513 分钟前
集成电路(IC)设计与封测行业10大常用ERP系统分析
大数据·数据库·人工智能
财迅通Ai14 分钟前
卫星化学前三季度实现归母净利润90.59亿元,同比大增141.24%
人工智能·卫星化学
领麦微红外17 分钟前
和面机智能化测温新选择 红外传感器实现非接触直测面团
人工智能·产品经理·智能硬件
Light Gao24 分钟前
AI 对话助手如何实现动态交互?一文讲清 AG-UI、SSE、组件与工具调用
人工智能·ui·交互·大语言模型·sse·智能体·ag-ui
丁希希哇38 分钟前
Transformer中的注意力机制(Attention)
人工智能·机器学习·transformer·大语言模型
国际学术会议-杨老师44 分钟前
2027年人文发展、城市管理与数字化社会国际会议(HUCD 2027)
大数据·人工智能·人文发展
田里的水稻1 小时前
PyTorch_torchvision---数据集下载\TensorBoard可视化
人工智能·pytorch·python·深度学习·机器学习
科技每日热闻1 小时前
电气设备综合维保服务商怎么选?从预防性维护到数字化运维,看懂五个关键能力——企业选择维保合作伙伴,不能只看“坏了能不能修”,更要看能否覆盖资产与系统的长期运营
大数据·运维·人工智能
Dotrust东信创智1 小时前
HIL台架上的“无人夜班“:东信创智用AI重塑汽车软件测试全链路——测试不再是项目的瓶颈,而是交付的底气
人工智能·汽车