深度学习PyTorch 之 RNN-中文多分类

关于RNN的理论部分我们已经在前面介绍过,所以这里直接上代码

1、 数据部分

1.1 读取数据

# 加载数据
data_path = './data/news.csv'
data = pd.read_csv(data_path)# 预览数据的前几行
data.head()

在这里插入图片描述
数据是csv格式,只有两列,第一列是标签(但是为中文),第二列是text,文本内容。

1.2 分词

import jieba# 对数据进行分词处理
data['text_segmented'] = data['text'].apply(lambda x: ' '.join(jieba.cut(x)))# 预览分词后的数据
data[['text', 'text_segmented']].head()

在这里插入图片描述
当然这里也可以加入停用词

1.3 构建词汇表

我们需要构建和处理文本数据的词汇表。词汇表是自然语言处理中的一个基本概念,它将文本中的单词映射到唯一的整数ID上。这样,文本数据就可以被转换为机器可以理解的数字格式。

class Vocabulary:def __init__(self, freq_threshold):# 初始化函数,freq_threshold是构建词汇表时单词出现的最小频次阈值。self.itos = {0: "<PAD>", 1: "<SOS>", 2: "<EOS>", 3: "<UNK>"}# 创建一个将整数ID映射到字符串(单词或特殊标记)的字典。# 这里包括了四个特殊标记:# "<PAD>":填充,用于将序列填充到相同长度。# "<SOS>":序列的开始。# "<EOS>":序列的结束。# "<UNK>":未知单词,用于处理词汇表中没有的单词。self.stoi = {v: k for k, v in self.itos.items()}# 创建一个将字符串映射到整数ID的字典。self.freq_threshold = freq_threshold# 将频率阈值设置为实例变量。def build_vocabulary(self, sentence_list):# 这个方法用于构建词汇表。frequencies = Counter()# 使用collections.Counter来计算每个单词的出现频率。idx = 4# 设置当前ID为4,因为前面已经为特殊标记预留了四个ID。for sentence in sentence_list:# 遍历句子列表。for word in sentence:# 遍历句子中的每个单词。frequencies[word] += 1# 增加单词的频率计数。if frequencies[word] == self.freq_threshold:# 如果单词的频率达到了阈值。self.stoi[word] = idx# 将单词添加到stoi字典,赋予一个新的ID。self.itos[idx] = word# 将单词添加到itos字典。idx += 1# ID自增,为下一个单词预留位置。def numericalize(self, text):# 这个方法将文本转换为数字ID序列。return [self.stoi[token] if token in self.stoi else self.stoi["<UNK>"] for token in text]# 对于文本中的每个token(通常是单词):# 如果它在stoi字典中,就返回它的ID;# 如果不在,就返回UNK的ID。

创建好的词汇表如下

