0
点赞
收藏
分享

微信扫一扫

Text classification

Text classification

  • Multi-class: many labels, only one correct
  • Binary-class: two labels, only one correct
  • Muti-label classification: many labels, several can be correct

我们假设我们有一个带有真实标签的文档集合。分类器的输入是带有标记 ( ( x 1 , … , x n ) ) ((x_1, \dots, x_n)) ((x1xn)) 的文档 ( x = ( x 1 , … , x n ) ) (x=(x_1, \dots, x_n)) (x=(x1xn)),输出是一个标签 ( y ∈ 1 … k ) (y \in 1\dots k) (y1k)。通常,分类器估计类的概率分布,我们希望正确类的概率最高。

文本分类器

  • 特征提取器

    经典方法或者学习(神经网络)

  • 分类器

    必须为给定文本的特征表示形式分配类概率。最常见的方法是逻辑回归,也可以用贝叶斯分类器或者svm

生成模型:

p ( x , y ) = p ( x ∣ y ) ⋅ p ( y ) p(x, y) = p(x|y)\cdot p(y) p(x,y)=p(xy)p(y)

y = a r g max ⁡ k p ( x ∣ y = k ) ⋅ p ( y = k ) y=arg \max\limits_kp(x|y=k)⋅p(y=k) y=argkmaxp(xy=k)p(y=k)

选取联合概率最高的类

条件模型

p ( y ∣ x ) p(y|x) p(yx)

$ y=arg⁡ \max\limits_kp(y=k|x)$

选取一个条件概率最高的类

经典方法

朴素贝叶斯分类器

朴素贝叶斯是一个生成模型:它对数据的联合概率进行建模。

  • 先验概率 P ( y = k ) P(y=k) P(y=k):查看数据之前的类概率(即,在知道x之前);
  • 后验概率 P ( y = k ∣ x ) P(y=k|x) P(y=kx):查看数据后的类概率(即,在知道特定的x之后);
  • 联合概率 P ( x , y ) P(x,y) P(x,y):数据的联合概率(即,示例 x 和标签 y ) ;
  • 最大后验(MAP)估计:我们选择具有最高后验概率的类。

朴素贝叶斯假设:

  • 词序无关
  • 给定类的特征是独立的

P ( x ∣ y = k ) = P ( x 1 , … , x n ∣ y = k ) = ∏ t = 1 n P ( x t ∣ y = k ) P(x|y=k)=P(x_1,…,x_n|y=k)=∏ \limits_{t=1}^nP(x_t|y=k) P(xy=k)=P(x1,,xny=k)=t=1nP(xty=k)

$P(x_i|y=k)=\frac{N(x_i,y=k)}{\sum\limits_{t=1}^{|V|}N(x_t,y=k)} $

如果 N ( x i , y = k ) = 0 N(x_i, y=k)=0 N(xiy=k)=0怎么办?需要避免这种情况!

使用一个简单的技巧:我们将所有单词的计数添加一个小的 δ \delta δ,称为拉普拉斯平滑

$P(x_i|y=k)=\frac{\color{red}{\delta} +\color{black} N(x_i, y=k) }{\sum\limits_{t=1}^{|V|}(\color{red}{\delta} +\color{black}N(x_t, y=k))}= \frac{\color{red}{\delta} +\color{black} N(x_i, y=k) }{\color{red}{\delta\cdot |V|}\color{black} + \sum\limits_{t=1}^{|V|}\color{black}N(x_t, y=k)} $

朴素贝叶斯(以及更广泛的生成模型)根据数据和类的联合概率进行预测: y ∗ = arg ⁡ max ⁡ k P ( x , y = k ) = arg ⁡ max ⁡ k P ( y = k ) ⋅ P ( x ∣ y = k ) y^{\ast} = \arg \max\limits_{k}P(x, y=k) = \arg \max\limits_{k} P(y=k)\cdot P(x|y=k) y=argkmaxPxy=k=argkmaxPy=kPxy=k

在情感分析方面,用单词做指标,累加判断整个句子是正类还是负类

在实践中,我们通常会处理对数概率而不是概率。

