LSTM自然语言处理情感分析项目(一)构建词汇表

目录

一.构建词汇表

1.定义最大词汇单词表个数和UNK,PAD

2.定义创建字典的函数

3.初步构建词汇表

4.词汇表排序(4760)

5.将UNK和PAD加入字典(4762)

6.保存独热编码的字典文件

7.调用函数


思考:向模型中传递数据时,需要提前处理好数据

1、目标:将评论内容转换为词向量,即使用Embedding层将文本中的字符转换为固定维度的词向量

2、每个词/字转换为词向量长度(维度)200 (因为项目我们使用腾讯训练好的Embedding权重 4762*200

3、每一次传入的词/字的个数是否就是评论的长度? 应该是固定长度,每次传入数据与图像相似。 例如选择长度为70。则传入的数据为70*200

4、一条评论如果超过70个词/字怎么处理? 直接删除后面的内容

5、一条评论如果没有70个词/字怎么处理? 缺少的内容,统一使用一个数字(非词/字的数字)替代。

  • 针对文本长度不足的情况,使用Padding填充;对超出长度的文本,删除多余部分。

6、如果语料库中的词/字太多是否可以压缩? 可以,某些词/字出现的频率比较低,可能训练不出特征。因此可以选择频率比较高的词来训练。例如选择4760个。(ps:剩下两个一个是'PAD',一个是'UNK')

7、被压缩的词/字如何处理? 可以统一使用一个数字(非词/字的数字)替代。

一.构建词汇表

1.定义最大词汇单词表个数和UNK,PAD

python 复制代码
from tqdm import tqdm
import pickle as pkl

MAX_VOCAB_SIZE=4760
UNK,PAD='<UNK>','<PAD>'

tqdm用于显示后续for循环进程

pkl用于保存后续的词汇表字典文件

2.定义创建字典的函数

file_path是微博评论文件地址

max_size即为字典最大词汇数

min_freq是词的最小出现次数

python 复制代码
def build_vocab(file_path,max_size,min_freq):
    tokenizer=lambda x:[y for y in x]
    vocab_dic={}

tokenizer是一个函数,用于后续的将评论切割成每个单词

vocab_dic用于保存单词的字典

3.初步构建词汇表

python 复制代码
    with open(file_path) as f:
        i=0
        for line in tqdm(f):
            if i==0:
                i+=1
                continue#跳过第一行表头
            lin=line[2:].strip()
            if not lin:#检查line中有没有内容
                continue
            for word in tokenizer(lin):
                vocab_dic[word]=vocab_dic.get(word,0)+1#统计每个字出现的次数,字典保存

打开评论文件,使用for循环一行一行读取(不用pandas读取的原因,评论中存在很多逗号,而csv文件就是以逗号来分隔开的)

i=0时是表头,直接跳过

line[2:]切片即提取评论正文部分,strip()去除末尾空格

tokenizer()会先将lin中的这一行评论内容分词

复制代码
for word in tokenizer(lin):
    vocab_dic[word]=vocab_dic.get(word,0)+1

统计每个单词出现的次数,可以看见初步构建的单词表有10026个单词

4.词汇表排序(4760)

复制代码
先判断出现次数是否大于最小值,再根据出现的次数从大到小排序,提取前4760个
python 复制代码
        vocal_list=sorted([_ for _ in vocab_dic.items() if _[1]>min_freq],key=lambda x:x[1],reverse=True)[:max_size]#先判断出现次数是否大于最小值,再根据出现的次数从大到小排序,提取前4760个
复制代码
获取排序之后的字典,值即为该单词的独热编码
python 复制代码
        vocab_dic={ word_count[0]:idx for idx,word_count in enumerate(vocal_list) }#获取排序之后的字典

5.将UNK和PAD加入字典(4762)

python 复制代码
        vocab_dic.update({UNK:len(vocab_dic),PAD:len(vocab_dic)+1})#增加UNK和PAD
        print(vocab_dic)

6.保存独热编码的字典文件

python 复制代码
        pkl.dump(vocab_dic,open('simplifyweibo_4_moods.pkl','wb'))
        print(f"Vocab Size:{len(vocab_dic)}")
return vocab_dic

pkl保存之后再以load()打开,返回的是原文件类型

7.调用函数

python 复制代码
if __name__=='__main__':
    vocab=build_vocab('simplifyweibo_4_moods.csv',MAX_VOCAB_SIZE,3)
    print('vocab')
相关推荐
美酒没故事°1 天前
Open WebUI安装指南。搭建自己的自托管 AI 平台
人工智能·windows·ai
云烟成雨TD1 天前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
简简单单做算法1 天前
基于GA遗传优化的Transformer-LSTM网络模型的时间序列预测算法matlab性能仿真
深度学习·matlab·lstm·transformer·时间序列预测·ga遗传优化·电池剩余寿命预测
AI攻城狮1 天前
用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
人工智能·云原生·aigc
鸿乃江边鸟1 天前
Nanobot 从onboard启动命令来看个人助理Agent的实现
人工智能·ai
lpfasd1231 天前
基于Cloudflare生态的应用部署与开发全解
人工智能·agent·cloudflare
俞凡1 天前
DevOps 2.0:智能体如何接管故障修复和基础设施维护
人工智能
comedate1 天前
[OpenClaw] GLM 5 关于电影 - 人工智能 - 的思考
人工智能·电影评价
财迅通Ai1 天前
6000万吨产能承压 卫星化学迎来战略窗口期
大数据·人工智能·物联网·卫星化学
liliangcsdn1 天前
Agent Memory智能体记忆系统的示例分析
数据库·人工智能·全文检索