Vocabulary with 2966 words and special tokens: PAD, SOS, EOS, UNK. Words: , , , , , ,, 中, 国, 的, 澳, 大, 对, 不, 。, 民, 子, 珍, 妮, 父, 学, 女, 语, 和, 文, 华, 社, 会, 、, 化, 是, 在, 融, 入, 主, 流, 一, 他, 同, 人, 新, 利, 亚, 们, 母, 家, 教, 育, 要, 生, 说, 代, 以, 系, 关, 时, 快, 有, 发, :, 体, 1, 价, 9, 0, 所, 下, 这, 了, 常, 机, 为, 3, 5, 重, 三, 种, 者, 2, D, 还, 用, 英, 寸, 等, 4, 最, m, 感, 光, 像, 能, 值, 洋, T, H, 可, 7, ., 摄, 出, 6, 面, 识, 张, 其, 方, 持, 8, 【, 地, 】, /, V, c, 里, 近, 色, i, C, h, 也, 就, 嫂, 着, n, B, 带, 贝, 上, 味, e, M, a, t, 身, 性, r, , 与, 她, 并, o, k, 分, s, 裙, 高, S, u, 很, 如, 果, P, 实, d, 那, 到, 穿, 力, 个, w, 显, 现, 活, 更, 装, 且, 成, l, 言, J, 来, 本, 款, 得, 而, 越, 金, 数, 点, p, y, 包, 房, 之, 行, -, 头, 公, 回, 风, 海, 长, “, 天, ”, (, ), 元, 米, 景, 平, 湾, 居, 购, 外, 内, 游, 族, ★, 线, 看, 特, 山, 都, 过, 西, 水, 阳, 朔, 间, 桂, 林, 年, 多, 万, 量, 街, 心, 通, ?, 日, 南, 比, 岭, 当, 买, 候, 业, 网, 售, 格, 需, 修, 合, 开, 但, 记, 经, 象, 没, 销, 刘, 挺, 定, 式, 套, 少, 另, 支, 照, 进, 收, 税, 于, 受, 计, 问, 题, 示, 总, 屋, 应, 卖, 楼, 采, 此, 商, 按, 营, 相, 自, 费, 员, 部, 签, 我, 北, 导, 考, 加, A, 美, 世, 知, 度, 较, 好, 提, 立, 校, 参, 条, 难, 取, 才, 门, 备, 绩, 读, 全, 申, 请, 前, 供, 试, 单, 深, 士, 效, 法, 必, 须, 些, 步, 件, 表, 期, 拉, 让, 道, 月, 银, 司, 理, 任, 基, 师, 助, 产, 非, 适, 消, 称, 归, 信, 丹, 资, 管, 第, 事, 跟, 安, 托, 作, 赵, 认, 确, 将, 私, 引, 手, 只, 市, 品, 后, 募, 达, 位, 然, 清, 盘, 股, 至, 场, 担, 接, 报, 么, 息, 你, 情, 两, 访, 曾, 名, 投, 明, 德, 因, 素, 目, 赤, 去, 率, %, 指, 已, 今, 电, 建, 失, 气, 频, 强, 登, 石, 灾, 江, 超, 洪, 小, 四, 次, 降, 程, 雨, 湖, 毫, 暴, 区, 口, 亡, 直, 省, 害, 死, 该, 设, 均, 河, 务, 防, 动, 别, 汛, 具, 准, 极, 站, 范, 历, 围, 或, 再, 严, 续, 视, 测, 工, 台, 突, 保, 放, 损, 儿, 亿, 县, 双, 园, 疆, 各, 做, ;, 幼, 切, 统, 肯, 州, 据, 议, 研, 存, 旗, 正, 集, 团, 企, 专, 置, 普, 录, 土, 积, 份, 见, 王, 形, 随, 欲, 路, 块, 纪, 底, 拍, 号, 刷, 起, 住, 宅, 把, 标, 却, 仅, 论, 交, 贵, 渠, 使, 向, 预, 无, 拿, 源, 被, 钱, 获, 科, 东, 想, 及, 增, 副, 足, 半, 究, 额, 幅, 证, 周, 又, 势, 验, 边, 二, 般, 左, 右, 星, 变, 低, 送, 优, !, L, 屏, , 它, 功, 焦, 处, 质, 配, 抖, 评, 拥, 倍, 完, 限, 错, 话, 意, 委, 领, 展, 联, 千, 战, 界, 食, 际, 粮, 广, 济, 危, 影, 响, 复, 戴, 从, 调, 冲, 破, 障, 农, 断, 给, 推, 易, 环, 境, 减, 衡, 则, 争, 秉, 结, 洲, 解, 除, 努, 改, 域, 端, 促, 贸, 援, 护, 义, 项, 首, 扩, 落, 十, 惠, 共, 先, 己, 血, 造, 困, 划, 背, 技, 政, 物, 稳, 由, 术, 决, 组, 帮, 何, 治, 策, 丰, 八, 火, 求, 京, 密, 热, 负, 龙, 赛, 季, 早, 胜, 猛, 阵, 老, 维, 始, 警, 斯, 连, 险, 巨, 兵, 布, 望, 缺, 伤, 席, 输, 鹿, 括, 尼, 七, 板, 球, 差, 克, 尔, 约, 字, 兴, 友, 注, ×, R, G, F, 卡, 容, 片, Y, 移, v, W, 播, 温, 承, 五, 举, 峰, 欧, 巴, 罗, 旅, 尽, 许, 宝, 刚, 晤, 原, 终, 潮, 整, 盟, 益, 略, 坚, 继, 充, 挥, 伙, 伴, 协, 涉, 善, 制, 责, 朋, 微, 孩, 反, O, g, 告, 规, 每, 级, 临, 府, 升, 权, 几, 节, 春, 《, 》, 邦, 陈, 服, 满, 硬, 遭, 汉, 勇, 角, 演, 樊, 哙, 便, 算, 真, 诚, 致, 爱, 尚, 幕, 户, 施, 客, 顾, 亲, 卫, 浴, 富, 窖, 讯, 虽, I, 偏, 净, 截, 选, 占, 盛, 跌, 庆, 川, 博, 样, 择, 留, 什, 课, 习, 梦, 码, 笔, 观, 佳, 乐, 趣, 太, 打, 余, 债, 仍, 汇, 券, 健, 浦, 赢, 走, 未, 波, 搭, 绿, 久, 排, 伊, 依, 况, 涨, 封, 转, 书, 觉, 库, 属, 花, 纽, 夏, 洛, 讲, 顺, 云, 索, 型, 图, α, 速, 器, 操, 液, 晶, 创, 镜, 松, 精, 彩, 弹, E, 短, 票, 构, 离, 洁, 印, 希, 良, 互, 励, 模, N, 根, 列, 币, 逾, 初, 露, (, 村, ), 噪, 画, 载, 态, 百, 奴, —, 众, 喜, 轻, 庭, 压, 车, 红, 白, 欢, 甚, 紧, 免, 班, 休, 独, 养, 竞, 永, 赶, 愿, 群, 析, 传, 介, 木, 层, 触, 材, 局, 室, 疑, 念, 森, 乏, ", 类, 累, 键, 牌, 翻, 空, 迎, 扬, 裁, 碧, 溪, 命, 倒, 遍, 运, 远, 刻, 店, 令, 威, 黎, 惊, 城, 香, 圣, 驻, 史, 止, 浪, 箭, 马, 毕, 奥, 辛, 塔, 敦, 队, 钟, 盖, 帽, +, f, 敏, 圈, 细, 黑, 靠, 秒, 尘, 灰, 午, 嘉, 兰, 办, 段, 律, 座, 享, 佩, 亮, x, 编, 辑, 暑, 秀, [, ], 李, 朝, 否, 昨, 悉, 宜, 仓, 晋, 末, 透, 牛, 盈, 启, 圳, 贴, 福, 婚, 冰, /, 杰, 蛇, 妖, 狐, 衣, 戏, 执, 竹, 颜, 宋, 汶, 眼, 呈, 练, 待, 池, 架, 尺, 爆, 阿, 束, 即, 曼, 九, 换, 瑞, 岁, 脱, 鲁, 够, 旧, 暖, …, 借, 财, 湿, 坏, 绍, 例, 针, 订, 纳, 距, 田, 禁, 荣, 涯, 控, 堂, 榜, 军, 誉, 朗, 贡, 献, 篮, 哥, 击, 姆, 奇, 古, 枚, 音, 豪, 航, 听, 付, 娱, 储, 勒, 迷, 舞, 查, 霸, 冠, 典, U, 找, 招, 批, 守, 攻, 摆, 固, 乎, 哪, 凭, 遇, 脚, 脸, 拜, 核, 往, 膝, 纷, 夺, 病, 劲, 货, 闪, 锋, 凯, 抢, 判, 丁, 猫, 追, 剩, 韦, 扣, 斗, 詹, 犯, 侠, 罚, 迪, 康, 宁, 趋, 署, 陆, 籍, 咨, 询, 案, 偶, 镑, 港, 逐, 渐, 估, 急, 男, 嫁, 乔, 吃, 陪, 剧, 饰, 晚, 谈, 释, 泽, 梁, 淘, 狂, 智, 职, 酒, 郡, 喝, 状, 缴, 既, 雷, 杜, 吧, 霆, 词, 掘, 恐, 哈, 帕, 塞, 吉, 萨, 账, 补, 六, 简, 异, 竟, 奖, 呢, 届, 含, 址, 官, 培, 挑, 谢, 铁, 缩, 滑, 坡, 吸, 败, 措, ·, 翰, 逊, 监, 救, 玩, 剑, 砍, 匠, 铸, 折, 童, 魔, 怪, 皇, 写, 堪, 覆, X, 震, 避, 梅, 冷, 歌, 芳, 神, 静, 弱, 冬, 谐, 扮, 纯, 阶, 裤, 鞋, 唱, 玉, 洗, 绝, 概, 谁, 杀, 苦, 退, 宏, 润, 赞, 厂, 狗, 宣, 烦, 昂, 遗, 孙, 虑, 思, 激, 吴, 慧, 您, 雅, 途, 拟, 抗, 符, 聘, 检, 织, 医, 肝, 乙, 述, 怕, 携, 染, 杂, 毒, >, 阅, 拒, 映, 飞, 飘, 笑, 声, 齐, 坐, 偷, 刀, 柯, 皮, 故, 刺, 院, 尤, 诉, 馆, 筑, 烈, 丽, 坛, 潜, 础, 轨, 捷, 懒, 志, 繁, 诸, 顶, 乖, 猪, 络, 似, 探, 聊, |, 轮, 握, 料, 怎, 麻, 藏, 杭, 熟, 骗, 误, 掉, 黄, 延, 跨, 葛, 凤, 沙, 诺, 迁, 租, 呼, 停, 搬, 淹, 亩, 树, 枢, 宽, 干, 返, 柳, 闻, 耕, 镇, 吁, 召, 党, 跑, 央, 叫, 喊, ‘, ’, 巧, 逢, 宇, 档, 诀, Z, 津, 凡, 寻, 礼, 戈, 沃, 跳, 蚁, 薄, 晓, 廉, 饭, 附, 脑, 茶, 拼, 软, 柜, 薪, 娜, 摇, 序, 泰, 坦, 禅, 幸, 菲, 蒂, 辨, 迟, 雪, 旦, 假, 淡, 挂, 韩, 版, 毛, 暗, 衫, 肤, 尝, 青, 鲜, 瘦, 腰, 珠, 挡, 妨, 草, 舒, 杨, 审, 贷, 征, 混, 患, 督, 某, 添, 予, 答, 描, 恶, 岛, 武, 散, 踪, 妥, 赖, 殊, 抵, 苏, 倡, 遵, 章, 沟, 伯, 摩, 嫌, 讨, 歧, 吗, 媒, 彼, 晰, 烟, 枪, 狼, 胡, 狙, 剪, 恢, 扁, 饮, 辩, 灵, 诞, 哦, 野, 糕, 兽, b, 魅, 宠, Q, 箱, 艺, 秘, 妃, 厨, 郭, 毯, 帝, 唯, 帅, 侧, 斤, 肥, 仔, 漫, 秋, 妙, 荐, 抄, 贿, 赂, 迫, 乳, 曝, 谋, 射, :, 尊, 曰, !, 册, 雄, 莫, 伦, 辉, 沉, 颇, 轰, 驰, 敢, 碰, 婆, 赌, 伏, 恩, 贤, 忍, 蔚, 筹, 霞, 亦, 壳, 颁, 轴, 贺, 鸡, 侯, 浓, 怀, 饱, 隆, 冯, 仪, 著, 贯, 祝, 闭, 昌, 厌, 闲, 粉, 胸, 欣, 抱, 蓝, 董, 恒, 橱, 吊, 沈, 磨, 派, 俱, 杯, 泛, 厅, 郑, 拓, 畅, 瞬, 劳, 拖, 欠, 违, 油, 暂, 赎, 惜, 奈, 耐, 废, 抹, 宾, 昆, 床, 邀, 奢, 锦, 叶, 革, 涛, 俄, 砖, 琳, K, 菜, @, z, *, 烧, 熊, 孟, 舍, 忽, 扎, 夫, 霍, 授, 聪, 朱, 雇, 郊, 忘, 慢, 皆, 替, 跃, 旋, 夜, 浮, 萧, 泪, 燕, 横, 唐, 纵, 祖, 妈, 艾, 麦, 逃, 蔡, 徐, 训, 鸣, 彬, 爷, &, 袜, 驼, 髦, 粗, 曲, 腿, 苗, 溢, 稍, 迅, 综, 赴, 宗, 伟, 君, 径, 乘, 晨, 裔, 顿, 娘, 胖, 郎, 卧, 缘, 锁, 寒, 妇, 瓦, 宴, 掌, 厚, 邻, 墨, 契, 莉, 牵, 愈, 莱, 若, 隐, •, 肩, 圆, 纹, 庄, 妹, 辣, 塑, 聚, 摸, 谓, 伐, 丝, 恤, 巾, ?, 楚, 赏, 漂, 耳, 甲, 忆, 荡, 龄, 姿, 懂, 鸿, 桥, 蹈, 奋, 壁, 蓄, 锐, 迈, 埃, 涌, 惯, 欺, 虚, 陷, 忧, 糟, 萌, 搞, 披, 柏, 插, 囊, 奎, 蛋, 赚, 丑, 允, 彻, 幻, 骨, 恋, 纶, 镁, 夸, 琼, 鼓, 槛, 爽, 墙, 墅, 埋, 钢, 拆, 桌, 裂, 窗, 铺, 灯, 零, 炉, 洞, 炎, 靓, 玻, 璃, 膜, 撑, 钩, 槽, 柱, 躲, 袍, 敌, 疯, 赋, 兼, 艳, 涂, 阔, 敬, 庞, 劫, 俗, 氏, 筋, 罕, 恨, 旺, 旁, 姐, 苹, 辰, 甜, 扰, 宿, 偿, 爬, 袁, 骂, 弟, 察, 抓, 肋, 兑, 犹, 豫, 拨, 砸, 夹, _, j, 慎, 佛, 醒, 谨, 押, 猜, 兆, 姚, 凌, 亥, 仁, 详, 岗, 伪, 甩, 弘, 悬, 堡, 啊, 寓, 潘, 荷, 剔, 驱, 傻, 啦, 谷, 姓, 坠, 赔, 览, 滩, 棒, 徽, 峡, 甘, 芯, 雕, 耶, 挣, 搜, 邓, 仙, 怨, 贼, 冒, 默, 御, 腐, 艰, 振, 扶, 贫, 厦, 伸, 蛮, 痛, 祥, 氛, 链, 旨, 岸, 餐, 忌, 琪, 穷, 宙, 迹, 乱, 恰, 侵, 揭, □, 亏, 颈, 纤, 衬, 脖, 羊, 沿, 娇, 璇, 悲, 瓶, 窃, 缀, 妻, 喻, 叠, 仿, 辱, 蜂, 番, 尾, 汰, 药, 卓, 绕, 诱, 隔, 俏, 辫, 睛, 惑, 尹, 盲, 倾, ~, 蕾, 递, 鉴, 绮, 孤, 绎, 漠, 牙, 玄, 刊, 船, 绪, 莞, 拐, 骑, 牢, 蒙, 贾, 勾, 瓷, 弃, 泡, 腻, 疫, 蔓, 胁, 疗, 矿, 剂, 酬, 柔, 绒, 袖, 妆, 彰, 塌, 硕, 肆, 烂, 酷, 貌, 抛, 媚, 胆, 趁, 惨, 罪, 诈, 莲, 栋, 纠, 耀, 鱼, 乡, 斥, 械, 斌, 袋, 荒, 兄, 篇, 绵, 愉, 虎, 驾, 捕, 捉, 凶, 狠, 怖, 袭, 鼠, 乌, q, 纸, 帘, 渗, 侈, 胶, 卿, 炮, 颖, 桃, 勤, 吓, 渴, 臣, 芬, 乃, 弗, 眉, 刑, 羽, 循, 凸, 擦, 淀, 敞, 玲, 翠, 舰, 辅, 炼, 嫩, 卷, 框, 卢, 辞, 俩, 腊, 燃, 冻, 鬼, -, 穆, 涵, 坞, 症, 稿, 亨, 闹, 挤, 浩, 侨, 壮, 眷, 胞, 帜, 凝, 崇, 弊, 拘, 履, 赁, 滞, 盗, 秩, 井, 碎, 靴, 魂, 丧, 爪, 镖, 罢, 忙, 弄, 魏, 逼, 菊, 杉, 矶, 侦, 钮, 睐, 辈, 滴, 孔, 捧, 踏, 姬, 虞, 诗, 徘, 徊, 鹃, =, 吕, 俺, 翼, 哇, 俊, 呆, 傲, 飙, 缝, 彭, 屡, 臂, 鹰, 枫, 填, 邮, 阴, 仆, 厉, 呵, 撞, 堵, 函, 畔, 苑, 钥, 匙, 伍, 妞, 瞩, 慕, 炫, 〔, 〕, 棉, 芝, 怡, 骁, 搏, 句, 拳, 践, 碍, 牺, 牲, 戒, 奔, 茨, 缠, 削, 忠, 镶, 浅, 仕, 紫, 尴, 尬, 谦, 泥, 衔, 笼, 陶, 愧, 娃, 霖, 碌, 磋, 揽, 沂, 馈, 炯, 膏, 阻, 漆, 廊, 绘, 帷, 叹, 哭, 抽, 悄, 赠, 碑, 懈, 馨, 污, 煤, 吨, 缸, 疲, 喷, 莹, 钻, 铜, 镀, 淋, 洒, 泼, 悦, 逆, 憾, 弥, 慌, %, 攀, 渡, 迄, 斜, 抑, 娅, 吾, 杏, 砂, 锅, 炖, 糖, 耗, 姜, 汤, 蒜, 磁, 肘, 碗, 煲, 掀, 衷, 峻, 坤, 吹, 玛, 佐, 彦, 蛙, 诠, 爸, 裸, 奕, 邪, 炸, 残, 劣, 窝, 拯, 贪, 串, 崩, 溃, 耿, 旬, 篷, ;, 摊, 鹏, 巩, 诊, 肃, 谊, 谱, 慨, 髓, 舆, 页, 闷, 缓, 凉, 驭, 靡, 沪, 磊, 疼, 腾, 胀, 颠, 闯, 鼎, 遣, 棕, 遮, 肚, 臀, 堆, 扫, 稀, 寄, 刮, 虹, 撼, 麟, 尖, 棋, 犸, 扑, 桩, 挖, 惧, 丢, 爵, 裕, 羡, 圭, $, 瞻, 愁, 漏, 鲍, 绽, 嘴, 糊, 蜘, 蛛, 恭, 兹, 孕, 蒋, 罩, 凑, 拔, 滚, 绑, 耍, 顽, 囤, 顷, 沐, 嗜, 腕, 玫, 瑰, 踢, 竭, 坎, 嘘, 悍, 婴, 扔, 怒, 矩, 吼, 喀, 驶, 泉, 琴, 浙, 崔, 汪, 汽, 丈, 蜜, 朵, 煽, 贱, 鑫, 垫, 枕, 植, 祈, 昵, 蓬, 滕, 魄, 淑, 暨, 桑, 巡, 惹, 吻, 浑, 橄, 榄, 盐, 蔗, 氯, 哲, 朴, 盯, 衰, 碟, 匪, 攫, 蝉, +, 掩, 沦, 屈, 傅, 漓, 趸, 仇, 陌, 喧, 吵, 纲, 卦, 侃, 杆, 怜, 纱, 逛, 凹, 叛, 媛, 叉, 岩, 氧, 椅, 寿, 膨, 肉, 醛, 剥, 鼻, 愤, 冥, 扭, 辖, 颗, 遂, 钲, 磅, 蠢, 醉, 郁, 恼, 楠, 瓜, 宫, 睡, 撰, 浏, 咱, 叙, 廖, 奶, 爹, �, 徒, 逸, 灭, 堰, 吐, 谭, 僧, 盾, 凛, 矛, 锻, 脉, 妩, 钉, 弈, 奏, 勃, 筒, 锂, 哨, ⊙, 兔, 睹, 嵌, 仰, 萝, 垂, 裹, 茸, 饼, 狸, 狱, 虐, 摘, 鹅, 葬, 乾, 奉, 陵, 蝶, 俨, 湘, 闫, 惕, 沫, 役, 釜, 帆, 妍, 叔, 窦, 褶, 皱, 掷, 斩, 催, 仗, 慰, 聂, 舌, 曹, 庚, 肖, 译, 藤, 昊, 拦, 熬, 辽, 噱, 栏, 幽, 蔽, 帧, 徕, 枝, 垃, 圾, 鸟, 炭, 谅, 莎, 酿, 绣, 畴, 帐, 辆, 韵, 僵, 滤, 粘, 茅, 邹, 惟, 跷, 佬, 赫, 骄, 粹, 薇, 翁, 割, 焰, 悠, 谜, 澜, 凰, 媲, 羞, 茄, 屁, 蝙, 蝠, 揣, 擅, 姻, 侣, 滥, 遏, 遥, 嘛, 骆, 棣, 屑, °, 祭, 挚, 悚, 瘾, 拭, 铝, 厘, 擎, 湛, 扳, ~, 秦, 殿, 骚, 滔, 旭, 鹤, 闸, 酝, 洽, 矮, 荆, 寂, 浸, 梭, 娶, 呀, 暇, 勋, 炒, 闵, 柄, 狄, 睿, 纺, 豹, 祸, 喘, 黛, 昔, 邱, 煌, 啸, 撤, 挽, 匹, 萃, 廷, 圻, 坑, 敲, 臭, 幂, 炀, 掏, 帖, 灌, 汀, 荫, 稚, 鞍, 晒, 痒, 棍, 煮, 喂, 拾, 酵, 劝, 哗, 讶, 姨, 姑, 雾, 慈, 毅, 肌, 晃, 琢, 盆, 扯, 襟, 刃, 逄, 喉, 仑, 烁, 甫, 悟, 雯, 旱, 疾, 飓, 阱, 咖, 踩, 垮, 竣, 滋, 铅, 撒, 蹄, 畏, ', 沾, 熄, 阐, 燥, 锈, 寺, 巅, 熙, 铭, ., 艇, 屹, 幢, 吝, 讼, 靖, 沸, 佣, 崭, 盼, 凳, 萎, 锡, 愫, 撕, 溜, 蜀, 窄, 嬉, 戛, 犀, 筐, 翔, 攒, 溯, 岂, 脆, 挨, 杠, 竖, 骤, 蒸, 搁, 诵, 厕, 梳, 盒, 弛, 缕, 戟, 毁, 戚, 娟, 〈, 栩, 谍, 逻, 汗, 孝, 荧, 绳, 雀, 珊, 翎, 弧, 隙, 坊, 黯, 菱, 辟, 贩, 禧, 宰, 寇, 钓, 斑, 饶, 歇, 沛, 瞄, 俭, 炬, 卑, 婷, 橙, 琐, 缎, 渔, 夕, 呐, 豆, 钦, 揪, 颤, 谣, 勿, 毙, 桶, 唤, 痕, 脏, 倪, 仲, =, 删, 飚, 蹦, 庸, 悔, 尸, →, 彪, 羁, 泣, 矣, 昏, 瑟, 兢, 讽, 绚, 踊, 蚀, 灼, 塘, 滨, 挟, 缤, 渺, 璀, 璨, 芒, 熠, , 闳, 咕, 泵, 辐, #, 伺, 梯, 抚, 韧, 恳, 撩, 蹿, 捐, 誓, 鞠, 躬, 腹, 柴, 脾, 宪, 挫, 巷, 陋, 剖, ≤, 诡, 噬, 潇, 痴, 樱, 弯, 岳, 珑, 炙, 龚, 锣, 咀, 扛, 匾, 卸, 逝, 荼, 粤, 闽, 哄, 梨, 啡, 扇, 歪, 赘, 婉, 捂, 晕, 僻, 酌, 哼, 咬, 阎, 铎, 琦, 儒, 啬, 翘, 岐, 诏, 霉, 苯, 虫, 渣, 敷, 菌, 蜡, 绯, 寞, 傍, 濠, 萦, 沣, 茂, 拎, 泄, 瑜, 诟, 妤, 琅, 咸, 粒, 颓, ●, 娴, 狮, 倭, 煎, 绸, 铆, 耸, 彤, 汁, 宕, 绰, 渥, 橡, 栗, 烤, 膀, 驳, 捆, 镂, 蟹, 椰, 蓉, ­, 唇, 逗, 芸, 哎, 闺, 敝, 诛, 衙, 陀, 啥, 唉, 猴, 澡, 杖, 歉, 瞎, 嚣, 咋, ^, 絮, 熏, 暧, 昧, 佼, 肿, 睁, 肢, 芭, 骷, 髅, 弦, 炜, 焕, 弓, 灶, 寥, 挪, 阁, 瞪, 逮, 惩, 狭, 挠, 麾, 捞, 羹, 潢, 兜, 菩, 拱, 奠, 廓, 躁, 旷, 婧, 烘, 枉, 昭, 泳, 崛, 氓, 稻, 猎, 栽, 咏, 渝, 苛, 魁, 屉, 楷, 蝴, ¥, 镯, 橘, 搅, 轩, 衍, ∩, 捡, 悼, 殴, 匿, 摔, 鲲, 齿, 陕, 缅, 匆, 锏, 抬, 肺, 咳, 宛, 挎, 慷, 骏, 蜗, 邵, 淫, 窜, 缉, 乞, 锢, 哒

