├── README.md ├── a.png ├── ci.json ├── file └── a.txt ├── model_epoch.pth ├── test.py └── train.py /README.md: -------------------------------------------------------------------------------- 1 | ### 语义排序训练 2 | 3 | 4 | ## 注意 5 | 6 | 最多排序20个字 7 | 8 | ## 数据集准备 9 | 10 | # 把txt文件是utf-8编码文件放入file文件夹中 11 | 目录格式: 12 | --- 13 | 14 | file 15 | 16 | --- a.txt 17 | 18 | --- b.txt 19 | 20 | --- ... 21 | 22 | --- 23 | 24 | 25 | ## 训练脚本 26 | 27 | ``` 28 | python train.py 29 | ``` 30 | 31 | ## 测试脚本 32 | 33 | ``` 34 | python test.py 35 | ``` 36 | 37 | 知识星球 : https://t.zsxq.com/14LP2ulsk 38 | 39 | 40 | 国内 al系列 jy rs可找这位大佬 微信:z596918978 41 | 42 | ![image](a.png) 43 | 44 | 45 | -------------------------------------------------------------------------------- /a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2833844911/paixu/b81c3b65c5ebeadbbddc4e578a1dc79b3dfb04e6/a.png -------------------------------------------------------------------------------- /ci.json: -------------------------------------------------------------------------------- 1 | {"ks": 1021, "学": 3, "霸": 4, "从": 5, "改": 6, "变": 7, "开": 8, "始": 9, " ": 10, "作": 11, "者": 12, ":": 13, "一": 14, "白": 15, "化": 16, "贝": 17, "内": 18, "容": 19, "简": 20, "介": 21, " ": 22, "宿": 23, "主": 24, "需": 25, "重": 26, "新": 27, "参": 28, "加": 29, "高": 30, "考": 31, "达": 32, "到": 33, "必": 34, "要": 35, "性": 36, "的": 37, "择": 38, "优": 39, "录": 40, "取": 41, "我": 42, "书": 43, "都": 44, "卖": 45, "了": 46, "你": 47, "让": 48, "复": 49, "读": 50, "?": 51, "不": 52, "怎": 53, "么": 54, "送": 55, "外": 56, "挂": 57, "系": 58, "统": 59, "…": 60, "虽": 61, "然": 62, "是": 63, "可": 64, "选": 65, "项": 66, "但": 67, "就": 68, "意": 69, "味": 70, "着": 71, "陈": 72, "舟": 73, "逐": 74, "渐": 75, "自": 76, "己": 77, "卷": 78, "求": 79, "生": 80, "涯": 81, "第": 82, "章": 83, "查": 84, "个": 85, "分": 86, "触": 87, "电": 88, "初": 89, "夏": 90, "6": 91, "月": 92, "2": 93, "3": 94, "号": 95, "华": 96, "国": 97, "年": 98, "度": 99, "大": 100, "会": 101, "终": 102, "于": 103, "来": 104, "最": 105, "紧": 106, "张": 107, "刺": 108, "激": 109, "阶": 110, "段": 111, "得": 112, "样": 113, "能": 114, "上": 115, "哪": 116, "所": 117, "将": 118, "成": 119, "为": 120, "这": 121, "时": 122, "间": 123, "基": 124, "调": 125, "看": 126, "二": 127, "三": 128, "校": 129, "门": 130, "口": 131, "进": 132, "出": 133, "队": 134, "伍": 135, "扫": 136, "过": 137, "搜": 138, "寻": 139, "目": 140, "标": 141, "他": 142, "在": 143, "等": 144, "同": 145, "桌": 146, "管": 147, "好": 148, "差": 149, "们": 150, "约": 151, "起": 152, "去": 153, "弟": 154, "妹": 155, "面": 156, "前": 157, "晃": 158, "荡": 159, "下": 160, "拉": 161, "仇": 162, "恨": 163, "定": 164, "睛": 165, "磨": 166, "唧": 167, "骑": 168, "瓶": 169, "车": 170, "瘦": 171, "现": 172, "黄": 173, "圈": 174, "也": 175, "见": 176, "停": 177, "没": 178, "呢": 179, "嘛": 180, "说": 181, "客": 182, "气": 183, "坐": 184, "后": 185, "座": 186, "抬": 187, "手": 188, "臂": 189, "瞥": 190, "眼": 191, "表": 192, "小": 193, "子": 194, "居": 195, "迟": 196, "顿": 197, "继": 198, "续": 199, "道": 200, "反": 201, "正": 202, "完": 203, "数": 204, "注": 205, "何": 206, "况": 207, "想": 208, "本": 209, "易": 210, "那": 211, "谁": 212, "知": 213, "又": 214, "爆": 215, "发": 216, "次": 217, "期": 218, "待": 219, "吧": 220, "先": 221, "载": 222, "朝": 223, "皖": 224, "西": 225, "中": 226, "超": 227, "市": 228, "而": 229, "俩": 230, "机": 231, "近": 232, "用": 233, "话": 234, "拿": 235, "固": 236, "照": 237, "准": 238, "证": 239, "热": 240, "线": 241, "拨": 242, "嘟": 243, "忙": 244, "音": 245, "很": 246, "短": 247, "接": 248, "通": 249, "心": 250, "里": 251, "觉": 252, "地": 253, "跟": 254, "冒": 255, "嘴": 256, "股": 257, "和": 258, "却": 259, "随": 260, "慢": 261, "涨": 262, "像": 263, "有": 264, "总": 265, "往": 266, "乐": 267, "观": 268, "点": 269, "方": 270, "万": 271, "提": 272, "示": 273, "把": 274, "输": 275, "入": 276, "按": 277, "#": 278, "键": 279, "结": 280, "束": 281, "语": 282, "文": 283, "1": 284, "*": 285, "5": 286, "英": 287, "0": 288, "理": 289, "综": 290, "8": 291, "全": 292, "省": 293, "排": 294, "名": 295, "4": 296, "听": 297, "请": 298, "错": 299, "声": 300, "报": 301, "直": 302, "清": 303, "楚": 304, "流": 305, "干": 306, "扰": 307, "因": 308, "此": 309, "还": 310, "跑": 311, "毕": 312, "竟": 313, "字": 314, "太": 315, "特": 316, "殊": 317, "且": 318, "根": 319, "据": 320, "试": 321, "院": 322, "消": 323, "息": 324, "今": 325, "已": 326, "经": 327, "部": 328, "炉": 329, "各": 330, "批": 331, "低": 332, "控": 333, "制": 334, "划": 335, "科": 336, "人": 337, "7": 338, "老": 339, "板": 340, "相": 341, "关": 342, "闻": 343, "条": 344, "窜": 345, "耳": 346, "比": 347, "千": 348, "多": 349, "嗯": 350, "应": 351, "该": 352, "哦": 353, "感": 354, "丝": 355, "满": 356, "足": 357, "卧": 358, "槽": 359, "打": 360, "算": 361, "再": 362, "仔": 363, "细": 364, "遍": 365, "以": 366, "彻": 367, "底": 368, "身": 369, "边": 370, "伙": 371, "伴": 372, "吓": 373, "跳": 374, "微": 375, "偏": 376, "头": 377, "旁": 378, "带": 379, "溢": 380, "言": 381, "兴": 382, "奋": 383, "迎": 384, "光": 385, "挑": 386, "眉": 387, "难": 388, "抑": 389, "动": 390, "刚": 391, "啊": 392, "挺": 393, "解": 394, "情": 395, "受": 396, "之": 397, "模": 398, "拟": 399, "槛": 400, "徘": 401, "徊": 402, "刻": 403, "飘": 404, "喜": 405, "贺": 406, "只": 407, "惴": 408, "安": 409, "鹿": 410, "肆": 411, "乱": 412, "撞": 413, "备": 414, "问": 415, "句": 416, "未": 417, "家": 418, "顾": 419, "啥": 420, "些": 421, "恍": 422, "惚": 423, "掉": 424, "才": 425, "愣": 426, "诧": 427, "异": 428, "咋": 429, "被": 430, "少": 431, "呀": 432, "吐": 433, "s": 434, "i": 435, "草": 436, "泥": 437, "马": 438, "奔": 439, "师": 440, "常": 441, "压": 442, "死": 443, "概": 444, "念": 445, "惨": 446, "烈": 447, "整": 448, "半": 449, "硬": 450, "给": 451, "滋": 452, "醒": 453, "幽": 454, "怨": 455, "别": 456, "呦": 457, "猛": 458, "识": 459, "希": 460, "望": 461, "许": 462, "锁": 463, "犹": 464, "豫": 465, "便": 466, "阵": 467, "传": 468, "朵": 469, "忍": 470, "住": 471, "松": 472, "筒": 473, "啪": 474, "仿": 475, "佛": 476, "风": 477, "般": 478, "摔": 479, "支": 480, "离": 481, "破": 482, "碎": 483, "裸": 484, "露": 485, "腿": 486, "浑": 487, "麻": 488, "倒": 489, "脑": 490, "与": 491, "界": 492, "隔": 493, "绝": 494, "瞬": 495, "突": 496, "失": 497, "静": 498, "描": 499, "功": 500, "检": 501, "测": 502, "域": 503, "程": 504, "急": 505, "脱": 506, "哎": 507, "抹": 508, "除": 509, "存": 510, "痕": 511, "迹": 512, "启": 513, "式": 514, "合": 515, "格": 516, "w": 517, "t": 518, "f": 519, "无": 520, "法": 521, "抗": 522, "糊": 523, "探": 524, "索": 525, "球": 526, "民": 527, "医": 528, "诊": 529, "室": 530, "脸": 531, "详": 532, "躺": 533, "病": 534, "床": 535, "翻": 536, "覆": 537, "什": 538, "闭": 539, "双": 540, "及": 541, "图": 542, "信": 543, "真": 544, "毛": 545, "对": 546, "事": 547, "毫": 548, "处": 549, "片": 550, "红": 551, "彤": 552, "空": 553, "块": 554, "巨": 555, "显": 556, "屏": 557, "色": 558, "叹": 559, "闪": 560, "烁": 561, "央": 562, "摆": 563, "五": 564, "—": 565, "幕": 566, "轻": 567, "陷": 568, "慌": 569, "喊": 570, "招": 571, "惹": 572, "步": 573, "并": 574, "两": 575, "快": 576, "速": 577, "走": 578, "拳": 579, "脚": 580, "踢": 581, "仅": 582, "甚": 583, "至": 584, "越": 585, "力": 586, "久": 587, "乏": 588, "噩": 589, "缓": 590, "瘫": 591, "仍": 592, "甘": 593, "握": 594, "击": 595, "哭": 596, "腔": 597, "害": 598, "诉": 599, "兀": 600, "响": 601, "收": 602, "隐": 603, "藏": 604, "指": 605, "令": 606, "败": 607, "恢": 608, "既": 609, "代": 610, "纯": 611, "净": 612, "透": 613, "明": 614, "平": 615, "转": 616, "屁": 617, "怕": 618, "神": 619, "四": 620, "绕": 621, "盘": 622, "赶": 623, "逃": 624, "较": 625, "水": 626, "晶": 627, "玻": 628, "璃": 629, "奇": 630, "落": 631, "似": 632, "议": 633, "行": 634, "若": 635, "肯": 636, "位": 637, "置": 638, "倚": 639, "展": 640, "智": 641, "慧": 642, "遥": 643, "远": 644, "由": 645, "瞒": 646, "鉴": 647, "素": 648, "绑": 649, "另": 650, "极": 651, "怔": 652, "搞": 653, "回": 654, "屈": 655, "服": 656, "断": 657, "认": 658, "顺": 659, "武": 660, "左": 661, "右": 662, "贴": 663, "瞧": 664, "累": 665, "默": 666, "苦": 667, "答": 668, "体": 669, "灵": 670, "睁": 671, "灯": 672, "任": 673, "做": 674, "摇": 675, "灭": 676, "护": 677, "士": 678, "推": 679, "苍": 680, "单": 681, "切": 682, "假": 683, "副": 684, "止": 685, "休": 686, "罢": 687, "房": 688, "扯": 689, "欲": 690, "药": 691, "费": 692, "付": 693, "拖": 694, "留": 695, "候": 696, "天": 697, "花": 698, "连": 699, "实": 700, "傻": 701, "吞": 702, "幻": 703, "玄": 704, "尴": 705, "尬": 706, "鸟": 707, "严": 708, "影": 709, "商": 710, "疑": 711, "钱": 712, "吗": 713, "借": 714, "搭": 715, "路": 716, "抽": 717, "搐": 718, "坏": 719, "黑": 720, "估": 721, "计": 722, "奈": 723, "怪": 724, "依": 725, "旧": 726, "趣": 727, "谢": 728, "呼": 729, "找": 730, "爸": 731, "钟": 732, "或": 733, "站": 734, "苏": 735, "姓": 736, "评": 737, "级": 738, "伪": 739, "混": 740, "·": 741, "渣": 742, "务": 743, "骂": 744, "劳": 745, "资": 746, "浮": 747, "均": 748, "活": 749, "故": 750, "量": 751, "当": 752, "惑": 753, "懵": 754, "逼": 755, "粗": 756, "决": 757, "案": 758, "(": 759, "唯": 760, ")": 761, "公": 762, "思": 763, "立": 764, "沉": 765, "刷": 766, "获": 767, "竞": 768, "争": 769, "府": 770, "源": 771, "绩": 772, "迷": 773, "潜": 774, "壮": 775, "努": 776, "徒": 777, "伤": 778, "悲": 779, "即": 780, "使": 781, "挖": 782, "掘": 783, "钥": 784, "匙": 785, "世": 786, "谓": 787, "油": 788, "尚": 789, "额": 790, "奖": 791, "励": 792, "题": 793, "它": 794, "命": 795, "判": 796, "叫": 797, "保": 798, "木": 799, "燕": 800, "够": 801, "秀": 802, "尽": 803, "钮": 804, "拒": 805, "王": 806, "款": 807, "虑": 808, "伸": 809, "飞": 810, "础": 811, "旋": 812, "律": 813, "普": 814, "其": 815, "述": 816, "摸": 817, "良": 818, "予": 819, "否": 820, "蛋": 821, "疼": 822, "办": 823, "如": 824, "果": 825, "确": 826, "浪": 827, "亡": 828, "验": 829, "种": 830, "论": 831, "件": 832, "嗓": 833, "帮": 834, "靠": 835, "友": 836, "赞": 837, "助": 838, "节": 839, "奏": 840, "吾": 841, "悔": 842, "警": 843, "告": 844, "坑": 845, "爹": 846, "早": 847, "餐": 848, "顶": 849, "熊": 850, "猫": 851, "递": 852, "昨": 853, "晚": 854, "溜": 855, "宵": 856, "网": 857, "吃": 858, "夜": 859, "睡": 860, "逛": 861, "街": 862, "梦": 863, "巴": 864, "县": 865, "城": 866, "敲": 867, "鼓": 868, "勇": 869, "妈": 870, "丰": 871, "盛": 872, "饭": 873, "菜": 874, "建": 875, "杯": 876, "酒": 877, "端": 878, "厨": 879, "晓": 880, "碗": 881, "筷": 882, "洗": 883, "笑": 884, "放": 885, "庆": 886, "祝": 887, "喝": 888, "买": 889, "哥": 890, "几": 891, "呵": 892, "鬼": 893, "哈": 894, "父": 895, "亲": 896, "惭": 897, "愧": 898, "戒": 899, "烟": 900, "例": 901, "阳": 902, "台": 903, "阻": 904, "趁": 905, "母": 906, "拾": 907, "深": 908, "吸": 909, "掐": 910, "向": 911, "儿": 912, "更": 913, "乎": 914, "持": 915, "坚": 916, "毅": 917, "庭": 918, "原": 919, "慎": 920, "皆": 921, "欢": 922, "工": 923, "归": 924, "战": 925, "状": 926, "态": 927, "操": 928, "坊": 929, "邻": 930, "惊": 931, "呆": 932, "叔": 933, "伯": 934, "阿": 935, "姨": 936, "长": 937, "辈": 938, "夸": 939, "宴": 940, "朋": 941, "料": 942, "店": 943, "淘": 944, "析": 945, "棘": 946, "须": 947, "习": 948, "背": 949, "词": 950, "星": 951, "忘": 952, "记": 953, "周": 954, "海": 955, "术": 956, "效": 957, "抱": 958, "轮": 959, "叮": 960, "恭": 961, "鸡": 962, "汤": 963, "惯": 964, "养": 965, "咦": 966, "写": 967, "稿": 968, "纸": 969, "益": 970, "积": 971, "迈": 972, "懒": 973, "惰": 974, "每": 975, "A": 976, "B": 977, "C": 978, "呓": 979, "喃": 980, "游": 981, "戏": 982, "责": 983, "鱼": 984, "晒": 985, "罕": 986, "堆": 987, "敢": 988, "物": 989, "预": 990, "恒": 991, "艰": 992, "日": 993, "悦": 994, "百": 995, "倍": 996, "奉": 997, "熟": 998, "悉": 999, "恶": 1000, "撇": 1001, "痴": 1002, "货": 1003, "娇": 1004, "柔": 1005, "爱": 1006, "拥": 1007, "羡": 1008, "慕": 1009, "嫉": 1010, "妒": 1011, "唉": 1012, "李": 1013, "班": 1014, "十": 1015, "适": 1016, "督": 1017, "促": 1018, "监": 1019, "紊": 1020} -------------------------------------------------------------------------------- /file/a.txt: -------------------------------------------------------------------------------- 1 | 学霸从改变开始 作者:一白化贝 内容简介:    宿主需重新参加高考 达到必要性的择优录取    我书都卖了 你让我复读?    不复读 怎么送你外挂系统?    ……   虽然是不可选的选项 但选择就意味着改变   从选择开始 陈舟逐渐改变自己 卷一 求学生涯 第一章 查个分 触电了?   初夏 6月的第23号   华国一年一度的高考大会终于来到最紧张刺激的查分阶段   考得怎么样 能上哪所大学 将成为这段时间的主基调   看着一二三从学校门口进进出出的查分队伍 陈舟一一扫过 搜寻着自己的目标   他在等同桌 不管考好考差 他们约着一起来学校查个分 一起去学弟学妹面前晃荡一下 拉拉仇恨   陈舟定睛一看 这个磨磨唧唧骑电瓶车的瘦高个终于出现在了学校门口   黄加一扫了一圈 也看见了陈舟 就骑着电瓶车停到了陈舟面前: 你分查了没?    没 这不等你呢嘛 陈舟说着不客气的坐在电瓶车后座上 抬起手臂 瞥了眼手表 这小子居然没迟   顿了顿 陈舟继续道: 不过查不查分都一样 反正高考考完分数就注定了 何况我们想考个一本都不容易    那可不一样 谁知道你小子是不是又爆发一次 你就不期待自己爆发一下?    不期待    那好吧 那我们先去学校晃荡一圈?    查分吧    ……?   黄加一骑着电瓶车载着陈舟朝皖西一中门口的小超市而去 他俩都没手机 就近选择用小超市的电话查分   陈舟拿起小超市的固定电话 照着准考证上的查分热线拨了过去    嘟……   忙音很短 在接通时 陈舟心里的小紧张也不自觉地跟着冒了出来   虽然他嘴上说着分数注定了 可心中的那股紧张和期待却随着电话的接通慢慢高涨了起来   就像所有考生考完后 心里总会往乐观一点的方面去想一样 说不定有个万一呢?   跟着电话里的提示音 陈舟把准考证号输入 按#号键结束    语文:1**分    数学:**5分    英语:*0分    理综:2*8分    总分:5**分 全省排名44444名 重听请按*号键   不知道是不是陈舟的错觉 电话里的声音在报分数时 一直听不清楚 好像一直有一个像电流的声音在干扰一样   因此 不管是语数外理综 还是总分 陈舟一个都没听全   不过 全省排名44444名 是没跑了 毕竟这个44444名 数字太特殊了 而且报排名的声音是清楚的    根据皖省考试院最新消息 皖省今年高考考生分数已经全部出炉 各批次最低控制分数线也已划定 2013年皖省高考理科一本分数线为544分 达线人数为45631人 理科二本线为478分……   小超市老板也正在看着皖省高考的相关新闻 这条最新消息也窜进了陈舟的耳中    好像比一本线排名高了有一千多名 嗯 没听错的话 应该是高了这么多 这么一想的话 好像考的还不错哦 陈舟心中高涨起来的期待感得到了一丝满足    卧槽   就在陈舟打算按*号键再仔细听一遍自己的高考分数 以彻底满足自己的期待感时 身边伙伴的一声卧槽吓了他一跳   陈舟微微偏头 就看见了身旁伙伴带着的那股溢于言表的兴奋   迎上陈舟的目光 黄加一挑了挑眉 语气中带着一股难以抑制的激动: 卧槽 陈舟 我 我一本达线了 我考了545分 刚好比一本线高了1分    可以啊 大黄 陈舟挺能理解黄加一现在的心情的 也挺能感同身受的   之前模拟考一直不上不下 在一本线门槛徘徊 在高考这一刻 总算是飘过了一本线 太可喜可贺了   可以说 黄加一心中的那股期待感 那只查分前惴惴不安的小鹿 现在终于可以肆意的乱撞了   黄加一一边拿着电话随手按下*号键 准备再听一遍分数 一边随口问了陈舟一句: 你呢?    我没听清 正打算再听……   陈舟话未说完 黄加一这家伙已经跟着电话里面的声音自顾自地报起了分数 语文:105 数学115 英语……    总分:545分 全省排名44445名    啥?   在听到黄加一报出全省排名44445名时 他有些恍惚   黄加一把分数排名都再听了一遍 满足的挂掉电话后 才发现身边发愣的陈舟 诧异道: 咋了?被我的分数吓到了?    你多少名?    全省44445名呀 说着 黄加一吐槽道: 还好不是44444名 全是si   殊不知 听着黄加一的吐槽 陈舟的心中有一万头草泥马在奔过   难道比一本线的排名高了一千多名 分数居然只高了1分?   到现在他终于有点理解老师们常说的 1分都能压死千把人这个概念了   话说 这高考也太惨烈了点吧……   想到这 陈舟整个人都不好了 本来还挺高兴的查个分 可这才高兴到一半 就硬生生被人给滋醒了   瞥了一眼黄加一 陈舟心里有些幽怨: 我干嘛要听这个人报分数 我自己的都没听清 这么关心别人干啥?干啥呦?干……   猛然间 陈舟意识到了最后一点希望 也许排名听错了呢?   他把目光锁定在电话底座上的那个*号键 不带犹豫的便按了下去    滋滋滋……   没有听到报分数的声音 反而是一阵刺耳的电流声传入陈舟的耳朵   没忍住 他手一松 话筒啪地一声掉在了地上   仿佛被 风化 过一般 话筒摔得支离破碎 裸露出来的电话线正好挂在了陈舟的腿上   陈舟只觉得浑身一麻 控制不住的往身后倒去   那股 滋滋滋 的电流声已经从他的耳朵窜进了脑中   随后 满脑子 滋滋滋 的声音把他与外界完全隔绝了   也在那一瞬间 滋滋滋 的电流声突然消失了   安静了一瞬 陈舟听到了一个声音    宿主扫描成功 学霸系统加载中……    学霸系统?   就在陈舟还未反应过来时 那个声音继续说道: 检测到宿主脑域开发程度未达到加载要求 系统紧急脱离中……   陈舟: 哎?    为抹除系统存在痕迹 启动意识清除模式 正在清除不合格宿主意识……   陈舟: wtf???   完全无法反抗的 意识渐渐模糊了 第二章 这也未解锁 那也未解锁 探索个球哦   皖西市人民医院   急诊室内   陈舟正一脸安详的躺在病床上 被医生翻来覆去检查着 只是什么也没查出来   可看着陈舟那紧闭的双眼 以及一会上一会下的心电图 又很难相信这人是真的没毛病   对于外界的事情 陈舟是毫无知觉的 此刻他的 意识 正处在一片红彤彤的空间中   在他的面前有一块巨大的显示屏 整块显示屏上挂满了红色的感叹号   这些红色的感叹号一直在闪烁不停 而显示屏的正中央摆着五个红色的大字——紧急脱离中……   这一幕可把陈舟吓得不轻 想起意识陷入模糊之前的那个声音 他慌忙喊道: 卧槽 你来真的啊?老子招你惹你了 你还真要把老子的意识清除啊?   三步并作两步 陈舟快速走到显示屏前 一顿拳打脚踢 可显示屏不仅没碎 甚至一点表示都没有   感到自己的意识变得越来越恍惚 陈舟忙加大了手上的力道 心里慌乱起来   不知过了多久 已经浑身乏力 意识陷入浑噩的陈舟 缓缓瘫倒在显示屏前 只不过双手仍不甘心的握成拳头 轻轻的击打着显示屏 嘴里已经带着哭腔: 我跟你没仇啊 你干嘛这样害我……   不知道是自己的拳打脚踢起了作用 还是之前那个声音听到了陈舟的诉求 突兀的 这片空间中再次响起了先前的那道声音    接收隐藏指令    系统脱离失败   听到这个声音 陈舟的意识恢复了些许   过了好一会 他才反应过来 既然系统脱离失败了 那自己是不会被清除意识了?   抬起头 满屏的红色感叹号已经消失不见 取而代之的是纯净的透明显示屏   看着平静下来的显示屏 陈舟终于松了口气 转个身 一屁股坐在地上 心中仍是后怕不已   定了定神 陈舟开始四处张望 并绕着显示屏看起来 盘算着还是赶紧逃出去比较好    这显示屏跟块干净的水晶玻璃一样   绕了一圈 没发现什么奇异的地方 要不是先前出现过红色大字 陈舟真的会以为这就是块玻璃   话音未落 似是抗议陈舟的话 显示屏突兀的出现了一行很小的字   正常来说 若不仔细看 肯定注意不到   但这行字出现的位置 不偏不倚 就在陈舟眼前    学霸系统 文明发展的智慧结晶 从遥远而来    由于宿主脑域开发程度不足 系统本该脱离宿主 并清除宿主意识 以隐瞒存在 鉴于宿主自身的多重因素 系统脱离失败 现已成功绑定宿主    另:系统功能请宿主自行探索   显示屏上的这段文字在陈舟看完后 以极快的速度隐去了   陈舟怔了怔 还是没太搞明白这到底是怎么回事 系统屈服了?   脑中不断回想着显示屏上的那句话 陈舟又绕着显示屏认认真真查看了一圈 顺带还跑远点看了看 可这块显示屏除了还是那么透明外 他什么都没发现   跑到显示屏面前 陈舟抬起手 既然文的不行 那应该是要来点武的 刚才好像就是这么起作用的   左一拳头 右一脚底板 没事拿头撞撞 再把脸贴上去仔细瞧瞧   可……还是什么都没有呀?   有些累了的陈舟默默坐在显示屏前 苦着脸道: 这什么都没有 探索个球哦?   陈舟话音刚落 纯净的显示屏又似是回答一般 很突兀的冒出来一行文字   没来得及仔细看 陈舟感觉到好像有人在晃自己的身体   猛一激灵 他再睁开双眼时 只觉得灯光有些刺眼    主任 主任 快看 他醒了    你是怎么做到的?    我 我摇他的   陈舟: 我……?   ……   急诊室的灯灭了   随后 躺在病床上的陈舟 被护士推了出来   看到脸色苍白的陈舟 黄加一赶忙小跑过去 关心道: 陈舟 你怎么样?    我没事 简单回答了一句 陈舟直至此刻还没有完全回过神来   这是怎么回事?难道刚才的一切都是假的?   见陈舟一副恍惚的模样 黄加一还想问些什么 却被护士制止道: 病人现在需要休息 有什么话等病人好点再问   说罢 就把陈舟朝病房推去   跟着护士的脚步 黄加一就准备往病房而去 被扯了一下 才注意到小超市老板一副欲言又止的样子   黄加一想了想 这人已经把医药费都付了 也不能硬拖着他   在留了小超市老板的电话后 便让他先回去了   走进病房的时候 黄加一看到陈舟双眼无神的望着天花板 以至于连自己进来 他都一点反应没有   顺着陈舟的目光 黄加一实在瞧不出来什么 才出声道: 咋了?被电傻了?    没 陈舟想了想 慢吞吞说道: 你觉得那些科幻大片 玄幻小说都是真的假的?    啥?科幻大片真的假的? 黄加一被陈舟问的一愣    没 没什么 转头看着黄加一 陈舟也有点尴尬 那鸟系统严重影响人智商   顿了顿 他迟疑着说道: 那个 大黄 你有钱吗?你明天能不能拿点钱 接我出院?算我借你的   看了眼陈舟 黄加一说道: 小超市老板已经付了医药费 你不是被电话线搭腿上才这样的吗 老板也就一直跟着 来医院路上 你一直抽搐着 可把人吓坏了   听到黄加一的话 陈舟满头黑线 毕竟谁也想不到打电话查个分 还能搞成这样   那鸟系统先不说真假 可这被电话线电抽搐了 说出去估计都没人信   陈舟无奈道: 这事怪不了人老板 你听过电话线触电吗?    ……   黄加一心里想着你不就是吗?还被电的一直抽搐呢 可看着陈舟依旧苍白的脸 忍住了打趣的话 转口道: 那你好好休息 明天我带点钱过来    大黄    啊?    谢谢   看了陈舟一眼 黄加一摆摆手: 知道了   黄加一走后 陈舟想了想 开始闭上眼呼喊系统    鸟系统?    不是 学霸系统 你在哪啊?怎么找你呀?    系统爸爸?   喊了三分钟 陈舟没有得到一点回应 就在他以为是自己错觉 或者被电才能见到系统 准备在房间找电线试一下时 眼前突然发生了变化   他又站在那块纯净透明的显示屏前 或者说他的意识再次进入了那片空间   而在他苏醒前 显示屏上出现的文字 还在    姓名:陈舟    评级:伪混子 真·学渣    语言学:未解锁    自然科学:未解锁    应用科学:未解锁    可选任务:未解锁    ……   陈舟尴尬的看着眼前的屏幕 心里没忍住骂道 说我伪混子就算了 可你这也未解锁 那也未解锁的 你让劳资探索个球哦?   屏幕上划过一道白光 似是对陈舟做出的回应 一段新的文字浮现    鉴于宿主各方面能力均未达到系统激活的最低标准 故系统语言学定量标准未解锁……    总的来说 系统各项功能均未解锁   陈舟顿时无语 这系统有毛病?   可当他继续看下去 又变得疑惑且懵逼   显示屏上用粗体显示着:    现给出以下解决方案(唯一性 必选)    宿主需重新参加当前华国的高考 以达到必要性的择优录取 第三章 相对公平的机会 你该怎么把握?   陈舟又重新看了一遍显示屏上的文字 达到必要性的择优录取?    这啥意思?让我复读?想多了吧?    我可是好不容易才考到一本线 况且书都卖完了……   陈舟的内心有些难以接受 刚高考完 你立马让我再来一年?   沉默了一会 陈舟想要问个为什么 只见显示屏上又刷新出一行行新的文字    注:高考是宿主目前唯一可以获得的相对公平的竞争机会 被一流学府的录取 将从很大程度决定宿主以后各方面的资源 不要被眼前的小小成绩迷惑了双眼 你还有很大潜力    再注:少壮不努力 老大徒伤悲 即使宿主的脑域开发程度很一般 只要宿主肯自我改变 努力将会是挖掘潜力的钥匙 在这一片学渣的世界 所谓的择优录取 除了宿主 还能有谁?所以 加油努力吧 少年    再再注:即使系统尚未激活 任务完成后 仍有系统额外奖励 同时 完成任务后 宿主将激活本系统   听这意思 必选题等于送分题 考个好大学 就送外挂系统?   这……怎么说呢 陈舟有些心动了 而且它的话很有道理 而且小命好像也在它手里   可这鸟系统把自己判定为伪混子真学渣就算了 什么叫一片学渣的世界?   那些保送水木燕大 那些考这么多分 只因为满分是这么多的人 那能叫学渣?那还不够优秀?    请宿主尽快点击接受任务   一个不断闪烁的 接受 按钮浮现在显示屏上 等待他去按一下   陈舟看着显示屏上不断闪烁的按钮 发现一个问题 怎么只有 接受 没有 不接受 ?   在他疑惑间 按钮下方出现一行文字    请宿主尽快点击接受任务 此为必选题 不可拒绝   看着霸王条款下唯一的选项 陈舟思虑再三 最终还是伸出手 按在了 接受 上 按钮的触感倒挺真实   按下去的那一瞬间 显示屏发生了变化   一行行信息飞速浮现    系统激活前置任务已启动:基础的旋律(一)    姓名:陈舟    前置评级:理科生 伪混子 不合格学渣    语文 数学 理综前置评级:普通    英语前置评级:极其普通    任务描述:选择复读学校 潜心备考 年度摸底考试取得各科前置评级良好    目标:语文120(良好) 数学120(良好) 英语120(良好) 理综210(良好)    注意:此目标为唯一判定标准 完成任务机会只有一次    说明:任务完成后 自动开启下一阶段任务 任务奖励将在系统激活前置任务完成后 统一给予宿主   陈舟对这个大的前置评级不置可否 对各科的前置评级倒还是挺认可的   可目标里英语也要求达到良好 就让他有些蛋疼了 没办法 这科一直是硬伤   看着最后的注意内容 陈舟开口问道: 系统 机会只有一次 假如我没完成呢?    如果宿主连前置阶段一的任务都无法完成 那就说明宿主的的确确连学渣都不如 系统将不会在宿主身上继续浪费时间 系统将清除不合格宿主意识 寻找合格宿主   显示屏上的文字 让陈舟有一瞬间的心慌   看吧 果然小命不在自己手里   清除意识 意味着死亡 他已经体验过那种感觉 无论如何也不想再来一次了   顿了顿 陈舟想到一件事 他下意识的清了清嗓子 道: 系统 那你打算怎么帮我完成这任务?    前置任务只能依靠宿主自己    我是宿主 你是系统 你不帮我?    前置任务只能依靠宿主自己    一点友情赞助都没有?    前置任务只能依靠宿主自己   我去 这跟系统带我飞的节奏完全不一样啊?   陈舟瞧着连刷三条的依靠自己 支支吾吾道: 我后悔了 我能不选吗?你别清除我意识 你自动离去 能行么?    警告 此为必选题 宿主后悔选择 意味着任务失败    坑爹啊   第二天一早 黄加一带着早餐来接陈舟出院   看到依旧苍白的脸上顶着两个大大的熊猫眼 黄加一把早餐递过去道: 你昨晚溜出去通宵上网了?   陈舟没有接话 拿过早餐就吃了起来 他不知道怎么回黄加一的话   总不能说夜里睡不着 进进出出的在系统空间逛街 一睡着就梦到红色的大感叹号 感觉自己要挂了吧?   吃完早餐 办理了出院手续 陈舟和黄加一又去把医药费还给小超市老板   虽然小超市老板说人没事就好 钱没多少 不用给了   可陈舟还是把钱还了   办完这些 与黄加一道了别 陈舟坐大巴车回到皖西市下的一个小县城   他花了一夜时间 敲定了复读的学校 也终于鼓起了一些勇气    爸妈 我回来了   推开家门的一瞬间 陈舟就看到了一桌丰盛的饭菜   老爸陈建国坐在桌边 正在往杯子里倒酒   老妈张红英手里端着菜 正走出厨房   小弟陈晓在摆碗筷    小舟回来了 快去洗手 准备吃饭 张红英笑着对走进来的陈舟说道    今天来人了? 陈舟疑惑道    来什么人啊 张红英一边放下菜 一边笑着说道: 昨天加一打电话说你们都考上了一本 庆祝时你喝多了 今天才能回来 你爸听了就一大早去买的菜 也要给你庆祝一下 这不 还要跟你喝两杯呢    哥 你看老爸对你多好 陈晓也笑着接话道    陈晓 过几年 你要跟你哥一样考个一本 我一大早也去给你买一桌子菜 陈建国笑呵呵的说道    行行 我一定努力 陈晓做了个鬼脸 忙打哈哈   看了看父亲 陈舟有些惭愧 默默去洗了把手   饭桌上 话题就是今年的高考了 陈舟考了个一本 也算是把老陈家当前的头等大事落了地   一顿饭吃的很开心 特别是陈建国 因为身体不好 一直戒烟戒酒的他 今天破例喝了好几杯   饭后 陈建国还跑到阳台上抽了根烟 一家人看到了也只是笑笑 并没有阻止   趁着母亲和弟弟收拾桌子的时机 陈舟走到阳台上父亲身旁 低声道: 爸 我有件事想和你说   疑惑的看着陈舟 陈建国道: 小舟 怎么了?    爸 我…… 陈舟深吸一口气 努力平复着自己的语气 提出了这个可能并不合理的要求 我想复读    复读? 掐灭手里的烟头 陈建国满脸诧异转头看向陈舟   陈舟点了点头 说道: 嗯 我想复读一年 考个好点的大学   听到儿子的话 陈建国沉默了一会 缓缓开口道: 小舟 你真的想清楚了吗?按照你的成绩 你能考上一本 已经是很不错的结果了 复读的话 压力会更大的   似乎是怕自己没有说清楚 陈建国继续说道: 当然 只要你想清楚了 你的决定 爸妈都会支持你    爸 我想清楚了 我想把握住这相对公平的机会 再努力一次 迎上父亲的目光 陈舟的眼中满是坚毅 第四章 坚持就有收获   陈舟本以为父亲考虑到家庭条件 考虑到弟弟 考虑到父亲自己的身体 这些那些的原因 会慎重再慎重的考虑复读这个问题 甚至说服自己不要复读   毕竟 客观来说 能考上一本已经皆大欢喜了   可没想到 父亲在听到自己的回答后 没犹豫 立马答应了   甚至母亲那边 都是父亲去做的思想工作   随后几天 老陈家仿佛就没有庆祝过陈舟考上一本这回事 又回归到了一年前陈舟备战高考的状态   这一操作不仅把街坊邻居惊呆了 也把陈舟的叔伯阿姨这些长辈们搞懵了   前一天你老陈还打电话夸着说你儿子考上了一本 要请大家一起吃个谢师宴 第二天就没消息了 再一问 小舟准备复读了?   且不管外界的亲朋好友如何看待自己复读的这件事 陈舟已经按着自己的计划开始了   已经卖掉的书本和复读资料 又去旧书店淘了回来 还顺带买了本全新的五年高考三年模拟—英语   在陈舟的分析看来 系统给他定的小目标里 从没上过100分的英语 太棘手了   要想完成系统定下的小目标 陈舟必须改变自己一直以来学习英语的态度   以前只知道拿着英语书背单词 结果就是前天背过的单词不超过一个星期准忘了 再次见面时 谁也不认识谁   想了想 陈舟还是决定从记单词开始   只不过 陈舟给自己定下了两天100单词 一周300单词 星期天全面复习的可持续学习计划   不求快 不求多 只求自己过两天还能认得谁是谁   至于其他学科 陈舟开始了刷题模式   题海战术不一定最有效 但一定是有用的   抱着这种信念 陈舟开始了单词与试卷的轮回模式    叮 恭喜宿主第1天完成自己的学习计划 良好的开端是成功的一半 加油少年   陈舟刚合上书本 脑海中响起了系统的声音    说得对 成功离我又近了一步 陈舟微微一笑 喝了这碗鸡汤   带着一丝小自得 陈舟上床睡觉    叮 恭喜宿主第10天完成自己的学习计划 良好习惯的养成在于自我坚持 10天的坚持已经是习惯养成的起点 加油少年    咦 10天了? 陈舟看了一眼写满单词的草稿纸 脑海中在回想与计算 嗯 350个单词 确实记住了    叮 恭喜宿主第30天完成自己的学习计划 良好的自主学习习惯会终身受益 30天的积累 宿主已经迈出了自己的一小步 不要被自己的懒惰再拖回起点 加油少年    你也太准时了 比我妈喊我吃饭都准时   陈舟忍不住吐槽这鸟系统 不知道跟谁学的 鸡汤语音每天一次 从未间断   他都要喝吐了   草稿纸已经写满了好多张 试卷也已经写了好多张 自己看啥都像ABC    果然系统说的没错 懒惰想把我拖回起点 陈舟躺在床上 梦呓一般的喃喃道 那就把我拖回去吧 我想要游戏 想要……   大概是出于自己的责任 喜欢三天打鱼两天晒网的陈舟 这次罕见地保持了一个多月   看着一个多月时间堆起来的试卷 写满单词的草稿纸 陈舟自己都不敢相信 自己竟然真的按照学习计划坚持了这么多天   这还是第一次自觉的主动的去学习这么长时间   当这么多见证物摆在眼前的时候 他的心底里冒出来一丝真真切切的开心   默默等了一会 预想中的声音在脑海中响起    叮 恭喜宿主第50天完成自己的学习计划 持之以恒的自律虽然艰苦 但收获之日的喜悦将百倍奉还 加油少年   又是这熟悉的鸡汤语音 这可恶的加油少年   陈舟撇了撇嘴: 苦逼倒是感觉到了 可喜悦在哪里?   他感觉这是系统故意的提醒 每天的加油少年就像是变白痴的倒计时   毕竟任务如果没有完成 被清除意识的他 大概不死也会变白痴   轻声叹了口气 想着黄加一这货即将开始大学生的开心生活 他越发觉得自己真的好苦逼    自由的网速 娇柔的妹子 可爱的老师 我来了   陈舟记得这是黄加一得知他要复读后说的话 这本来也是他将要拥有的生活 可现在 羡慕 嫉妒    唉…… 重重的又叹了口气 陈舟从书桌前站起来 把书本草稿收拾好 再把行李清点一遍   明天要去复读班报到了    叮   意料之外的系统声音再次响起    难道今天庆祝坚持五十天 还要我喝两遍鸡汤?   这样想着的陈舟 脑海中系统的声音给出了答案    系统提醒:宿主明日开始将到复读学校学习 这段时间的学习计划已经不适合宿主后一阶段的学习 请宿主尽快根据学校作息制定新的学习计划 并坚持下去   陈舟刚想吐槽一句 系统的声音却未停下    叮 恭喜宿主完成前置隐藏任务 学习就是持之以恒的事(唯一性)    任务说明:在没有老师督促 家长监督的情况下 按照自己的学习计划有条不紊的进行学习 养成自主学习的习惯 且有所收获    完成情况:宿主生平第一次坚持50天的自主学习 -------------------------------------------------------------------------------- /model_epoch.pth: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/2833844911/paixu/b81c3b65c5ebeadbbddc4e578a1dc79b3dfb04e6/model_epoch.pth -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | import torch 4 | from torch import nn 5 | from torch.utils.data import Dataset, DataLoader 6 | import os 7 | import re 8 | import json 9 | if torch.cuda.is_available(): 10 | x = "cuda" 11 | else: 12 | x = "cpu" 13 | 14 | device = torch.device(x) 15 | dt = json.load(open('./ci.json', encoding='utf-8')) 16 | fdt = {} 17 | for k,v in dt.items(): 18 | fdt[str(v)] = k 19 | 20 | allkey = len(dt)+5 21 | 22 | 23 | hidden_size = 150 24 | 25 | class Model(nn.Module): 26 | def __init__(self): 27 | super(Model, self).__init__() 28 | self.eig = nn.Embedding(allkey, hidden_size) 29 | self.engru = nn.GRU(hidden_size, 256,batch_first=True, num_layers=2,bidirectional=True, dropout=0.5) 30 | 31 | self.Linetowz = nn.Linear(2*256, allkey) 32 | self.oooooooooo = nn.Linear(150, 512) 33 | self.sf = nn.Softmax(dim=1) 34 | 35 | self.conv1d = nn.Conv1d(in_channels=4, out_channels=2, kernel_size=1, stride=1) 36 | 37 | self.degru = nn.GRU(hidden_size, 256,batch_first=True, num_layers=2, dropout=0.5) 38 | 39 | self.linQ = nn.Linear(256*2, 150) 40 | self.linK = nn.Linear(512, 150) 41 | self.linV = nn.Linear(512, 150) 42 | 43 | 44 | def forward(self,x): 45 | dt = self.eig(x) 46 | jjj, endt = self.engru(dt) 47 | endt = endt.permute(1, 0, 2) 48 | endte2 =self.conv1d( endt).permute(1, 0, 2) 49 | endte2 = endte2.contiguous() 50 | itinfo = torch.zeros(x.shape[0], 1, hidden_size).to(device) 51 | output = torch.zeros(x.shape[0], 1, allkey).to(device) 52 | output2 = torch.zeros(x.shape[0], 1).to(device) 53 | x_modified = x.clone() 54 | 55 | 56 | for idx in range(x.shape[1]): 57 | koooo = self.oooooooooo(itinfo) 58 | kkkkk = self.linK(koooo) 59 | vvvvv = self.linV(koooo) 60 | 61 | ttttt = self.linQ(koooo) 62 | # ttttt = self.linQ(endte2.permute(1, 0, 2).reshape(x.shape[0], 1, -1)) 63 | ttttt = ttttt.expand(-1,kkkkk.shape[1],-1) 64 | # ll = ttttt.permute(0, 2, 1) 65 | gx = torch.bmm(ttttt, torch.transpose(kkkkk, 1,2)) 66 | gx = self.sf(gx) 67 | data = torch.bmm(gx, vvvvv ) 68 | 69 | cee, endte2 = self.degru(data, endte2) 70 | 71 | # cee,endte2 = self.degru(itinfo, endte2) 72 | endt2 = endte2.permute(1, 0, 2) 73 | endt2 = endt2.reshape(endt2.shape[0],-1) 74 | scinfo = self.Linetowz(endt2) 75 | # scinfo = endt2 76 | selected_values = torch.zeros(x.shape[0], x.shape[1]).to(device) 77 | for i in range(x.shape[0]): 78 | wz = x_modified[i]==-1 79 | x_modified[i][wz] = 0 80 | selected_values[i] = scinfo[i, x_modified[i]] 81 | x_modified[i][wz] = -1 82 | selected_values[i][wz] = float('-inf') 83 | max_indices = torch.max(selected_values, dim=1).indices.reshape(x.shape[0], 1) 84 | scinfo = scinfo.reshape(x.shape[0], 1, allkey) 85 | output = torch.concat([output, scinfo], dim=1) 86 | 87 | selected_values2 = torch.zeros(x.shape[0], 1, dtype=torch.int).to(device) 88 | for i in range(x.shape[0]): 89 | selected_values2[i,0] = x[i, max_indices[i,0]] 90 | x_modified[i, max_indices[i, 0]] = -1 91 | output2 = torch.concat([output2, selected_values2],dim=1) 92 | 93 | emdt = self.eig(selected_values2) 94 | itinfo = torch.concat([itinfo, emdt],dim=1) 95 | 96 | return output2[:, 1:] 97 | 98 | dymodel = Model() 99 | dymodel.load_state_dict(torch.load("./model_epoch.pth",map_location=device)) 100 | dymodel.to(device) 101 | dymodel.eval() 102 | def getinfo(text): 103 | me = 20 104 | aldtoo = [0]*(me - len(text)) 105 | 106 | aldt = [1] 107 | for i in list(text): 108 | aldt.append(dt[i]) 109 | aldt += [2] 110 | aldt += aldtoo 111 | at = torch.tensor(aldt).to(device) 112 | at = at.reshape([1,-1]) 113 | ot = dymodel(at) 114 | ot = ot.tolist() 115 | jg = '' 116 | for i in ot[0]: 117 | if i <= 2: 118 | continue 119 | jg += fdt[str(int(i))] 120 | return jg 121 | 122 | 123 | 124 | 125 | 126 | 127 | if __name__ == '__main__': 128 | px = getinfo("们学校晃荡那我先去一圈") 129 | print(px) 130 | -------------------------------------------------------------------------------- /train.py: -------------------------------------------------------------------------------- 1 | import json 2 | import random 3 | 4 | from torch import nn 5 | from torch.utils.data import Dataset, DataLoader 6 | import os 7 | import re 8 | from tqdm import tqdm 9 | import torch 10 | 11 | if torch.cuda.is_available(): 12 | x = "cuda" 13 | else: 14 | x = "cpu" 15 | 16 | device = torch.device(x) 17 | 18 | allkey = 0 19 | torch.autograd.set_detect_anomaly(True) 20 | class classInfo(Dataset): 21 | def __init__(self, wz=4): 22 | global allkey, kooo2 23 | 24 | alltxt = os.listdir('./file') 25 | wb = '' 26 | if qidqyxx == 1: 27 | self.dt = json.load(open('./ci.json', encoding='utf-8')) 28 | else: 29 | self.dt = {'ks':3} 30 | for i in alltxt: 31 | with open('./file/' + i, encoding='utf-8') as f: 32 | wb += f.read() 33 | self.allcan = [] 34 | wb = re.sub(r'[^\u4e00-\u9fff]', wb, ' ').replace('。',' ').replace('、',' ').replace(';',' ').replace('.',' ').replace('-',' ').replace('\n',' ').replace('”',' ').replace(',',' ').replace('!',' ').replace('“',' ') 35 | with open('./a.txt', 'w',encoding='utf-8') as f: 36 | f.write(wb) 37 | 38 | for i in list(wb): 39 | if i in self.dt: 40 | continue 41 | else: 42 | self.dt[i] = self.dt['ks'] 43 | self.dt['ks'] += 1 44 | kb = tqdm(range(len(wb)-wz*2)) 45 | kb.set_description(desc="准备数据集中") 46 | for i in kb: 47 | for jj in range(wz): 48 | key = wb[i:i+jj] 49 | if len(key) >3 and self.contains_non_chinese(key[0]) == True: 50 | 51 | if self.contains_non_chinese(key[-1]) == True: 52 | if self.contains_non_chinese(key[1:-1]) == True: 53 | break 54 | 55 | elif jj == wz-1: 56 | if self.contains_non_chinese(key[1:-1]) == True: 57 | break 58 | else: 59 | continue 60 | k = [self.dt[r] for r in list(key[1:-1])] 61 | lp = k.copy() 62 | 63 | l = [0] * (wz - len(k)) 64 | random.shuffle(k) 65 | 66 | kooo = [1] + k 67 | kooo = kooo + [2] 68 | 69 | kooo2 = [1] + lp 70 | kooo2 = kooo2 + [2] 71 | kooo2 += l 72 | 73 | kooo = kooo + l 74 | if len(kooo) != 22: 75 | print('====>') 76 | self.allcan.append([kooo,kooo2]) 77 | 78 | 79 | allkey = len(self.dt) + 5 80 | json.dump(self.dt, open('./ci.json','w', encoding='utf-8'), ensure_ascii=False) 81 | 82 | self.allcan = self.allcan[::-1] 83 | self.allcan = self.allcan[batchsize:] 84 | self.length = len(self.allcan) 85 | 86 | def contains_non_chinese(self, text): 87 | return bool(re.search(r'[^\u4e00-\u9fff]', text)) 88 | 89 | def __getitem__(self, item): 90 | return torch.tensor(self.allcan[item][0]),torch.tensor(self.allcan[item][1]) 91 | def __len__(self): 92 | return self.length 93 | 94 | hidden_size = 150 95 | 96 | 97 | class Model(nn.Module): 98 | def __init__(self): 99 | super(Model, self).__init__() 100 | self.eig = nn.Embedding(allkey, hidden_size) 101 | self.engru = nn.GRU(hidden_size, 256,batch_first=True, num_layers=2,bidirectional=True, dropout=0.5) 102 | 103 | self.Linetowz = nn.Linear(2*256, allkey) 104 | self.oooooooooo = nn.Linear(150, 512) 105 | self.sf = nn.Softmax(dim=1) 106 | 107 | self.conv1d = nn.Conv1d(in_channels=4, out_channels=2, kernel_size=1, stride=1) 108 | 109 | self.degru = nn.GRU(hidden_size, 256,batch_first=True, num_layers=2, dropout=0.5) 110 | 111 | self.linQ = nn.Linear(512, 150) 112 | self.linK = nn.Linear(512, 150) 113 | self.linV = nn.Linear(512, 150) 114 | 115 | 116 | def forward(self,x,target): 117 | dt = self.eig(x) 118 | jjj,endt = self.engru(dt) 119 | endt = endt.permute(1, 0, 2) 120 | endte2 =self.conv1d( endt).permute(1, 0, 2) 121 | endte2 = endte2.contiguous() 122 | itinfo = torch.zeros(x.shape[0], 1, hidden_size).to(device) 123 | output = torch.zeros(x.shape[0], 1, allkey).to(device) 124 | x_modified = x.clone() 125 | 126 | for idx in range(x.shape[1]): 127 | 128 | koooo = self.oooooooooo(itinfo) 129 | kkkkk = self.linK(koooo) 130 | vvvvv = self.linV(koooo) 131 | 132 | 133 | ttttt = self.linQ(koooo) 134 | ttttt = ttttt.expand(-1,kkkkk.shape[1],-1) 135 | gx = torch.bmm(ttttt, torch.transpose(kkkkk, 1,2)) 136 | gx = self.sf(gx) 137 | data = torch.bmm(gx, vvvvv ) 138 | 139 | 140 | cee,endte2 = self.degru(data, endte2) 141 | endt2 = endte2.permute(1, 0, 2) 142 | endt2 = endt2.reshape(endt2.shape[0],-1) 143 | scinfo = self.Linetowz(endt2) 144 | selected_values = torch.zeros(x.shape[0], x.shape[1]).to(device) 145 | for i in range(x.shape[0]): 146 | wz = x_modified[i] == -1 147 | x_modified[i][wz] = 0 148 | selected_values[i] = scinfo[i, x_modified[i]] 149 | x_modified[i][wz] = -1 150 | selected_values[i][wz] = float('-inf') 151 | max_indices = torch.max(selected_values, dim=1).indices.reshape(x.shape[0], 1) 152 | scinfo = scinfo.reshape(x.shape[0], 1, allkey) 153 | output = torch.concat([output, scinfo], dim=1) 154 | 155 | selected_values2 = torch.zeros(x.shape[0], 1, dtype=torch.int).to(device) 156 | for i in range(x.shape[0]): 157 | selected_values2[i,0] = x[i, max_indices[i,0]] 158 | x_modified[i, max_indices[i, 0]] = -1 159 | if random.randint(0, 100) > 50: 160 | emdt = self.eig(selected_values2) 161 | else: 162 | emdt = self.eig(target[:, idx].reshape(x.shape[0], 1)) 163 | itinfo = torch.concat([itinfo, emdt],dim=1) 164 | 165 | return output[:, 1:] 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | if __name__ == '__main__': 174 | batchsize = 20 175 | qidqyxx = 0 #开启迁移学习 176 | 177 | dataLoad = classInfo(20) 178 | 179 | 180 | sjmode = Model() 181 | if qidqyxx == 1: 182 | sjmode.load_state_dict(torch.load("./model_epoch.pth")) 183 | 184 | 185 | sjmode.to(device) 186 | best_loss = float('inf') 187 | criterion = nn.CrossEntropyLoss(ignore_index=0) 188 | optimizer = torch.optim.Adam(sjmode.parameters(),lr=0.0005) 189 | for _ in range(100): 190 | dataAll = DataLoader(dataLoad, batch_size=batchsize, shuffle=True) 191 | sjmode.train() 192 | lossAll = 0 193 | cs = 0 194 | fh = tqdm(dataAll) 195 | for info,target in fh: 196 | info = info.to(device) 197 | target = target.to(device) 198 | optimizer.zero_grad() 199 | 200 | out = sjmode(info, target) 201 | oute = out.reshape(-1, out.shape[-1]) 202 | trg = target.reshape(-1) 203 | loss = criterion(oute,trg) 204 | loss.backward() 205 | optimizer.step() 206 | lossAll += loss.item() 207 | cs += 1 208 | fh.set_description(desc="epoch {} loss {}".format(_,lossAll/cs )) 209 | # 检查是否是最好的模型 210 | if lossAll / cs < best_loss: 211 | best_loss = lossAll / cs 212 | # 保存模型 213 | torch.save(sjmode.state_dict(), f'model_epoch.pth') 214 | 215 | print(f"\nModel saved: epoch {_}, loss {best_loss:.4f}") 216 | 217 | 218 | 219 | --------------------------------------------------------------------------------