最大熵分类器

  • 获取 h = ( f 1 , f 2 , . . . , f n ) h=(f_1,f_2,...,f_n) h=f1f2...fn) 输入文本的特征表示;

  • w ( i ) = ( w 1 ( i ) , . . . , w n ( i ) ) w(i)=(w_1(i),...,w_n(i)) w(i)=(w1(i),...,wn(i)) - 具有每个类的特征权重的向量;

  • 对于每个类,权衡特征,即取特征表示的点积h具有特征权重 w ( k ) : w ( k ) h = w 1 ( k ) ⋅ f 1 + ⋯ + w n ( k ) ⋅ f n , k = 1 , … , K w^{(k)}:w^{(k)}h=w_1^{(k)}⋅f_1+⋯+w_n{(k)}⋅f_n, k=1,…,K w(k):w(k)h=w1(k)f1++wn(k)fn,k=1,,K

    为了得到上述总和中的偏差项,我们将其中一个特征定义为1(例如, f 0 = 1 f_0=1 f0=1)

    w ( k ) : w ( k ) h = w 0 ( k ) + w 1 ( k ) ⋅ f 1 + ⋯ + w n ( k ) ⋅ f n , k = 1 , … , K w^{(k)}:w^{(k)}h=w_0^{(k)}+w_1^{(k)}⋅f_1+⋯+w_n{(k)}⋅f_n, k=1,…,K w(k):w(k)h=w0(k)+w1(k)f1++wn(k)fn,k=1,,K

  • 使用 softmax 获取类概率: P ( c l a s s = k ∣ h ) = e x p ⁡ ( w ( k ) h ) ∑ i = 1 K e x p ⁡ ( w ( i ) h ) P(class=k|h)=exp⁡(w^{(k)}h)∑_{i=1}^Kexp⁡(w^{(i)}h) P(class=kh)=exp(w(k)h)i=1Kexp(w(i)h).

    Softmax 规范化K我们在上一步得到的值是输出类上的概率分布。

训练方式:最大似然估计 w ∗ = arg ⁡ max ⁡ ∑ i = 1 N log ⁡ P ( y = y i ∣ x i ) w^*=\arg \max \sum\limits_{i=1}^N \log P(y=y^i|x^i) w=argmaxi=1NlogP(y=yixi)

I这等价于最小化交叉熵 l o s s ( p ∗ , p ) = − ∑ i = 1 K p i ∗ log ⁡ ( p i ) loss(p^*, p)=-\sum\limits_{i=1}^Kp_i^*\log (p_i) loss(p,p)=i=1Kpilog(pi)

SVM

最基本(和流行)的功能是单词袋和 ngram 包(ngram 是 n 个单词的元组)。通过这些简单的功能,具有线性核的SVM的性能优于朴素贝叶斯

神经网络方法

使用神经网络获得输入文本的特征表示

获取K-大小矢量。

从d-大小,我们可以使用线性层。一旦我们有了K-大小向量,剩下的就是应用 softmax 运算将原始数字转换为类概率。

文本分类模型

我们需要一个可以为不同长度的输入生成固定大小的矢量的模型。

嵌入带(BOE)

BOE是嵌入的总和,BOW是一热向量的总和:BOE对语言的了解更多。预先训练的嵌入(例如,Word2Vec或GloVe)理解单词之间的相似性。

循环网络:RNN/LSTM

Vanilla RNN: h t = t a n h ( h t − 1 W h + x t W t ) h_t = tanh(h_{t-1}W_h+x_tW_t) ht=tanh(ht1Wh+xtWt)

存在梯度消失和梯度爆炸的问题

  • 简单:阅读文本,采取最终状态

最简单的循环模型是单层 RNN 网络。在这个网络中,我们必须采取对输入文本有更多的了解的状态。因此,我们必须使用最后一个状态 - 只有此状态看到了所有输入令牌。

  • 多层:将状态从一个 RNN 馈送到下一个 RNN

要获得更好的文本表示,可以堆叠多个图层。在这种情况下,较高 RNN 的输入是来自上一层的表示形式。

主要假设是,通过几个层,较低层将捕获局部现象(例如,短语),而较高层将能够学习更多高级事物(例如,主题)。

  • 双向:使用来自前向和后向RNN的最终状态。

以前的方法可能有一个问题:最后一个状态可以很容易地"忘记"早期的令牌。即使是像LSTM这样的强大模型仍然会受到这种影响!

为了避免这种情况,我们可以使用两个 RNN:向前,它从左到右读取输入,向后,它从右到左读取输入。然后,我们可以使用两个模型的最终状态:一个将更好地记住文本的最后部分,另一个 - 开头。这些状态可以串联,或求和,或其他东西 - 这是你的选择!

CNN卷积神经网络

文本采用一维卷积,根据窗口的线性层(过滤器)提取特征

最流行的是最大池化:它在每个维度上获取最大值,即获取每个特征的最大值。

使用多个具有不同内核大小的卷积,而不是为卷积选择一个内核大小。配方很简单:将每个卷积应用于数据,在每个卷积之后添加非线性和全局池化

举报

相关推荐

Lecture 4 Text Classification

0 条评论