1.4 标签映射

我们之前看到标签是教育体育等文本,需要转换成数值标签

label_to_int = {label: index for index, label in enumerate(data['label'].unique())}
data['label'] = data['label'].map(label_to_int)

在这里插入图片描述

1.5 创建DataLoader

class NewsDataset(Dataset):def __init__(self, texts, labels, vocab):# 初始化函数,接收文本、标签和词汇表作为参数。self.texts = texts# 将文本数据存储为实例变量。self.labels = labels# 将标签数据存储为实例变量。self.vocab = vocab# 将词汇表存储为实例变量。def __len__(self):# 定义魔术方法 __len__,返回数据集中的样本数量。return len(self.texts)def __getitem__(self, index):# 定义魔术方法 __getitem__,用于通过索引获取数据集中的样本。text = self.texts.iloc[index]# 使用索引从文本数据中获取对应的文本。label = self.labels.iloc[index]# 使用索引从标签数据中获取对应的标签。numericalized_text = [self.vocab.stoi["<SOS>"]] + self.vocab.numericalize(text) + [self.vocab.stoi["<EOS>"]]# 将文本转换为数字ID序列,首先添加开始标记 "<SOS>",然后使用词汇表的 numericalize 方法将文本转换为数字ID,最后添加结束标记 "<EOS>"。return torch.tensor(numericalized_text), torch.tensor(label)# 返回一个元组,包含文本的数字ID序列(转换为 PyTorch 张量)和对应的标签(也转换为 PyTorch 张量)。train_dataset = NewsDataset(train_texts, train_labels, vocab, max_length)
test_dataset = NewsDataset(test_texts, test_labels, vocab, max_length)
train_loader = DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

