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模型的所有变量的联合概率分布:

从中我们可以得出文档的主题分布\(\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} }\\ \]