NLP-语言表示与文本分类

NLP | 语言表示与文本分类

一. 词语和文档表示方法

词的表示方法是NLP的基础,我们想要使用计算机处理文本内容,首要的就是需要想办法将文本字符串转化成数字向量。

1. one-hot表示:

向量各个维度分别对应一个词,向量中只有一个维度上的值为1,其他的都为0。如此,可以完成向量与词之间的映射,即向量是1对应的维度所代表的词的编码。

例如:词集V={I, like, apple, banana, orange},则对应的,我们需要对文本构造一个|V|(此处|V| = 5)大小的向量:I =(1,0,0,0,0),like =(0,1,0,0,0),apple =(0,0,1,0,0)。

2. 词袋模型:

[1]. 将文本编码成向量,可以将文本中出现的词求和。比如说,对于上面所给出的数据,我们想编码一个:I like orange,为:(1,0,0,0,0)+(0,1,0,0,0)+(0,0,0,0,1)=(1,1,0,0,1)

[2]. 上述方法只考虑了词出现与否,而词频等信息却未被考虑。直觉的,如果一个词在一篇文章中出现的次数越多,他对该篇文章的贡献就越大。另外,对于文本分类等任务而言,如果一些词仅仅出现在少数的文章中(例如:鼠标、键盘等常出现在计算机之类的书籍中,而马达、方向盘等常出现在汽车之类的书籍中),我们认为他应该是一个特征词,编码他的时候给的权重应该较大为好。由此提出了tf-idf的权值统计方法: \[ V:所有词之集合;\quad w_{ij}:文本j中出现的词V[i];\quad f_{ij}:V[i]出现在文本j中的次数 \\ tf_{ij} = \frac{f_{ij} }{\sum_{k=0}^{|V|-1}f_{kj} }\\ N: 文档总数; \quad n_i:含有词V[i]的文档数量 \\ idf_i = \log\frac{N}{n_i}\\ w_{ij} = tf_{ij}*idf_i\\ \]

3.Topic model

思想:该方法基于如下假设:每个文本的词都是围绕着1个或多个主题而展开,故,我们假设每个主题就是一个有关于词的数据分布,即:对于不同主题存在一个语料库,而文档就是从部分主题的语料库中的词构成。

例:对于体育和美食两个类别而言,词:篮球、足球、游泳等是出现在体育类别对应的词分布中,且直觉上它具有着较大的权重;而红烧肉、宫保鸡丁等则是美食的词分布中,且具有较大的权重。而一篇介绍着养生生活的文章可能就包含了体育和美食两个主题,介绍该如何锻炼如何饮食。

此处的一个编码方式就是通过确定不同主题的先验概率和主题下,词分布的概率函数,进而进行计算每个词的权重。

二. 基于主题模型的文本分类方法:

1. 问题描述:

[1]. 输入:文档集D,主题:T,|T| = K,同时,我们定义所有D出现的不重复词构成的词集表示为V。

[2]. 输出:每个文档\(d_i、d_i \in D\)对应主题\(t_j、t_j \in T\)的概率\(p_{ij}、p_{ij} \in p_i = \{ p_{i1},p_{i2},...,p_{iK} \}\)以及主题的词分布:主题\(t_i\)生成词\(v_j、v_j \in V\)的概率\(p'_{ij}、p'_{ij} \in p'_i = \{ p'_{i1},p_{i2},...,p_{i|V|} \}\)

[3]. 本节将会介绍两种求解主题模型参数的方法

2. plsa方法:

[1]. 理解LDA前,我们先看一下plsa方法