代码中给出了详细的注释,所以就不过多的解释。

查看下数据
在这里插入图片描述

2、 创建模型

RNN模块

Pytorch中RNN模块函数为torch.nn.RNN(input_size,hidden_size,num_layers,batch_first),每个参数的含义如下:

  • input_size:输入数据的编码维度,比如房价预测,房价都是用一维的数直接表示的,所以此时input_size为1;如果输入的是字符编码,比如一个字符用3维编码表示,那么此时input_size为3;
  • hidden_size:隐含层的维数,这个维数要么参考别人的结构设置,要么自行设置,比如可以设置成20;
  • num_layers:隐含层的层数,也就是上面几幅图有几个h层,上面都是只有1层,所以 num_layers为1。
  • batch_first:当 batch_first设置为True时,输入的参数顺序变为:x:[batch, seq_len, input_size],h0:[batch, num_layers, hidden_size]。
class RNN(nn.Module):def __init__(self, vocab_size, embedding_dim, hidden_dim, output_dim, n_layers, bidirectional, dropout):super().__init__()# 初始化函数,接收模型参数作为输入。# 调用父类 nn.Module 的 __init__ 方法。self.embedding = nn.Embedding(vocab_size, embedding_dim)# 创建一个嵌入层,用于将单词的索引转换为密集的向量表示。self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers=n_layers, bidirectional=bidirectional, dropout=dropout, batch_first=True)# 创建一个 LSTM 层,num_layers 指定层数,bidirectional 指定是否使用双向 LSTM,dropout 指定 dropout 比率,batch_first 指定输入数据的维度顺序。self.fc = nn.Linear(hidden_dim * 2 if bidirectional else hidden_dim, output_dim)# 创建一个全连接层,如果使用双向 LSTM,则输入维度是 hidden_dim * 2,否则是 hidden_dim。输出维度是 output_dim,即分类任务的类别数。self.dropout = nn.Dropout(dropout)# 创建一个 dropout 层,用于防止过拟合。def forward(self, text):# 定义前向传播函数。embedded = self.dropout(self.embedding(text))# 将输入文本通过嵌入层和 dropout 层。output, hidden = self.rnn(embedded)# 将嵌入后的文本输入到 LSTM 层,output 是所有时间步的输出,hidden 是最后一个时间步的隐藏状态,cell 是最后一个时间步的细胞状态。if self.rnn.bidirectional:# 如果使用双向 LSTM,则将最后一个时间步的前向和后向隐藏状态拼接起来。hidden = self.dropout(torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim=1))else:# 如果使用单向 LSTM,则直接使用最后一个时间步的隐藏状态。hidden = self.dropout(hidden[-1,:,:])return self.fc(hidden)# 将处理后的隐藏状态输入到全连接层,并返回输出。# 模型参数
vocab_size = len(vocab.stoi)
# 词汇表大小,即不同单词的数量。
embedding_dim = 100
# 嵌入层维度,即单词向量的维度。
hidden_dim = 256
# LSTM 层的隐藏状态维度。
output_dim = len(label_to_int)
# 输出维度,即分类任务的类别数。
n_layers = 2
# LSTM 层的层数。
bidirectional = True
# 是否使用双向 LSTM。
dropout = 0.5
# dropout 比率。model = RNN(vocab_size, embedding_dim, hidden_dim, output_dim, n_layers, bidirectional, dropout)
# 创建 RNN 模型的实例。

