CNN, RNN等模型实现文本分类

    科技2026-09-30  11

    布置了一个NLP的大作业,用神经网络模型对中文文本进行分类,使用THUCNews(百度网盘地址 提取码:tkvz)作为数据集。是个入门级别的作业,但是由于对pytorch以及python的语法不熟悉,导致写得很慢,下面大概总结一下学习过程。

    数据集

    文章分为十个类别,分别是体育,娱乐,家居,房产,教育,时尚,时政,游戏,科技,财经。训练集有五万条数据,测试集有一万条数据,验证集有五千条数据,数据长下面这个样子

    图一 数据集样本示例

    知识预备

    分词:我们认为词是一篇文章的最基本单元,词构成句子,句子构成篇,所以要对文章进行分类处理,首先要将文章分割成若干个词语,由词语再对文章类别进行判断。中文可以用jieba库对文本进行分词词向量:NLP的很重要的概念,单词是无法直接送入模型中进行训练的,必须要先要将它量化,用向量去表示一个词语,比如有3个单词,我们可以用[1, 0 0], [0, 1, 0], [0, 0 ,1]去表示每个词语,这种编码方式叫做独热(one-hot)编码。当然这种编码方式过于冗余了,如果词有几十万,就需要几十万长度的向量,耗费空间太大了。google 提出了word2vec模型,能够将词语用比较小的向量表示出来(几百维)。不清楚的同学可以自行百度word2vec词向量矩阵:由所有词向量所构成的矩阵,比如由1000个词,每个词向量为300维,那么矩阵的大小为[1000, 300]嵌入层(embedding layer):嵌入层实质上就是一个词向量矩阵,它包含着所有有可能出现的词语的词向量,这个词向量矩阵可以随机生成,也可以由自己使用word2vec训练得到,也可以使用别人训练好的词向量。需要注意的一点是,嵌入层的输入是词语的序号,也就是说每个词语对应着一个独一无二的序号,通过这个序号就可以在词向量矩阵当中选出对应的那一个词向量。

    pipeline

    网上很多教程都是上来就开始讲原理,讲原理的博客有很多,我在这里不详细的说明,而我在这里主要着重说明比较宏观的流程。知乎上有一篇写得很好的专栏中文文本分类的pytorch实现, 他的github地址, 大佬的代码写得很漂亮,自己的代码基本上是模仿他写的。OK,现在进入我们的正题。

    预处理

    网上的教程很多都是用的自带的数据集,可以直接从库中直接加载,不需要预处理。而自己进行预处理就麻烦很多,以图一的数据样本为例,这些都是文本信息,我们要将他们全部数字化

    #mermaid-svg-tF4QaKqN5PU8XkiZ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .label text{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .node rect,#mermaid-svg-tF4QaKqN5PU8XkiZ .node circle,#mermaid-svg-tF4QaKqN5PU8XkiZ .node ellipse,#mermaid-svg-tF4QaKqN5PU8XkiZ .node polygon,#mermaid-svg-tF4QaKqN5PU8XkiZ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-tF4QaKqN5PU8XkiZ .node .label{text-align:center;fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .node.clickable{cursor:pointer}#mermaid-svg-tF4QaKqN5PU8XkiZ .arrowheadPath{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-tF4QaKqN5PU8XkiZ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-tF4QaKqN5PU8XkiZ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-tF4QaKqN5PU8XkiZ .edgeLabel rect{opacity:0.9}#mermaid-svg-tF4QaKqN5PU8XkiZ .edgeLabel span{color:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-tF4QaKqN5PU8XkiZ .cluster text{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-tF4QaKqN5PU8XkiZ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-tF4QaKqN5PU8XkiZ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-tF4QaKqN5PU8XkiZ .actor-line{stroke:grey}#mermaid-svg-tF4QaKqN5PU8XkiZ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .sequenceNumber{fill:#fff}#mermaid-svg-tF4QaKqN5PU8XkiZ #sequencenumber{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .messageText{fill:#333;stroke:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-tF4QaKqN5PU8XkiZ .labelText,#mermaid-svg-tF4QaKqN5PU8XkiZ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-tF4QaKqN5PU8XkiZ .loopText,#mermaid-svg-tF4QaKqN5PU8XkiZ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-tF4QaKqN5PU8XkiZ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-tF4QaKqN5PU8XkiZ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-tF4QaKqN5PU8XkiZ .noteText,#mermaid-svg-tF4QaKqN5PU8XkiZ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-tF4QaKqN5PU8XkiZ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-tF4QaKqN5PU8XkiZ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-tF4QaKqN5PU8XkiZ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-tF4QaKqN5PU8XkiZ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .section{stroke:none;opacity:0.2}#mermaid-svg-tF4QaKqN5PU8XkiZ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-tF4QaKqN5PU8XkiZ .section2{fill:#fff400}#mermaid-svg-tF4QaKqN5PU8XkiZ .section1,#mermaid-svg-tF4QaKqN5PU8XkiZ .section3{fill:#fff;opacity:0.2}#mermaid-svg-tF4QaKqN5PU8XkiZ .sectionTitle0{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .sectionTitle1{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .sectionTitle2{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .sectionTitle3{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-tF4QaKqN5PU8XkiZ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .grid path{stroke-width:0}#mermaid-svg-tF4QaKqN5PU8XkiZ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-tF4QaKqN5PU8XkiZ .task{stroke-width:2}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskText:not([font-size]){font-size:11px}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-tF4QaKqN5PU8XkiZ .task.clickable{cursor:pointer}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskText0,#mermaid-svg-tF4QaKqN5PU8XkiZ .taskText1,#mermaid-svg-tF4QaKqN5PU8XkiZ .taskText2,#mermaid-svg-tF4QaKqN5PU8XkiZ .taskText3{fill:#fff}#mermaid-svg-tF4QaKqN5PU8XkiZ .task0,#mermaid-svg-tF4QaKqN5PU8XkiZ .task1,#mermaid-svg-tF4QaKqN5PU8XkiZ .task2,#mermaid-svg-tF4QaKqN5PU8XkiZ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutside0,#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutside2{fill:#000}#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutside1,#mermaid-svg-tF4QaKqN5PU8XkiZ .taskTextOutside3{fill:#000}#mermaid-svg-tF4QaKqN5PU8XkiZ .active0,#mermaid-svg-tF4QaKqN5PU8XkiZ .active1,#mermaid-svg-tF4QaKqN5PU8XkiZ .active2,#mermaid-svg-tF4QaKqN5PU8XkiZ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-tF4QaKqN5PU8XkiZ .activeText0,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeText1,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeText2,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeText3{fill:#000 !important}#mermaid-svg-tF4QaKqN5PU8XkiZ .done0,#mermaid-svg-tF4QaKqN5PU8XkiZ .done1,#mermaid-svg-tF4QaKqN5PU8XkiZ .done2,#mermaid-svg-tF4QaKqN5PU8XkiZ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-tF4QaKqN5PU8XkiZ .doneText0,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneText1,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneText2,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneText3{fill:#000 !important}#mermaid-svg-tF4QaKqN5PU8XkiZ .crit0,#mermaid-svg-tF4QaKqN5PU8XkiZ .crit1,#mermaid-svg-tF4QaKqN5PU8XkiZ .crit2,#mermaid-svg-tF4QaKqN5PU8XkiZ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCrit0,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCrit1,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCrit2,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCrit0,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCrit1,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCrit2,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-tF4QaKqN5PU8XkiZ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-tF4QaKqN5PU8XkiZ .milestoneText{font-style:italic}#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCritText0,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCritText1,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCritText2,#mermaid-svg-tF4QaKqN5PU8XkiZ .doneCritText3{fill:#000 !important}#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCritText0,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCritText1,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCritText2,#mermaid-svg-tF4QaKqN5PU8XkiZ .activeCritText3{fill:#000 !important}#mermaid-svg-tF4QaKqN5PU8XkiZ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-tF4QaKqN5PU8XkiZ g.classGroup text .title{font-weight:bolder}#mermaid-svg-tF4QaKqN5PU8XkiZ g.clickable{cursor:pointer}#mermaid-svg-tF4QaKqN5PU8XkiZ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-tF4QaKqN5PU8XkiZ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-tF4QaKqN5PU8XkiZ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-tF4QaKqN5PU8XkiZ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-tF4QaKqN5PU8XkiZ .dashed-line{stroke-dasharray:3}#mermaid-svg-tF4QaKqN5PU8XkiZ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ .commit-id,#mermaid-svg-tF4QaKqN5PU8XkiZ .commit-msg,#mermaid-svg-tF4QaKqN5PU8XkiZ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-tF4QaKqN5PU8XkiZ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-tF4QaKqN5PU8XkiZ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-tF4QaKqN5PU8XkiZ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-tF4QaKqN5PU8XkiZ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-tF4QaKqN5PU8XkiZ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-tF4QaKqN5PU8XkiZ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-tF4QaKqN5PU8XkiZ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-tF4QaKqN5PU8XkiZ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-tF4QaKqN5PU8XkiZ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-tF4QaKqN5PU8XkiZ .edgeLabel text{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-tF4QaKqN5PU8XkiZ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-tF4QaKqN5PU8XkiZ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-tF4QaKqN5PU8XkiZ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-tF4QaKqN5PU8XkiZ .note-edge{stroke-dasharray:5}#mermaid-svg-tF4QaKqN5PU8XkiZ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-tF4QaKqN5PU8XkiZ .error-icon{fill:#522}#mermaid-svg-tF4QaKqN5PU8XkiZ .error-text{fill:#522;stroke:#522}#mermaid-svg-tF4QaKqN5PU8XkiZ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-tF4QaKqN5PU8XkiZ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-tF4QaKqN5PU8XkiZ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-tF4QaKqN5PU8XkiZ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-tF4QaKqN5PU8XkiZ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-tF4QaKqN5PU8XkiZ .marker{fill:#333}#mermaid-svg-tF4QaKqN5PU8XkiZ .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-tF4QaKqN5PU8XkiZ { color: rgba(0, 0, 0, 0.75); font: ; } 分割类别与正文 类别数字化 正文分词 正文词语数字化 截断与填充 图二 预处理流程图 分割类别与正文:很简单用split函数就可以很好地分割出来, 记住读取的格式必须要为utf-8。 with open(path, 'r', enconding = 'utf-8' ) as f: for line in f.readlines() label, content = line.strip().split('\t') 类别数字化:定义一个类别的字典,就可以把类别映射为数字了正文分词:可以先过滤掉非中文字符,然后使用jieba进行分词 pattern = re.compile(r'[^\u4e00-\u9fa5]') #取出中文字符 content = re.sub(pattern, '', content) words = jieba.lcut(content) 正文词语数字化:我们首先需要定义一个包含所有词的字典,给每个词一个序号,这样就可以将词语映射为数字了。在这个任务当中,我使用的是预训练的词向量,所以词典要包含预训练中的词向量中的所有单词。 for word in words: res.append(word_to_id.get(word, 0)) 截断与填充:经过之前处理之后,我们得到了长度不一的文章词语数字序列,由于输入模型的数据需要具有相同长度所构成的tensor,首先我们自定义一个pad_size,在该任务中,我取的是300,对于大于pad_size的数字序列进行截断,对于小于pad_size的数字序列进行填充,填充的值可以自己指定,这里我用0进行填充 if(len(data[i]) > pad_size): #单词量比所给长度大,截断 data[i] = data[i][:pad_size] else: data[i].extend([0] *(pad_size - len(data[i]))) #单词量比所给的小,填充0

    输入模型

    经过预处理后,我们得到一个矩阵,矩阵的列数是pad_size,即文章的词数,矩阵的行数是文章的数目,这就是我们输入模型的结果。除embedding层外,后面的接的模型可以随意改动。下面约定一下变量的含义:

    batch_size: 一个batch里面含有的文章数pad_size:文章的词数embedding_size:词向量的维度conv_width:卷积核宽度conv_num:卷积核数目conv_type:卷积核种类num_class:类别数

    模型

    此部分基本复述上述提及的知乎专栏,自己写一遍加深理解

    CNN模型
    #mermaid-svg-r5ErQbJID2cEWJxY .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-r5ErQbJID2cEWJxY .label text{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .node rect,#mermaid-svg-r5ErQbJID2cEWJxY .node circle,#mermaid-svg-r5ErQbJID2cEWJxY .node ellipse,#mermaid-svg-r5ErQbJID2cEWJxY .node polygon,#mermaid-svg-r5ErQbJID2cEWJxY .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-r5ErQbJID2cEWJxY .node .label{text-align:center;fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .node.clickable{cursor:pointer}#mermaid-svg-r5ErQbJID2cEWJxY .arrowheadPath{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-r5ErQbJID2cEWJxY .flowchart-link{stroke:#333;fill:none}#mermaid-svg-r5ErQbJID2cEWJxY .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-r5ErQbJID2cEWJxY .edgeLabel rect{opacity:0.9}#mermaid-svg-r5ErQbJID2cEWJxY .edgeLabel span{color:#333}#mermaid-svg-r5ErQbJID2cEWJxY .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-r5ErQbJID2cEWJxY .cluster text{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-r5ErQbJID2cEWJxY .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-r5ErQbJID2cEWJxY text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-r5ErQbJID2cEWJxY .actor-line{stroke:grey}#mermaid-svg-r5ErQbJID2cEWJxY .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-r5ErQbJID2cEWJxY .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-r5ErQbJID2cEWJxY #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-r5ErQbJID2cEWJxY .sequenceNumber{fill:#fff}#mermaid-svg-r5ErQbJID2cEWJxY #sequencenumber{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY #crosshead path{fill:#333;stroke:#333}#mermaid-svg-r5ErQbJID2cEWJxY .messageText{fill:#333;stroke:#333}#mermaid-svg-r5ErQbJID2cEWJxY .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-r5ErQbJID2cEWJxY .labelText,#mermaid-svg-r5ErQbJID2cEWJxY .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-r5ErQbJID2cEWJxY .loopText,#mermaid-svg-r5ErQbJID2cEWJxY .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-r5ErQbJID2cEWJxY .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-r5ErQbJID2cEWJxY .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-r5ErQbJID2cEWJxY .noteText,#mermaid-svg-r5ErQbJID2cEWJxY .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-r5ErQbJID2cEWJxY .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-r5ErQbJID2cEWJxY .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-r5ErQbJID2cEWJxY .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-r5ErQbJID2cEWJxY .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .section{stroke:none;opacity:0.2}#mermaid-svg-r5ErQbJID2cEWJxY .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-r5ErQbJID2cEWJxY .section2{fill:#fff400}#mermaid-svg-r5ErQbJID2cEWJxY .section1,#mermaid-svg-r5ErQbJID2cEWJxY .section3{fill:#fff;opacity:0.2}#mermaid-svg-r5ErQbJID2cEWJxY .sectionTitle0{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .sectionTitle1{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .sectionTitle2{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .sectionTitle3{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-r5ErQbJID2cEWJxY .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .grid path{stroke-width:0}#mermaid-svg-r5ErQbJID2cEWJxY .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-r5ErQbJID2cEWJxY .task{stroke-width:2}#mermaid-svg-r5ErQbJID2cEWJxY .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .taskText:not([font-size]){font-size:11px}#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-r5ErQbJID2cEWJxY .task.clickable{cursor:pointer}#mermaid-svg-r5ErQbJID2cEWJxY .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-r5ErQbJID2cEWJxY .taskText0,#mermaid-svg-r5ErQbJID2cEWJxY .taskText1,#mermaid-svg-r5ErQbJID2cEWJxY .taskText2,#mermaid-svg-r5ErQbJID2cEWJxY .taskText3{fill:#fff}#mermaid-svg-r5ErQbJID2cEWJxY .task0,#mermaid-svg-r5ErQbJID2cEWJxY .task1,#mermaid-svg-r5ErQbJID2cEWJxY .task2,#mermaid-svg-r5ErQbJID2cEWJxY .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutside0,#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutside2{fill:#000}#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutside1,#mermaid-svg-r5ErQbJID2cEWJxY .taskTextOutside3{fill:#000}#mermaid-svg-r5ErQbJID2cEWJxY .active0,#mermaid-svg-r5ErQbJID2cEWJxY .active1,#mermaid-svg-r5ErQbJID2cEWJxY .active2,#mermaid-svg-r5ErQbJID2cEWJxY .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-r5ErQbJID2cEWJxY .activeText0,#mermaid-svg-r5ErQbJID2cEWJxY .activeText1,#mermaid-svg-r5ErQbJID2cEWJxY .activeText2,#mermaid-svg-r5ErQbJID2cEWJxY .activeText3{fill:#000 !important}#mermaid-svg-r5ErQbJID2cEWJxY .done0,#mermaid-svg-r5ErQbJID2cEWJxY .done1,#mermaid-svg-r5ErQbJID2cEWJxY .done2,#mermaid-svg-r5ErQbJID2cEWJxY .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-r5ErQbJID2cEWJxY .doneText0,#mermaid-svg-r5ErQbJID2cEWJxY .doneText1,#mermaid-svg-r5ErQbJID2cEWJxY .doneText2,#mermaid-svg-r5ErQbJID2cEWJxY .doneText3{fill:#000 !important}#mermaid-svg-r5ErQbJID2cEWJxY .crit0,#mermaid-svg-r5ErQbJID2cEWJxY .crit1,#mermaid-svg-r5ErQbJID2cEWJxY .crit2,#mermaid-svg-r5ErQbJID2cEWJxY .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-r5ErQbJID2cEWJxY .activeCrit0,#mermaid-svg-r5ErQbJID2cEWJxY .activeCrit1,#mermaid-svg-r5ErQbJID2cEWJxY .activeCrit2,#mermaid-svg-r5ErQbJID2cEWJxY .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-r5ErQbJID2cEWJxY .doneCrit0,#mermaid-svg-r5ErQbJID2cEWJxY .doneCrit1,#mermaid-svg-r5ErQbJID2cEWJxY .doneCrit2,#mermaid-svg-r5ErQbJID2cEWJxY .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-r5ErQbJID2cEWJxY .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-r5ErQbJID2cEWJxY .milestoneText{font-style:italic}#mermaid-svg-r5ErQbJID2cEWJxY .doneCritText0,#mermaid-svg-r5ErQbJID2cEWJxY .doneCritText1,#mermaid-svg-r5ErQbJID2cEWJxY .doneCritText2,#mermaid-svg-r5ErQbJID2cEWJxY .doneCritText3{fill:#000 !important}#mermaid-svg-r5ErQbJID2cEWJxY .activeCritText0,#mermaid-svg-r5ErQbJID2cEWJxY .activeCritText1,#mermaid-svg-r5ErQbJID2cEWJxY .activeCritText2,#mermaid-svg-r5ErQbJID2cEWJxY .activeCritText3{fill:#000 !important}#mermaid-svg-r5ErQbJID2cEWJxY .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-r5ErQbJID2cEWJxY g.classGroup text .title{font-weight:bolder}#mermaid-svg-r5ErQbJID2cEWJxY g.clickable{cursor:pointer}#mermaid-svg-r5ErQbJID2cEWJxY g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-r5ErQbJID2cEWJxY g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-r5ErQbJID2cEWJxY .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-r5ErQbJID2cEWJxY .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-r5ErQbJID2cEWJxY .dashed-line{stroke-dasharray:3}#mermaid-svg-r5ErQbJID2cEWJxY #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY .commit-id,#mermaid-svg-r5ErQbJID2cEWJxY .commit-msg,#mermaid-svg-r5ErQbJID2cEWJxY .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-r5ErQbJID2cEWJxY g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-r5ErQbJID2cEWJxY g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-r5ErQbJID2cEWJxY g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-r5ErQbJID2cEWJxY .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-r5ErQbJID2cEWJxY .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-r5ErQbJID2cEWJxY .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-r5ErQbJID2cEWJxY .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-r5ErQbJID2cEWJxY .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-r5ErQbJID2cEWJxY .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-r5ErQbJID2cEWJxY .edgeLabel text{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-r5ErQbJID2cEWJxY .node circle.state-start{fill:black;stroke:black}#mermaid-svg-r5ErQbJID2cEWJxY .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-r5ErQbJID2cEWJxY #statediagram-barbEnd{fill:#9370db}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-state .divider{stroke:#9370db}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-r5ErQbJID2cEWJxY .note-edge{stroke-dasharray:5}#mermaid-svg-r5ErQbJID2cEWJxY .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-r5ErQbJID2cEWJxY .error-icon{fill:#522}#mermaid-svg-r5ErQbJID2cEWJxY .error-text{fill:#522;stroke:#522}#mermaid-svg-r5ErQbJID2cEWJxY .edge-thickness-normal{stroke-width:2px}#mermaid-svg-r5ErQbJID2cEWJxY .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-r5ErQbJID2cEWJxY .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-r5ErQbJID2cEWJxY .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-r5ErQbJID2cEWJxY .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-r5ErQbJID2cEWJxY .marker{fill:#333}#mermaid-svg-r5ErQbJID2cEWJxY .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-r5ErQbJID2cEWJxY { color: rgba(0, 0, 0, 0.75); font: ; } 输入层 embedding层 卷积层 池化层 全连接层 输出层 图二 CNN流程图 输入层:每次随机抽取batch_size数量的文章。tensor的size为 [batch_size, pad_size]embedding层:经过embedding之后,每个词序号对应一个词向量。tensor的size变为[batch_size, pad_size, embedding_size]卷积层:卷积核的size为[conv_num, conv_width, embedding_size], 卷积完后的输出为[batch_size, conv_num, pad_size - conv_width + , 1], 需要对第3维度(从0开始计数)进行squeeze,变成[batch_size, conv_num, pad_size - conv_width + 1]。在这个任务中,使用了conv_type种卷积核,会生成conv_type个上述的tensor池化层:使用max pooling,经过池化后,[batch_size, conv_num, pad_size - conv_width + 1]变为[batch_size, conv_num], 然后将多个卷积核得到的tensor在第1维上拼接起来,得到[batch_size, conv_num * conv_type]的tensor全连接层:输入为[batch_size, conv_num * conv_type],输出为[batch_size, hidden_size]输出层:输入为[batch_size, hidden_size], 输出为[batch_size, num_class]
    RNN模型
    #mermaid-svg-WG9uqg2XaXhlEpgA .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .label text{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .node rect,#mermaid-svg-WG9uqg2XaXhlEpgA .node circle,#mermaid-svg-WG9uqg2XaXhlEpgA .node ellipse,#mermaid-svg-WG9uqg2XaXhlEpgA .node polygon,#mermaid-svg-WG9uqg2XaXhlEpgA .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-WG9uqg2XaXhlEpgA .node .label{text-align:center;fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .node.clickable{cursor:pointer}#mermaid-svg-WG9uqg2XaXhlEpgA .arrowheadPath{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-WG9uqg2XaXhlEpgA .flowchart-link{stroke:#333;fill:none}#mermaid-svg-WG9uqg2XaXhlEpgA .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-WG9uqg2XaXhlEpgA .edgeLabel rect{opacity:0.9}#mermaid-svg-WG9uqg2XaXhlEpgA .edgeLabel span{color:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-WG9uqg2XaXhlEpgA .cluster text{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-WG9uqg2XaXhlEpgA .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-WG9uqg2XaXhlEpgA text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-WG9uqg2XaXhlEpgA .actor-line{stroke:grey}#mermaid-svg-WG9uqg2XaXhlEpgA .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-WG9uqg2XaXhlEpgA #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .sequenceNumber{fill:#fff}#mermaid-svg-WG9uqg2XaXhlEpgA #sequencenumber{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA #crosshead path{fill:#333;stroke:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .messageText{fill:#333;stroke:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-WG9uqg2XaXhlEpgA .labelText,#mermaid-svg-WG9uqg2XaXhlEpgA .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-WG9uqg2XaXhlEpgA .loopText,#mermaid-svg-WG9uqg2XaXhlEpgA .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-WG9uqg2XaXhlEpgA .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-WG9uqg2XaXhlEpgA .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-WG9uqg2XaXhlEpgA .noteText,#mermaid-svg-WG9uqg2XaXhlEpgA .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-WG9uqg2XaXhlEpgA .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-WG9uqg2XaXhlEpgA .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-WG9uqg2XaXhlEpgA .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-WG9uqg2XaXhlEpgA .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .section{stroke:none;opacity:0.2}#mermaid-svg-WG9uqg2XaXhlEpgA .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-WG9uqg2XaXhlEpgA .section2{fill:#fff400}#mermaid-svg-WG9uqg2XaXhlEpgA .section1,#mermaid-svg-WG9uqg2XaXhlEpgA .section3{fill:#fff;opacity:0.2}#mermaid-svg-WG9uqg2XaXhlEpgA .sectionTitle0{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .sectionTitle1{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .sectionTitle2{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .sectionTitle3{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-WG9uqg2XaXhlEpgA .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .grid path{stroke-width:0}#mermaid-svg-WG9uqg2XaXhlEpgA .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-WG9uqg2XaXhlEpgA .task{stroke-width:2}#mermaid-svg-WG9uqg2XaXhlEpgA .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .taskText:not([font-size]){font-size:11px}#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-WG9uqg2XaXhlEpgA .task.clickable{cursor:pointer}#mermaid-svg-WG9uqg2XaXhlEpgA .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-WG9uqg2XaXhlEpgA .taskText0,#mermaid-svg-WG9uqg2XaXhlEpgA .taskText1,#mermaid-svg-WG9uqg2XaXhlEpgA .taskText2,#mermaid-svg-WG9uqg2XaXhlEpgA .taskText3{fill:#fff}#mermaid-svg-WG9uqg2XaXhlEpgA .task0,#mermaid-svg-WG9uqg2XaXhlEpgA .task1,#mermaid-svg-WG9uqg2XaXhlEpgA .task2,#mermaid-svg-WG9uqg2XaXhlEpgA .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutside0,#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutside2{fill:#000}#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutside1,#mermaid-svg-WG9uqg2XaXhlEpgA .taskTextOutside3{fill:#000}#mermaid-svg-WG9uqg2XaXhlEpgA .active0,#mermaid-svg-WG9uqg2XaXhlEpgA .active1,#mermaid-svg-WG9uqg2XaXhlEpgA .active2,#mermaid-svg-WG9uqg2XaXhlEpgA .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-WG9uqg2XaXhlEpgA .activeText0,#mermaid-svg-WG9uqg2XaXhlEpgA .activeText1,#mermaid-svg-WG9uqg2XaXhlEpgA .activeText2,#mermaid-svg-WG9uqg2XaXhlEpgA .activeText3{fill:#000 !important}#mermaid-svg-WG9uqg2XaXhlEpgA .done0,#mermaid-svg-WG9uqg2XaXhlEpgA .done1,#mermaid-svg-WG9uqg2XaXhlEpgA .done2,#mermaid-svg-WG9uqg2XaXhlEpgA .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-WG9uqg2XaXhlEpgA .doneText0,#mermaid-svg-WG9uqg2XaXhlEpgA .doneText1,#mermaid-svg-WG9uqg2XaXhlEpgA .doneText2,#mermaid-svg-WG9uqg2XaXhlEpgA .doneText3{fill:#000 !important}#mermaid-svg-WG9uqg2XaXhlEpgA .crit0,#mermaid-svg-WG9uqg2XaXhlEpgA .crit1,#mermaid-svg-WG9uqg2XaXhlEpgA .crit2,#mermaid-svg-WG9uqg2XaXhlEpgA .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-WG9uqg2XaXhlEpgA .activeCrit0,#mermaid-svg-WG9uqg2XaXhlEpgA .activeCrit1,#mermaid-svg-WG9uqg2XaXhlEpgA .activeCrit2,#mermaid-svg-WG9uqg2XaXhlEpgA .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-WG9uqg2XaXhlEpgA .doneCrit0,#mermaid-svg-WG9uqg2XaXhlEpgA .doneCrit1,#mermaid-svg-WG9uqg2XaXhlEpgA .doneCrit2,#mermaid-svg-WG9uqg2XaXhlEpgA .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-WG9uqg2XaXhlEpgA .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-WG9uqg2XaXhlEpgA .milestoneText{font-style:italic}#mermaid-svg-WG9uqg2XaXhlEpgA .doneCritText0,#mermaid-svg-WG9uqg2XaXhlEpgA .doneCritText1,#mermaid-svg-WG9uqg2XaXhlEpgA .doneCritText2,#mermaid-svg-WG9uqg2XaXhlEpgA .doneCritText3{fill:#000 !important}#mermaid-svg-WG9uqg2XaXhlEpgA .activeCritText0,#mermaid-svg-WG9uqg2XaXhlEpgA .activeCritText1,#mermaid-svg-WG9uqg2XaXhlEpgA .activeCritText2,#mermaid-svg-WG9uqg2XaXhlEpgA .activeCritText3{fill:#000 !important}#mermaid-svg-WG9uqg2XaXhlEpgA .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-WG9uqg2XaXhlEpgA g.classGroup text .title{font-weight:bolder}#mermaid-svg-WG9uqg2XaXhlEpgA g.clickable{cursor:pointer}#mermaid-svg-WG9uqg2XaXhlEpgA g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-WG9uqg2XaXhlEpgA g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-WG9uqg2XaXhlEpgA .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-WG9uqg2XaXhlEpgA .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-WG9uqg2XaXhlEpgA .dashed-line{stroke-dasharray:3}#mermaid-svg-WG9uqg2XaXhlEpgA #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA .commit-id,#mermaid-svg-WG9uqg2XaXhlEpgA .commit-msg,#mermaid-svg-WG9uqg2XaXhlEpgA .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-WG9uqg2XaXhlEpgA g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-WG9uqg2XaXhlEpgA g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-WG9uqg2XaXhlEpgA g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-WG9uqg2XaXhlEpgA .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-WG9uqg2XaXhlEpgA .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-WG9uqg2XaXhlEpgA .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-WG9uqg2XaXhlEpgA .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-WG9uqg2XaXhlEpgA .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-WG9uqg2XaXhlEpgA .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-WG9uqg2XaXhlEpgA .edgeLabel text{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-WG9uqg2XaXhlEpgA .node circle.state-start{fill:black;stroke:black}#mermaid-svg-WG9uqg2XaXhlEpgA .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-WG9uqg2XaXhlEpgA #statediagram-barbEnd{fill:#9370db}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-state .divider{stroke:#9370db}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-WG9uqg2XaXhlEpgA .note-edge{stroke-dasharray:5}#mermaid-svg-WG9uqg2XaXhlEpgA .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-WG9uqg2XaXhlEpgA .error-icon{fill:#522}#mermaid-svg-WG9uqg2XaXhlEpgA .error-text{fill:#522;stroke:#522}#mermaid-svg-WG9uqg2XaXhlEpgA .edge-thickness-normal{stroke-width:2px}#mermaid-svg-WG9uqg2XaXhlEpgA .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-WG9uqg2XaXhlEpgA .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-WG9uqg2XaXhlEpgA .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-WG9uqg2XaXhlEpgA .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-WG9uqg2XaXhlEpgA .marker{fill:#333}#mermaid-svg-WG9uqg2XaXhlEpgA .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-WG9uqg2XaXhlEpgA { color: rgba(0, 0, 0, 0.75); font: ; } 输入层 embedding层 LSTM层 全连接层 输出层 图三 RNN流程图

    图四 LSTM的结构 输入层:每次随机抽取batch_size数量的文章。tensor的size为 [batch_size, pad_size]embedding层:经过embedding之后,每个词序号对应一个词向量。tensor的size变为[batch_size, pad_size, embedding_size]双向LSTM层:隐层大小为hidden_size,得到所有时刻的隐层状态(前向隐层和后向隐层拼接),尺寸为[batch_size, pad_size, hidden_size * 2], 取出最后一个状态的tensor,size变为[batch_size, hidden_size * 2]全连接层:输出为[batch_size, num_class]
    Processed: 0.008, SQL: 9