其他分享
首页 > 其他分享> > 多分类文本处理与特征工程1

多分类文本处理与特征工程1

作者:互联网

多分类文本处理与特征工程

1. 语言模型

语言模型(LM,Language Model)就是用来判断某个句子是否语义通顺。首先对句子进行分词,句子的概率可以表示为各个词的联合概率:$ P(s)=P(w_1,w_2,...,w_n)$。

根据Chain rule: P(A,B,C,D)=P(A)P(B|A)P(C|A,B)P(D|A,B,C),可以转化:

\[P(s)=P(w_1,w_2,...,w_n)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_1,w_2,w_3,...,w_{n-1}) \]

对于概率\(P(w_n|w_1,w_2,w_3,...,w_{n-1})\),条件很长,corpus里找不到单词,就容易导致稀疏性(sparsity),因此引入Markov Assumption:

因此,语言模型可表示为:

那么如何估计每个单词的概率呢?统计语料库corpus里出现的单词的频数来估计概率,即模型的训练过程。

比如,根据以下不同阶段的工作或选择构建不同的LM?

1.1 模型评估(概率估计)

根据不同的选择可以有很多LM,又如何从中选择最好的一个呢?训练出来的语言模型效果是好还是坏?

理想情况下:

  1. 假设有语言模型A,B
  2. 选定一个特定的任务,比如拼写纠错,机器翻译(MT,Machine Translation)
  3. 把两个模型都应用到此任务中
  4. 最后比较准确率,从而判断A,B的表现

核心思路:\(P(w_1,w_2,...,w_n)= P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_n|w_1,w_2,w_3,...,w_{n-1})\)使概率乘积最大。

更简单的评估方法,不需要放在特定任务中——Perplexity

\[Perplexity=2^{-x}, x:average\quad log\quad likelihood \]

i.e. Bigram Model: \(P(w_1,w_2,w_3,w_4,w_5)\)

\(\frac{logP(w_1)+logP(w_2|w_1)+logP(w_3|w_2)+logP(w_4|w_3)+logP(w_5|w_4)}{5} = x \Longrightarrow 2^{-x}\)

Perplexity越小(LM中所有单词的概率乘积越大),LM越好

1.2 平滑方法

为了解决使用N-Gram模型时可能引入的稀疏数据问题,人们设计了多种平滑算法。
计算概率应避免出现概率为0,在文本分类的问题中,当一个词语没有在训练样本中出现,该词语概率为0,使用连乘计算文本出现概率时也为0。

可以用平滑处理方法:Laplace smoothing, Interpolation, Good-Turing smoothing等10几种方法。

\[P(w_i|w_{i-1})=\frac{c(w_{i-1},w_i)+1}{c(w_{i-1})+V} \]

,V是词库大小(分母+V为了归一化,所有概率和=1)

\[P(w_i|w_{i-1})=\frac{c(w_{i-1},w_i)+k}{c(w_{i-1})+kV} \]

,V是词库大小(V=set(corpus))

\[P(w_i|w_{i-2},w_{i-1})=\lambda_1P(w_i)+\lambda_2P(w_i|w_{i-1})+\lambda_3P(w_{i-2},w_{i-1}) \\ \lambda_1 + \lambda_2 + \lambda_3 = 1 \]

\[r'= (r+1)n_{r+1}/n_r \\ P(x:c(x)=r)=r'/N \]

1.3 LM在拼写纠正(Spell Correction)中的应用

一般地,拼写错误有两种:第一,词拼写错;第二,没有错词,语法有问题。

对于错词,之前的方法VS现在的方法

之前的方法:

用户输入 --> 从词典中寻找编辑距离最小的词(需要遍历整个词典O(|V|) --> 返回

现在的方法:

用户输入 --> 生成编辑距离为1,2的字符串(candidates) --> 过滤 (根据上下文)--> 返回

如何过滤?

假设w是错词,改成正确的形式c:

\[\begin{align*} c^{*} &= \mathop{\arg\max}\limits_{c \in Candidates} P(c|w) \\ &= \mathop{\arg\max}\limits_{c \in Candidates} P(w|c)P(c)/P(w) \\ &= \mathop{\arg\max}\limits_{c \in Candidates} P(w|c)P(c) \\ \end{align*} \]

\(P(w|c)\)是(w,c)相关的score,\(P(c)\)是语言模型

第一,词拼写错:

  1. 首先是获取candidates,w所有可能的c,有两种方法来过滤出最优的正确词。

    • Edit Distance
      设定不同编辑距离下(w,c)相关的score,例如d=1, score=0.8; d=2, score=0.2; other, score=0.

    • Collected data
      P(w|c):当用户拼c时,有多少概率把它拼错位w?
      从搜索引擎可以得到相关的历史数据,例如输入搜索词“appl",搜索框历史给出相关的可能的匹配词,统计出现的频率即可。

  2. 然后对候选词根据N-gram的概率最大化来选择最优的词c。

第二,没有错词,语法有问题。

根据LM来检查。

2. 预处理

  1. 过滤词

    先把停用词、特殊的标点符号、出现频率很低的词过滤掉。

  2. 英文:Normalization (Lemmatization词形还原、Stemming词干提取)

3. Word Representation: 独热编码,tf-idf

4. Word2Vec

one-hot representation:无法表示词的meaning,数据稀疏性

one-hot representation --->distributed representation

4.1 Word Embedding

Word Embedding 词向量模型:(依据分布式假设:挨在一起的单词的相似度更高)

传统: SkipGram, CBOW,Glove, FastText, Matrix Factorization(MF)

考虑上下文(动态表征):ELMo, BERT, XLNet

词向量降维:T-sne

Word Embedding --> Sentence Embedding: Average Pooling, Max Pooling, ...

Question: CBOW和Skip-Gram哪个更好?

不一定,但一般Skip-Gram效果好于CBOW:

  1. Data size(window size):例如在\({w_1,w_2,w_3,w_4,w_5}\)中,window size = 1, CBOW中有3个样本,Skip-Gram中有8个样本。
  2. 难易度:CBOW由多个上下文词预测中心词相对简单,Skip-Gram由单个中心词预测上下文词相对困难。
  3. Smoothing effect:在CBOW中,对于出现次数少的词效果不好,对于出现次数多的词效果很好。上下文单词中有词频多与少的词被Average Pooling(平均值)过程综合了部分单词特征:平均值减弱了词频数少的单词的表示效果。

4.2 Gaussian Embedding

用来衡量两个概率分布的相似度/差异性:KL Divergence(Kullback–Leibler divergence,KL散度)

对于概率分布P(x)和Q(x):

$ D(P||Q)= \sum P(x)log(P(x)/Q(x)) $

P(x)和Q(x)相似性越高,KL散度越小。

问题:对corpus中出现频率高和低的词学习到的词向量有什么问题?

从统计学角度,出现次数多的可信度更高,对于每个词的词向量可以计算概率分布\(N(\mu,\sigma)\)。通过计算两个词向量分布之间的KL散度,判断相似性高低。

4.3 Contextual Embedding

解决一词多义问题。

考虑上下文:ELMo, BERT, XLNet

5. 文本特征工程

Text Features:

n-gram特征:对于词库V,Bi-gram可以构建从V中选出任意两个词的所有组合,(组合个数)大小为S>>|V|(每两个词看作是一个“词”,形成新的词库),对于corpus里每个句子,可以根据Bi-gram进行0-1编码(对句子单词前后两两组合,如果组合出现在Bi-gram就为1,否则0)。

标签:...,概率,特征,分类,文本处理,单词,gram,Model,句子
来源: https://www.cnblogs.com/dangui/p/14675528.html