模型结构

RNN((embedding): Embedding(2970, 100)(rnn): RNN(100, 256, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)(fc): Linear(in_features=512, out_features=10, bias=True)(dropout): Dropout(p=0.5, inplace=False)
)

3、 开始训练

# 3. 训练模型
optimizer = optim.Adam(model.parameters())
criterion = nn.CrossEntropyLoss()
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)
criterion = criterion.to(device)from tqdm import tqdm
num_epochs = 10
for epoch in tqdm(range(num_epochs)):train_loss = train(model, train_loader, optimizer, criterion)valid_loss = evaluate(model, test_loader, criterion)print(f'Epoch: {epoch+1}, Train Loss: {train_loss:.4f}, Val. Loss: {valid_loss:.4f}')

在这里插入图片描述
完整代码

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

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

相关文章

【解决方案】ArcGIS Engine二次开发时,运行后出现“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain...”

我们在做ArcGIS Engine二次开发时&#xff0c;特别是新手&#xff0c;安装好了开发环境&#xff0c;满怀信心的准备将按照教程搭建好的框架在Visual Studio中进行运行。点击运行后&#xff0c;却出现了“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化…

ABAP - SALV教程06 - 列的设置(隐藏、修改、优化列宽)

SAVL要想像Function ALV或OO ALV那样设置Fieldcat&#xff0c;也是有方法的。通过取得全体列的类引用 CL_SALV_COLUMNS来进行修改 METHOD set_columns.* 取得全部列的对象DATA(lo_cols) co_alv->get_columns( ).* 设置自动优化列宽度lo_cols->set_optimize( X ).T…