[2]. 算法过程描述(EM方法):

  • 初始化:

    随机或是使用均匀分布等分布函数,对所有的\(p_i\)\(p'_i\)进行复制。

  • 循环:

    • 计算各个文档\(d_i、d_i \in D\)中词\(w_{is}、w_{is}表示文档d_i中第i个位置的词\)的基于主题\(t_j\)概率分布: \[ 设词w_{is}在词集V中的下标为:k \\ P_j(w_{is}|d_i) = p_{ij}*p'_{jk} \]

    • 对于一篇文档\(d_i\),我们需要判断出其中的每一个单词\(w_{is}\)是选自于哪一个主题,这是我们可以遍历所有的j,找出使得\(P_j(w_{is}|d_i)\)最大的那个j,由此我们得出,单词\(w_{is}\)是属于主题\(t_j\)

    • 根据计算出来的各个\(P_j(w_{is}|d_i)\)更新\(p和p'\),更新过程的公式为: \[ 回顾:p_{ij}表示:文档d_i归属于主题t_j的概率\\ p_{ij} = \frac{d中被归类为主题t_j的词数量}{d中词总数} \]

      \[ 回顾: p'_{jk}表示:主题t_j生成词集中词w_k的概率:\\ p'_{jk} = \frac{D中词w_k被归类为主题t_j的次数}{\sum_iD中词w_i被归类为主题t_j的次数} \]

    • 结束条件:直到p和p'不再发生改变。

    [3]. 算法解读:

    ​ 由此我们可以分析得到,该方法是通过分析文档中每个词与主题之间的对应关系(概率),来对p和p'进行更新,又使用p和p'更新文档中词与主题之间对应关系,也即EM算法的思想。

3. LDA方法

[1]. 与plsa之间的关系:

​ 简单来讲,我们在使用plsa方法计算文档的主题概率分布时和主题的词概率分布时,没有考虑主题先验和词先验概率,这一点是LDA对plsa的更新的地方

[2]. LDA概述:

​ LDA假设文档中主题分布和主题下词分布服从多项分布,这里定义为Mult(),他们的先验(主题先验概率和词先验概率)服从狄利克雷分布,定义为Diri()。

​ 简单理解这里的多项式分布:他是从二项分布扩展而来,表示单词独立重复试验的可能结果有K个。该公式参数即为单词独立重复试验中K个结果的概率值向量(先验),而这个先验服从Diri()。

​ 由如上思想我们可以得到一个LDA模型的所有变量的联合概率分布:

image-20201117161944593

从中我们可以得出文档的主题分布\(\Theta\)和主题的词分布\(\Phi\),进而推导出计算这两个分布公式。此处我们忽略掉这些数学推导,而是关注如何求解.

[3]. 基于主题分析与LDA的文本分类:

  • 变量定义:

    词典:\(V = \{ w_1,...,w_{|V|} \}\),使用k作为索引进行引用,文档集:\(D = \{ \vec{d_1},...,\vec{d_m} \}\),文档表示:索引下表i,\(d_i = \{ w_{i0},..,w_{is},..,w_{i|d_i|} \}\),其中词\(d_{is}\)在词典V中的引用为\(w_{k_s}\)。主题:\(T = \{ t_1, ...,t_{|T|} \}\),索引使用字母j。

    \(p_i=\{ p_{i1},..,p_{ij},..,p_{i|T|} \},\quad p_{ij}\)表示:文档\(d_i\)归属于主题\(t_j\)的概率。

    目标:求解:\(p'_j=\{ p'_{j1},..,p'_{jk},..,p'_{j|V|} \},\quad p'_{jk}\)表示:主题\(t_j\)生成词集中词\(w_k\)的概率:

  • Gibbs Sampling算法求解过程:

    • 算法参数--input:

      D,先验:\(\alpha\)\(\beta\), 主题数|K|。

    • 初始化:初始化所有文档中每一个词\(w_{is} \in d_i \in D\)的主题标注以及统计四个统计量初始化为0: \[ w_{is}的主题t_j\sim Mult(|T|*[\frac{1}{|T|}])\\ n_{t_j}^{w_k}:词w_k被分配给主题t_j的次数 \\ n_{t_j}:\sum_{i = 1}^{|V|}n_{t_j}^{w_k} \\ n_{d_i}^{t_j}:文档d_i中分配了主题t_j的词数 \\ n_{d_i}:\sum_{j=1}^{|T|}n_{d_i}^{t_j} \] 同时,每初始化一个ci的主题标注\(t_j\),相应的四个统计量加1。

    • 循环:直到模型收敛或循环轮数已达到最大轮数

      • 遍历各个文档的每一个词\(w_{is} \in d_i \in D\),并对当前次重新估计主题标注

      • 基本思想:不考虑(排除)当前词,根据其他所有词的主题分配情况重新为该词进行主体标注:

        若该词之前被分配主题为:\(t_j\),则\(n_{t_j}^{w_{k_s} },n_{t_j},n_{d_i}^{t_j},n_{d_i}\)各减1。

        而后通过下面公式计算当前词归类于主题j的概率: \[ p_{j}=\frac{\frac{n_{j}^{w_{k_s} } }{n_{j} }+\beta_{w_{k_s} } }{\sum_{k=1}^{|V|}\frac{n_{j}^{w_{k_s} } }{n_{j} }+\beta_{w_{k_s} } }(\frac{n_{d_i}^{t_j} }{n_{d_i} }+\alpha_{t_j}) \] 左边求的是词归类为主题的概率估计,右面是文章归属于主题的概率估计,两者相乘作为当前文本中词归类为某一主题的概率估计。选取最大的估计概率对应的主题作为当前词的新的主题。

        同时重新计算四个统计量。

      • 在进行了一轮的文本词主题更新后,我们开始计算p和p': \[ p_{ij} = \frac{\frac{n_{d_i}^{t_{j} } }{n_{d_i} }+\alpha_{t_j} }{\sum_{j=1}^{|K|}\frac{n_{d_i}^{t_{j} } }{n_{d_i} }+\alpha_{t_j} }\\ p'_{jk} = \frac{\frac{n_{t_j}^{w_{k} } }{n_{t_j} }+\beta_{t_j} }{\sum_{k=1}^{|V|}\frac{n_{t_j}^{w_{k} } }{n_{t_j} }+\beta_{t_j} }\\ \]