<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>4-自然语言处理 on 知予AI</title>
    <link>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/</link>
    <description>Recent content in 4-自然语言处理 on 知予AI</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 01 Jan 2017 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>自然语言处理概述</title>
      <link>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp1-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E6%A6%82%E8%BF%B0/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp1-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E6%A6%82%E8%BF%B0/</guid>
      <description>&lt;h3 id=&#34;自然语言与编程语言&#34;&gt;自然语言与编程语言&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;自然语言处理(natural language processing, NLP)&lt;/strong&gt; 是一门融合了计算机科学、人工智能以及语言学的交叉学科(interdisciplinary field)。这门学科研究的是如何通过机器学习等技术，让计算机学会处理人类语言，乃至实现最终目标：&lt;strong&gt;理解人类语言或人工智能&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;自然语言处理同义词：注重语言学结构的学者喜欢使用&lt;strong&gt;计算语言学(conputational linguistics)&lt;/strong&gt;，而强调最终目的的学者则更偏好&lt;strong&gt;自然语言理解(natural language understanding)&lt;/strong&gt; 这个术语。&lt;/p&gt;&#xA;&lt;p&gt;完全理解和表达语言是极其困难的，正确的语言表达也没有精确并完备的特性。&lt;/p&gt;&#xA;&lt;p&gt;虽然自然语言和编程语言都称为“语言”，但二者有极大差异。自然语言和编程语言之间的不同：&lt;/p&gt;&#xA;&lt;p&gt;(1) &lt;strong&gt;词汇量&lt;/strong&gt;：编程语言的关键词数量有限且确定，而自然语言的词汇量是无尽的、可创造的。&lt;/p&gt;&#xA;&lt;p&gt;(2) &lt;strong&gt;结构化&lt;/strong&gt;：自然语言是非结构化的，而编程语言是结构化的。&lt;/p&gt;&#xA;&lt;p&gt;(3) &lt;strong&gt;歧义性&lt;/strong&gt;：自然语言含有大量歧义，这些歧义根据语境的不同而表现为特定的义项。语言中的歧义问题是自然语言难以处理的原因。&lt;/p&gt;&#xA;&lt;p&gt;(4) &lt;strong&gt;容错性&lt;/strong&gt;：自然语言具有很高的容错性，人们可以猜出有错的句子的含义；编程语言的拼写必须保证绝对正确，语法必须保证绝对规范。&lt;/p&gt;&#xA;&lt;p&gt;(5) &lt;strong&gt;易变性&lt;/strong&gt;：编程语言的变化缓慢温和，而自然语言的变化迅速嘈杂。&lt;/p&gt;&#xA;&lt;p&gt;(6) &lt;strong&gt;简略性&lt;/strong&gt;：人类语言往往简洁干练，我们经常省略大量背景知识或常识。&lt;/p&gt;&#xA;&lt;h3 id=&#34;自然语言处理的任务&#34;&gt;自然语言处理的任务&lt;/h3&gt;&#xA;&lt;p&gt;(1) 语音、图像和文本的处理&lt;/p&gt;&#xA;&lt;p&gt;自然语言处理系统的输入源有语音、图像和文本。其中文本占主要地位，语音和图像受制于存储容量和传输速度的限制，它们的信息总量不如文本多。通常进行**语音识别(speech recognition)&lt;strong&gt;将语音转化为文本，使用&lt;/strong&gt;光学字符识别(optical character recognition, OCR)**将图像转化为文本。&lt;/p&gt;&#xA;&lt;p&gt;(2) 词法分析&lt;/p&gt;&#xA;&lt;p&gt;这三个任务都是围绕词语进行的分析，所以统称&lt;strong&gt;词法分析(lexical analysis)&lt;/strong&gt;。词法分析的主要任务是：将文本分隔为有意义的词语，即&lt;strong&gt;分词(segmentation)&lt;/strong&gt;；确定每个词语的类别和浅层的歧义消除，即&lt;strong&gt;词性标注(part-of-speech tagging)&lt;/strong&gt;；并且识别出一些较长的专有名词，即&lt;strong&gt;命名实体识别(named entity recognition, NER)&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;(3) 信息抽取&lt;/p&gt;&#xA;&lt;p&gt;词法分析以后，文本已经呈现出部分结构化的趋势，计算机看到的不再是一个长字符串，而是有意义的单词列表，且每个单词还附有自己的词性及其他标签。根据这些单词与标签，可以利用&lt;strong&gt;信息抽取(information extraction)&lt;strong&gt;技术来抽取文本中的有用信息，从简单的&lt;/strong&gt;高频词&lt;/strong&gt;到高级算法提取出的&lt;strong&gt;关键词&lt;/strong&gt;，从&lt;strong&gt;公司名称&lt;/strong&gt;到&lt;strong&gt;专业术语&lt;/strong&gt;，其中词语级别的信息已经可以进行很多的抽取。我们还可以根据词语之间的统计学信息抽取出关键短语乃至句子，更大粒度的文本对用户更加友好。&lt;/p&gt;&#xA;&lt;p&gt;(4) 文本分类与文本聚类&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;文本分类(text classification)&lt;/strong&gt; 任务可以判断一段话是褒义还是贬义、分析一句话的感情是积极还是消极、判断一封邮件是否是垃圾邮件等。**文本聚类(text clustering)**任务可以将相似的文本归档到一起、排除重复文档等，在信息检索等领域有着广泛的应用。&lt;/p&gt;&#xA;&lt;p&gt;(5) 句法分析&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;句法分析(syntactic parsing)&lt;strong&gt;将零散词汇信息进行分析，得到&lt;/strong&gt;词语间的关系&lt;/strong&gt;。问答系统、搜索引擎和机器翻译等系统中，句法分析都是很重要的。&lt;/p&gt;&#xA;&lt;p&gt;(6) 语义分析&lt;/p&gt;&#xA;&lt;p&gt;相较于语法分析，&lt;strong&gt;语义分析(semantic analysis)&lt;/strong&gt; 侧重语义而非语法。它包括&lt;strong&gt;词意消解&lt;/strong&gt;(确定一个词在语境中的含义)、&lt;strong&gt;语义角色标注&lt;/strong&gt;(标准组句子中的谓语与其他成分的关系)乃至&lt;strong&gt;语义依存分析&lt;/strong&gt;(分析句子中词语之间的语义关系)。&lt;/p&gt;&#xA;&lt;p&gt;(7) 其他高级任务&lt;/p&gt;&#xA;&lt;p&gt;除了上述任务以外，还有很多综合性的任务，与终端应用级产品联系更加紧密。比如：&lt;strong&gt;自动问答(QA)&lt;/strong&gt;、&lt;strong&gt;自动摘要(summarization)&lt;/strong&gt;、&lt;strong&gt;机器翻译(machine translation)&lt;/strong&gt; 等。注意，一般认为&lt;strong&gt;信息检索(information retrieve, IR)&lt;/strong&gt; 是区别于自然语言处理的独立学科。虽然二者具有密切的联系，但&lt;strong&gt;IR的目标是查询信息，而NLP的目标是理解语言&lt;/strong&gt;，二者的目标具有本质上的区别。&lt;/p&gt;&#xA;&lt;h3 id=&#34;自然语言处理的知识域&#34;&gt;自然语言处理的知识域&lt;/h3&gt;&#xA;&lt;p&gt;计算机分析所接受声音信号，并且把单词序列转换成声音信号，分别需要&lt;strong&gt;语音学&lt;/strong&gt;和&lt;strong&gt;音系学&lt;/strong&gt;的知识，这样的知识可以帮助我们建立词如何在话语中发音的模型。&lt;/p&gt;</description>
    </item>
    <item>
      <title>词向量</title>
      <link>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp2-%E8%AF%8D%E5%90%91%E9%87%8F/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp2-%E8%AF%8D%E5%90%91%E9%87%8F/</guid>
      <description>&lt;h3 id=&#34;词向量概述&#34;&gt;词向量概述&lt;/h3&gt;&#xA;&lt;p&gt;在自然语言处理领域，词的&lt;strong&gt;表示(representation)&lt;/strong&gt; 是一个核心问题。我们希望将单词通过某种嵌入的形式表示，以捕获词的&lt;strong&gt;含义(meaning)&lt;strong&gt;以及词和词之间的&lt;/strong&gt;关系(relationship)&lt;/strong&gt;。一个解决方法是，使用wordnet(a thesaurus containing lists of &lt;strong&gt;synonym sets&lt;/strong&gt; and &lt;strong&gt;hypernyms&lt;/strong&gt;)，如下所示：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200426111111921.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;然而，wordnet存在着许多问题，例如新词汇含义的缺失、上下文无关以及对人类劳动力的需求过大等。&lt;/p&gt;&#xA;$$&#xD;&#xA;w^{\text {aardvark}}=\left[\begin{array}{c}1 \\0 \\0 \\\vdots \\0\end{array}\right], w^{a}=\left[\begin{array}{c}0 \\1 \\0 \\\vdots \\0\end{array}\right], w^{a t}=\left[\begin{array}{c}0 \\0 \\1 \\\vdots \\0\end{array}\right], \cdots w^{z e b r a}=\left[\begin{array}{c}0 \\0 \\0 \\\vdots \\1\end{array}\right]&#xD;&#xA;$$&lt;p&gt;&#xA;即&lt;strong&gt;每个向量中只有一个位置为1，其余位置为0，为1的位置的下标对应单词的id&lt;/strong&gt;。这样的词表示存在两个问题：(1) 没有给出两个单词之间的相似性，即任何两个向量的余弦相似度为0，这样会丢失语义信息；(2) 当词汇表很大时，每个单词对应的向量是一个高维稀疏向量。&lt;/p&gt;&#xA;&lt;p&gt;因此，或许可以尝试降低维度，使用一个&lt;strong&gt;子空间&lt;/strong&gt;(维度为$N$，$N\ll |V|$)来表达单词。在传统机器学习方法中，可以利用**奇异值分解(single value decomposition, SVD)**实现该过程。&lt;/p&gt;&#xA;&lt;p&gt;首先遍历一个很大的数据集，统计词的共现计数矩阵$X$，然后对矩阵$X$进行奇异值分解得到$USV^\text T$，然后我们使用矩阵$U$的行来作为字典中所有词的词向量。$X$矩阵有两种选择的方式：(1) 统计每个单词在每个文档中出现的次数，生成&lt;strong&gt;单词-文本矩阵(word-document matrix)&lt;/strong&gt;，这种方式称为&lt;strong&gt;潜在语义分析(latent semantic analysis)&lt;/strong&gt;；(2) 计算每个单词在感兴趣单词的&lt;strong&gt;附近特定大小的窗口&lt;/strong&gt;中出现的次数，生成&lt;strong&gt;基于窗口的单词-单词共现矩阵(window based co-occurence matrix)&lt;/strong&gt;。以下为该方法的示例(假定窗口大小为1)：&lt;/p&gt;&#xA;&lt;p&gt;(1) I enjoy flflying.&lt;/p&gt;&#xA;&lt;p&gt;(2) I like NLP.&lt;/p&gt;&#xA;&lt;p&gt;(3) I like deep learning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>语言模型</title>
      <link>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp3-%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp3-%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/</guid>
      <description>&lt;h3 id=&#34;n元语法&#34;&gt;N元语法&lt;/h3&gt;&#xA;&lt;p&gt;N元语言模型可以用来&lt;strong&gt;预测一个句子的下一个单词的概率&lt;/strong&gt;，或者&lt;strong&gt;计算一个句子的概率&lt;/strong&gt;。该模型常用于语音识别、拼写检查以及语法检查等领域。&lt;/p&gt;&#xA;&lt;p&gt;首先，&lt;strong&gt;一个句子“its water is so transparent that”后出现某一单词“the”的概率&lt;/strong&gt;为：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200715204336846.png&#34; style=&#34;zoom:20%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;但是由于语料的多样性以及巨大的数量，许多句子不会在语料中出现，并且计数过程会消耗大量的时间。同样，对于&lt;strong&gt;一个句子的概率&lt;/strong&gt;进行计算，有：&lt;/p&gt;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;P(X_{1} \cdots X_{n}) &amp;=P(X_{1}) P(X_{2}|X_{1}) P(X_{3}|X_{1}^{2}) \cdots P(X_{n}|X_{1}^{n-1}) \\&#xD;&#xA;&amp;=\prod_{k=1}^{n} P(X_{k}|X_{1}^{k-1})&#xD;&#xA;\end{aligned}&#xD;&#xA;$$$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;P(w_{1}^{n}) &amp;=P(w_{1}) P(w_{2}|w_{1}) P(w_{3}|w_{1}^{2}) \cdots P(w_{n}|w_{1}^{n-1}) \\&#xD;&#xA;&amp;=\prod_{k=1}^{n} P(w_{k}|w_{1}^{k-1})&#xD;&#xA;\end{aligned}&#xD;&#xA;$$$$&#xD;&#xA;P(w_k|w_1^{k-1})=P(w_k|w_{k-1})&#xD;&#xA;$$&lt;p&gt;&#xA;二元语言模型的假设也称为&lt;strong&gt;马尔可夫假设&lt;/strong&gt;。&lt;/p&gt;&#xA;$$&#xD;&#xA;P(w_{1}^{n}) \approx \prod_{k=1}^{n} P(w_{k}|w_{k-1})&#xD;&#xA;$$$$&#xD;&#xA;P(w_{k}|w_{k-1})=\frac{C(w_{k-1} w_{k})}{C(w_{k-1})}&#xD;&#xA;$$&lt;p&gt;&#xA;在实践中，常常使用&lt;strong&gt;三元语法模型(3-gram language model)&lt;/strong&gt;，甚至四元、五元语法模型(当数据量充足时)。实现时，往往对概率取log，将乘法变为加法，提升运算速度。&lt;/p&gt;&#xA;&lt;h3 id=&#34;评估语言模型&#34;&gt;评估语言模型&lt;/h3&gt;&#xA;&lt;p&gt;语言模型的评估分为&lt;strong&gt;外部评估(extrinsic evaluation)&lt;/strong&gt; 与&lt;strong&gt;内部评估(intrinsic evaluation)&lt;/strong&gt; 两种。在外部评估中，语言模型被某个应用使用，对语言模型的评估体现在外部应用任务性能的提高上。然而&lt;strong&gt;运行外部NLP系统需要很大开销&lt;/strong&gt;，因此&lt;strong&gt;使用内部评估对模型快速进行评估，通常是将语料库划分为训练集和测试集，在训练集上训练语言模型，然后在测试集上进行内部评估&lt;/strong&gt;。&lt;/p&gt;&#xA;$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;\operatorname{PP}(W) &amp;=P\left(w_{1} w_{2} \cdots w_{N}\right)^{-\frac{1}{N}} \\&#xD;&#xA;&amp;=\sqrt[N]{\frac{1}{P\left(w_{1} w_{2} \cdots w_{N}\right)}} \\&#xD;&#xA;&amp;=\sqrt[N]{\prod_{i=1}^{N} \frac{1}{P(w_{i}|w_{1} \ldots w_{i-1})}}&#xD;&#xA;\end{aligned}&#xD;&#xA;$$$$&#xD;&#xA;\operatorname{PP}(W)=\sqrt[N]{\prod_{i=1}^{N} \frac{1}{P(w_{i}|w_{i-1})}}&#xD;&#xA;$$&lt;p&gt;&#xA;根据上式，&lt;strong&gt;最小化困惑度就是最大化测试集的概率&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>seq2seq与attention</title>
      <link>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp4-seq2seq%E4%B8%8Eattention/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp4-seq2seq%E4%B8%8Eattention/</guid>
      <description>&lt;h3 id=&#34;序列到序列模型&#34;&gt;序列到序列模型&lt;/h3&gt;&#xA;&lt;p&gt;许多单输出问题得以解决，比如命名实体识别、单词预测等。然而许多任务的输出是一个&lt;strong&gt;序列&lt;/strong&gt;，比如机器翻译、对话系统以及自动摘要等。这种问题应当使用seq2seq实现。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;序列到序列，或者seq2seq&lt;/strong&gt;，是一个比较新的模型，在2014年被提出用于&lt;strong&gt;英语-法语翻译&lt;/strong&gt;。在更高的层面上，seq2seq是一个&lt;strong&gt;由两个循环神经网络组成的端到端模型&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;p&gt;(1) 一个&lt;strong&gt;编码器(encoder)&lt;/strong&gt;，将模型的输入序列作为输入，然后编码固定大小的“上下文向量”。&lt;/p&gt;&#xA;&lt;p&gt;(2) 一个&lt;strong&gt;解码器(decoder)&lt;/strong&gt;，使用来自解码器生成的上下文向量作为从其生成输出序列的“种子”。&lt;/p&gt;&#xA;&lt;p&gt;因此，seq2seq模型通常被称为“&lt;strong&gt;编码器-解码器模型&lt;/strong&gt;”。其示意图如下：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200717100127147.png&#34; style=&#34;zoom:40%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;首先，编码器将输入句子编码为一个&lt;strong&gt;隐含层向量&lt;/strong&gt;作为整个输入句子的嵌入向量，然后将该向量作为解码器的&lt;strong&gt;初始隐含层向量&lt;/strong&gt;，输入一个&amp;lt;START&amp;gt;特殊标记，通过&lt;strong&gt;自回归&lt;/strong&gt;的方式不断生成单词，直到生成&amp;lt;END&amp;gt;符号，或者达到长度限制为止。以上decoder生成(测试)句子的方式为&lt;strong&gt;greedy decoding&lt;/strong&gt;，即&lt;strong&gt;每次选取输出softmax值最大的单词&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;greedy decoding的缺陷是无法undo decision，即&lt;strong&gt;一步错，步步错&lt;/strong&gt;。解决方案是&lt;strong&gt;beam search&lt;/strong&gt;，即explore several hypotheses and select the best one。On each step of decoder, keep track of the k(beam size) most probable partial translations。beam search相当于&lt;strong&gt;全局搜索的剪枝过程&lt;/strong&gt;，其不保证找到最优解，但是效果更好。beam size为2的情况如下：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200717100806251.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h3 id=&#34;注意力机制&#34;&gt;注意力机制&lt;/h3&gt;&#xA;&lt;p&gt;当人们听到句子“the ball is on the field”，人们不会认为这6个单词都一样重要，而是首先会注意到“ball”，“on” 和 “field”，因为这些单词是人们觉得最重要的。类似的，Bahdanau等人注意到&lt;strong&gt;使用RNN的最终状态作为seq2seq模型的单个“上下文向量”的缺点&lt;/strong&gt;：&lt;strong&gt;输入的不同部分具有不同的重要程度&lt;/strong&gt;。再者，&lt;strong&gt;输出的不同部分甚至可以考虑输入的不同部分“重要”&lt;/strong&gt;。例如，在翻译任务中，输出的第一个单词是一般是基于输入的前几个词，输出的最后几个词可能基于输入的后几个词。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意力机制(attention mechanism)&lt;/strong&gt; 的核心思想：on each step of the decoder, focus on a particular part of the source sequence。&lt;/p&gt;&#xA;&lt;h4 id=&#34;认知神经学中的注意力&#34;&gt;认知神经学中的注意力&lt;/h4&gt;&#xA;&lt;p&gt;注意力是一种人类不可或缺的复杂认知功能，指人可以在关注一些信息的同时忽略另一些信息的选择能力。在日常生活中，我们通过视觉、听觉等方式接收大量的感觉输入。但是人脑还能在这些外界的信息轰炸中有条不紊地工作，是因为人脑可以有意或无意地从这些大量输入信息中选择小部分的有用信息来重点处理，并忽略其他信息。这种能力就叫做&lt;strong&gt;注意力(attention)&lt;/strong&gt;。注意力可以作用在外部的刺激(听觉、视觉、味觉等)，也可以作用在内部的意识(思考、回忆等)。注意力一般分为两种：&lt;/p&gt;&#xA;&lt;p&gt;(1) &lt;strong&gt;聚焦式注意力(focus attention)&lt;/strong&gt;：有预定目的、依赖任务的，主动有意识地聚焦于某一对象的注意力。&lt;/p&gt;</description>
    </item>
    <item>
      <title>预训练模型</title>
      <link>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp5-%E9%A2%84%E8%AE%AD%E7%BB%83%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp5-%E9%A2%84%E8%AE%AD%E7%BB%83%E6%A8%A1%E5%9E%8B/</guid>
      <description>&lt;h3 id=&#34;elmo&#34;&gt;ELMo&lt;/h3&gt;&#xA;&lt;p&gt;预训练词向量(如word2vec和GloVe等)通常只能为一个单词产生一个特定的词向量，而忽略了该单词的&lt;strong&gt;上下文(context)&lt;/strong&gt; 关系，因而无法解决&lt;strong&gt;一词多义&lt;/strong&gt;或&lt;strong&gt;一义多词&lt;/strong&gt;的问题。&lt;strong&gt;ELMo(embeddings from language models)&lt;/strong&gt; 本质上是一个深度双向LSTM模型，用于为一个句子中的每个单词生成上下文相关的词向量。将这些上下文相关词向量编码了单词的深层次语义和句法信息，因此当ELMo应用到许多NLP任务中，这些任务的效果相对于使用静态的词向量往往能得到很大的提升。&lt;/p&gt;&#xA;$$&#xD;&#xA;p\left(t_{1}, t_{2}, \cdots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} | t_{1}, t_{2}, \cdots, t_{k-1}\right)&#xD;&#xA;$$&lt;p&gt;在ELMo之前的语言模型通常为第$k$个位置的单词(通过embedding等方式)计算出一个上下文无关的词表示$\mathbf x_k^{LM}$，然后将其送入一个$L$层的前向LSTM。在每个位置$k$，每一层LSTM会输出一个上下文相关的表示为$\overrightarrow{\mathbf h}&lt;em&gt;{k,j}^{LM}$，其中$j=1,2,\cdots,L$。最顶层的LSTM输出$\overrightarrow{\mathbf h}&lt;/em&gt;{k,L}^{LM}$在下游任务被用来预测下一个标记(通过sottmax层等方式)，即$t_{k+1}$。&lt;/p&gt;&#xA;$$&#xD;&#xA;p\left(t_{1}, t_{2}, \cdots, t_{N}\right)=\prod_{k=1}^{N} p\left(t_{k} | t_{k+1}, t_{k+2}, \cdots, t_{N}\right)&#xD;&#xA;$$&lt;p&gt;&#xA;因此在第$k$个位置，第$j$层LSTM的输出表示为$\overleftarrow{\mathbf h}_{k,j}^{LM}$。&lt;/p&gt;&#xA;$$&#xD;&#xA;\sum_{k=1}^{N} (\log p(t_{k} | t_{1}, \cdots, t_{k-1} ; \Theta_{x}, \overrightarrow{\Theta}_{LSTM}, \Theta_{s})+\log p(t_{k} | t_{k+1}, \cdots, t_{N} ; \Theta_{x}, \overleftarrow{\Theta}_{L S T M}, \Theta_{s}))&#xD;&#xA;$$$$&#xD;&#xA;\begin{aligned}&#xD;&#xA;R_{k} &amp;=\{\mathbf{x}_{k}^{L M}, \overrightarrow{\mathbf{h}}_{k, j}^{L M}, \overleftarrow{\mathbf{h}}_{k, j}^{L M} | j=1, \cdots, L\} \\&#xD;&#xA;&amp;=\left\{\mathbf{h}_{k, j}^{L M} | j=0, \cdots, L\right\}&#xD;&#xA;\end{aligned}&#xD;&#xA;$$&lt;p&gt;&#xA;其中，${\mathbf h}&lt;em&gt;{k,0}^{LM}$代表$\mathbf{x}&lt;/em&gt;{k}^{L M}$，${\mathbf h}&lt;em&gt;{k,0}^{LM}=[\overrightarrow{\mathbf h}&lt;/em&gt;{k,j}^{LM};\overleftarrow{\mathbf h}_{k,j}^{LM}]$。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自然语言处理应用</title>
      <link>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp6-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E5%BA%94%E7%94%A8/</link>
      <pubDate>Sun, 01 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://knove-ai.github.io/4-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/nlp6-%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E5%BA%94%E7%94%A8/</guid>
      <description>&lt;p&gt;自然语言处理的应用（即NLP任务）分布非常广泛。本章节以任务的形式进行划分，主要介绍三类具有代表性的自然语言处理应用，包括文本分类（序列-编码-类别）、文本摘要（序列-编码-解码-序列）、以及机器阅读理解（序列-编码-同步序列）。每个部分首先介绍了应用的概念及挑战，然后介绍了一些具有代表性的论文工作。&lt;strong&gt;注意，从接触一个领域的具体任务开始，已经初步进入到了对该科研领域的探索之中。每个领域都有一些具体的任务，而确定一个任务往往就是着手开展一项研究工作的第一步。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;本节介绍的相关工作均为大语言模型流行之前的工作范式。&lt;/p&gt;&#xA;&lt;h3 id=&#34;文本分类&#34;&gt;文本分类&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;文本分类(text classification)&lt;/strong&gt; 在自然语言处理领域有着广泛的应用，例如&lt;strong&gt;垃圾邮件检测(spam detection)&lt;/strong&gt;、&lt;strong&gt;情感分析(sentiment analysis)&lt;/strong&gt;、&lt;strong&gt;语言识别(language id)&lt;/strong&gt; 以及&lt;strong&gt;新闻类别标注(news classification)&lt;/strong&gt; 等。文本分类有着非常多的实现方法，每种实现方法中文本的表示也存在着很大的不同。但总的来说，文本分类是一个&lt;strong&gt;监督学习问题&lt;/strong&gt;，需要数据样本以及其对应标签。&lt;/p&gt;&#xA;&lt;p&gt;分类问题又可以分为&lt;strong&gt;二分类&lt;/strong&gt;、&lt;strong&gt;多分类&lt;/strong&gt;以及&lt;strong&gt;多标签分类&lt;/strong&gt;等类型。其中的&lt;strong&gt;多标签分类&lt;/strong&gt;指的是为每个数据标定数量不相同的标签，其由于类标签数量不确定、&lt;strong&gt;类标签之间可能有相互依赖&lt;/strong&gt;、多标签的训练集比较难以获取等原因，难度是分类问题中最大的，因此也称为了分类问题的研究热点。目前主流的多标签分类的实现方式有如下几种：&lt;/p&gt;&#xA;&lt;p&gt;(1) &lt;strong&gt;不考虑标签之间的关联性&lt;/strong&gt;：将每个标签的出现与否视为二分类任务。&lt;/p&gt;&#xA;&lt;p&gt;(2) &lt;strong&gt;考虑标签的关联性&lt;/strong&gt;：分类器链、序列生成任务、通过**标签共现(组合)**的方式转换为多分类任务。&lt;/p&gt;&#xA;&lt;p&gt;对于基于神经网络的分类器，实现多标签分类，只需&lt;strong&gt;将输出层的softmax激活函数改为sigmoid激活函数&lt;/strong&gt;，对每个类别进行二分类即可。在这个过程中，每个标签之间不是独立的，其关联性也会被神经网络学习到。&lt;/p&gt;&#xA;&lt;p&gt;分本分类通常用**准确率(accuracy)、召回率(recall)、精准率(precision)和F1(又分为micro和macro)**等指标进行评价。&lt;/p&gt;&#xA;&lt;h3 id=&#34;基于朴素贝叶斯算法的文本分类&#34;&gt;基于朴素贝叶斯算法的文本分类&lt;/h3&gt;&#xA;&lt;p&gt;朴素贝叶斯算法是一种生成模型，其实现简单，常常用于&lt;strong&gt;文本分类的baseline&lt;/strong&gt;。在朴素贝叶斯算法中，文本常用词袋模型进行表示，即每个文档表示为一个大小为$|V|$的向量，其中$|V|$为词汇表的大小，每一个维度表示对应下标的单词在文档中出现的次数：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200417082234463.png&#34; style=&#34;zoom:35%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;朴素贝叶斯分类器是一个概率模型，其理论基础是贝叶斯定理，“朴素”一词指的是&lt;strong&gt;条件独立性假设&lt;/strong&gt;。对于文档$d$，朴素贝叶斯算法预测使得后验概率$P(c|d)$最大的类别$c\in C$。&lt;strong&gt;朴素贝叶斯算法的过程如下所示&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200417082740628.png&#34; style=&#34;zoom: 40%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h3 id=&#34;基于卷积神经网络的文本分类&#34;&gt;基于卷积神经网络的文本分类&lt;/h3&gt;&#xA;&lt;p&gt;与朴素贝叶斯算法等这类传统机器学习方法不同，使用卷积神经网络(CNN)进行文本分类需要将词使用&lt;strong&gt;词向量(例如Word2Vec)&lt;/strong&gt; 进行表示。CNN最初是针对图像设计的，其利用卷积核(convolving filters)来提取图像的局部特征。然而CNN也可以用于文本的特征提取，其通常被称为&lt;strong&gt;TextCNN&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;Yoon Kim在论文《Convolutional Neural Networks for Sentence Classification》中提出了如下CNN网络结构用于文本分类任务：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200417084853983.png&#34; style=&#34;zoom:30%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;整个网络仅使用了一个卷积层、一个池化层和一个全连接层。输入层为词向量，其可以一开始将词向量矩阵随机初始化，并在训练的过程中进行学习(作为实验的baseline)，也可以一直&lt;strong&gt;保持静态&lt;/strong&gt;(即使用其他语料训练完成后便不再改变)，还可以预训练后在该网络训练的过程中进行&lt;strong&gt;微调&lt;/strong&gt;(在实验中能够取得更好的效果)。该论文还将输入设置为两个通道，其均为词向量，但&lt;strong&gt;其中一个通道保持静态，另一个通道可以在训练过程汇中进行微调&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;另一篇关于TextCNN的论文提出了如下所示的网络结构：&lt;/p&gt;&#xA;&lt;div align=&#34;center&#34;&gt;&#xD;&#xA;&lt;img src=&#34;https://knove-ai.github.io/images/4/image-20200417095418695.png&#34; style=&#34;zoom:50%;&#34; /&gt;&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;p&gt;该论文进行了&lt;strong&gt;大量的实验&lt;/strong&gt;来优化TextCNN中的参数，其中比较重要的一些&lt;strong&gt;结论和建议&lt;/strong&gt;如下：&lt;/p&gt;&#xA;&lt;p&gt;(1) 预训练word2vec或GloVe效果好于one-hot编码形式。&lt;/p&gt;&#xA;&lt;p&gt;(2) 卷积核大小对实验结果有较大影响，一般取1~10，文本越长，可设置卷积核大小越大。&lt;/p&gt;&#xA;&lt;p&gt;(3) 卷积核的数量对实验结果有较大的影响，一般取100&lt;del&gt;600 ，一般使用Dropout比率为0&lt;/del&gt;0.5。&lt;/p&gt;&#xA;&lt;p&gt;(4) 选用ReLU和tanh作为激活函数优于其他的激活函数。&lt;/p&gt;&#xA;&lt;p&gt;(5) 1-max pooling在该实验中优于其他pooling策略。&lt;/p&gt;&#xA;&lt;p&gt;(6) 正则化对实验结果有相对小的影响。&lt;/p&gt;&#xA;&lt;p&gt;(7)当评估一个模型的性能时，考虑模型的方差是必要的。因此，评估模型时应当使用交叉验证，同时考虑模型每次结果的方差以及范围。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Tensorflow实现用于多标签文本分类的TextCNN结构&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;TextCNN&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;seq_len&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;token_num&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;embed_dim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;out_dim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;model_img_path&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;None&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;embed_matrix&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;None&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    TextCNN模型&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    1. embedding layers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    2. convolution layer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    3. max-pooling&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    4. softmax layer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;x_input&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Input&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;shape&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;max_seq_len&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;embedd_matrix&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;None&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;x_emb&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;layers&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Embedding&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;input_dim&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;token_num&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          &lt;span style=&#34;color:#000&#34;&gt;output_dim&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;embed_dim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          &lt;span style=&#34;color:#000&#34;&gt;input_length&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;seq_len&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;x_input&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;else&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# 加载预训练好的词向量矩阵&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;x_emb&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;layers&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Embedding&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;input_dim&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;token_num&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          &lt;span style=&#34;color:#000&#34;&gt;output_dim&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;embed_dim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          &lt;span style=&#34;color:#000&#34;&gt;input_length&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;seq_len&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          &lt;span style=&#34;color:#000&#34;&gt;weights&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;embed_matrix&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                                          &lt;span style=&#34;color:#000&#34;&gt;trainable&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;True&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;x_input&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# x_embed shape: (batch_size, seq_len, token_num)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;pool_output&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;kernel_sizes&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# 设置多种卷积核&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kernel_size&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kernel_sizes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Conv1D input shape: 形如(samples, steps, input_dim)的3D张量&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# Conv1D output shape: 形如(samples，new_steps，nb_filter)的3D张量&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;layers&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kerasConv1D&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;filters&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;kernel_size&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;kernel_size&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;strides&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;x_emb&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;layers&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;MaxPool1D&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;pool_size&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#204a87&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;shape&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]))(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;c&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000&#34;&gt;pool_output&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;append&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;p&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;pool_output&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;layers&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;concatenate&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;pool_output&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;])&lt;/span&gt;  &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# 将多个池化结果进行拼接&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;x_flatten&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;layers&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Flatten&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;pool_output&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;# output_dim个sigmoid输出，是多标签分类的实现方式，实质上是对每个标签的二分类&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;layers&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Dense&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;output_dim&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;activation&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;sigmoid&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)(&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;x_flatten&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;model&lt;/span&gt; &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;tf&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;keras&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Model&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;([&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;x_input&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;outputs&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;y&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000&#34;&gt;model&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;summary&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#000&#34;&gt;model&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;基于fasttext的文本分类&#34;&gt;基于FastText的文本分类&lt;/h3&gt;&#xA;&lt;p&gt;Armand Joulin等人提出了如下FastText模型，可用于快速的文本分类， 并且准确度接近state-of-art模型。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