实例驱动计算机网络

文章目录 计算机网络的层次结构应用层DNSHTTP协议HTTP请求响应过程 运输层TCP协议TCP协议面向连接实现TCP的三次握手连接TCP的四次挥手断开连接 TCP协议可靠性实现TCP的流量控制TCP的拥塞控制TCP的重传机制 UDP协议 网际层IP协议&#xff08;主机与主机&#xff09;IP地址的分类…

计算机视觉基础知识(十六)--图像识别

图像识别 信息时代的一门重要技术;目的是让计算机代替人类处理大量的物理信息;随着计算机技术的发展,人类对图像识别技术的认识越来越深刻;图像识别技术利用计算机对图像进行处理\分析\理解,识别不同模式的目标和对象;过程分为信息的获取\预处理\特征抽取和选择\分类器设计\分…

在Golang中简化日志记录:提升性能和调试效率

最大化效率和有效故障排除&#xff1a;在Golang中简化日志记录 日志记录是软件开发的一个基本方面&#xff0c;有助于调试、监控和理解应用程序的流程。在Golang中&#xff0c;有效的日志记录实践可以显著提高性能并简化调试过程。本文探讨了优化Golang日志记录的技术&#xf…

[HackMyVM]靶场 VivifyTech

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Unk…

基于Java的超市商品管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 简介1.2 项目录屏 二、研究内容2.1 数据中心模块2.2 超市区域模块2.3 超市货架模块2.4 商品类型模块2.5 商品档案模块 三、系统设计3.1 用例图3.2 时序图3.3 类图3.4 E-R图 四、系统实现4.1 登录4.2 注册4.3 主页4.4 超市区域管理4.5 超市货架管理4.6 商品类型…

浅谈 Linux fork 函数

文章目录 前言fork 基本概念代码演示示例1&#xff1a;体会 fork 函数返回值的作用示例2&#xff1a;创建多进程&#xff0c;加深对 fork 函数的理解 前言 本篇介绍 fork 函数。 fork 基本概念 pid_t fork(void) fork 的英文含义是"分叉"&#xff0c;在这里就是 …

Java知识点整理(一)

反射 反射是在运行状态中&#xff0c;动态获取类信息&#xff0c;以及动态调用对象的方法的功能叫做反射机制。在JDBC&#xff0c;Servlet&#xff0c;SpringIOC中 优点&#xff1a;能够灵活的创建代码&#xff0c;动态执行方法访问属性。 缺点&#xff1a;破坏了封装性&…

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。顾名思义&#xff0c;MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…

从零自制docker-1-【环境配置 docker go介绍与安装】

文章目录 docker简介举例docker安装go语言go安装go 配置 docker简介 Docker可以看作是一种极其轻巧的“虚拟机”&#xff0c;它允许你将一个或多个程序及其运行环境打包在一起&#xff0c;形成一个标准化的单元&#xff0c;这个单元可以在任何支持Docker的系统上运行&#xff…

神经网络之万能定理python-pytorch实现,可以拟合任意曲线

神经网络之万能定理python-pytorch实现&#xff0c;可以拟合任意曲线 博主&#xff0c;这几天一直在做这个曲线拟合的实验&#xff0c;讲道理&#xff0c;网上可能也有很多这方面的资料&#xff0c;但是博主其实试了很多&#xff0c;效果只能对一般的曲线还行&#xff0c;稍微…

114.龙芯2k1000-pmon(13)- 串口如何用

本文是讲原理图的部分&#xff0c;跟pmon的关系不大&#xff01;&#xff01; 参考手册&#xff1a;《龙芯2K1000处理器用户手册.pdf》 刚刚看数据手册&#xff0c;让我是有点惊讶&#xff0c;但是也让我迷惑。&#xff08;一个串口复用为4个是啥意思&#xff1f;&#xff09;…

MogaNet实战:使用MogaNet实现图像分类任务(一)

文章目录 摘要安装包安装timm 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文&#xff1a;https://arxiv.org/pdf/2211.03295.pdf 作者多阶博弈论交互这一全新视角探索了现代卷积神经网络的表示能力。这种交互反映了不同尺度上下文中变量间的相互作用效…

#WEB前端(DIV、SPAN)

1.实验&#xff1a;DIV、SPAN 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; 类? 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdev…

Python3零基础教程之数学运算专题进阶

大家好,我是千与编程,今天已经进入我们Python3的零基础教程的第十节之数学运算专题进阶。上一次的数学运算中我们介绍了简单的基础四则运算,加减乘除运算。当涉及到数学运算的 Python 3 刷题使用时,进阶课程包含了许多重要的概念和技巧。下面是一个简单的教程,涵盖了一些常…

BUUCTF---数据包中的线索1

1.题目描述 2.下载附件&#xff0c;是一个.pcap文件 3.放在wireshark中&#xff0c;仔细观察数据流&#xff0c;会发现有个叫fenxi.php的数据流 4.这条数据流是http,且使用GET方式&#xff0c;接下来我们使用http.request,methodGET 命令来过滤数据流 5.在分析栏中我们追踪htt…

VirtualBox 桥接网卡 未指定 “未能启动虚拟电脑Ubuntu,由于下述物理网卡未找到:”

解决办法&#xff0c;安装虚拟网卡&#xff0c;win11查找方式&#xff1a;控制面板→网络和共享中心→更改适配器设置 此时出现下面情况就算安装成功 但是如果报错&#xff1a;找不到指定的模块 则按下面步骤删除干净垃圾重新上面操作 先安装CCleaner, 链接:CCleaner Makes Y…

Day10:基础入门-HTTP数据包Postman构造请求方法请求头修改状态码判断

目录 数据-方法&头部&状态码 案例-文件探针 案例-登录爆破 工具-Postman自构造使用 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件…

51单片机-(定时/计数器)

51单片机-&#xff08;定时/计数器&#xff09; 了解CPU时序、特殊功能寄存器和定时/计数器工作原理&#xff0c;以定时器0实现每次间隔一秒亮灯一秒的实验为例理解定时/计数器的编程实现。 1.CPU时序 1.1.四个周期 振荡周期&#xff1a;为单片机提供定时信号的振荡源的周期…