NLP基础——词表示、文本特征工程

文章目录

  • NLP基础——词表示和文本特征
    • 1. Word Representation: 独热编码,tf-idf
    • 2. Word2Vec
      • 2.1 Word Embedding
      • 2.2 Gaussian Embedding
      • 2.3 Contextual Embedding
    • 3. 文本特征工程

NLP基础——词表示和文本特征

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

  1. 词表示:0-1 one-hot encoding --> 句子表示:0-1(Boolean

    构建词库V,对每个句子的表示:根据每个分词是否在V中出现(0/1),表示向量的大小为|V|。

  2. 词表示:0-1 one-hot encoding --> 句子表示:0-1(Count

    构建词库V,对每个句子的表示:统计每个分词在V中出现次数,表示向量的大小为|V|。

  3. 句子相似度:欧式距离,余弦相似度。

  4. TF-IDF: t f i d f ( w ) = t f ( d , w ) ∗ i d f ( w ) tfidf(w)=tf(d,w)*idf(w) tfidf(w)=tf(d,w)idf(w)

    t f ( d , w ) tf(d,w) tf(d,w): 文档d中w的词频;

    i d f ( w ) idf(w) idf(w): = l o g ( N N ( w ) ) =log(\frac{N}{N(w)}) =log(N(w)N),单词的重要性,逆文档频率(inverse document frequency);

    N: 语料库中的文档总数;

    N(w): 词语w出现在多少个文档中。

2. Word2Vec

因为one-hot representation:无法表示词的meaning,还有数据稀疏性的问题,故尝试在一个词向量空间中寻找词表示。

一个重要转变:one-hot representation —> distributed representation

2.1 Word Embedding

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

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

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

  3. 词向量降维:T-sne

如果知道了词向量的表示,那么句子或者文档的表示也可以很快获得。

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

传统的Word Embedding模型有:

  • SkipGram: 经典的局部方法,根据window-size选取关联的上下文词。Make use of context window。

  • FastText核心思想:解决OOV(out-of-vocabulary)问题,一些出现频率低的词处理问题。利用n-gram feature,在训练过程中考虑每个单词的2-gram, 3-gram, 4-gram等子词特征,特征融合后利用SkipGram进行训练。

  • Matrix Factorization:经典的全局方法,make use of co-occurance counts

  • Glove: 同时结合全局性(如MF)和局部性(如SkipGram),使用加权的最小平方误差。Use weighted least square error.


问题: CBOW和Skip-Gram哪个更好?

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

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

2.2 Gaussian Embedding

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

对于概率分布P(x)和Q(x):
D ( P ∣ ∣ Q ) = ∑ P ( x ) l o g ( P ( x ) / Q ( x ) ) D(P||Q)= \sum P(x)log(P(x)/Q(x)) D(PQ=P(x)log(P(x)/Q(x))
P(x)和Q(x)相似性越高,KL散度越小。


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

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

2.3 Contextual Embedding

解决一词多义问题。

考虑上下文:ELMo, BERT, XLNet。

3. 文本特征工程

在机器学习,数据挖掘,NLP领域中,对于文本,有哪些固定的基本特征?下面来总结一下。

Text Features:

  • tf-idf:词库大小|V|;
  • Word2vec/Sentence2Vec: 词向量的嵌入维数k;
  • n-gram:使用bigram,trigram等特征。对于词库V,Bi-gram可以构建从V中选出任意两个词的所有组合,(组合个数)大小为S>>|V|(每两个词看作是一个“词”,形成新的词库),对于corpus里每个句子,可以根据Bi-gram进行0-1编码(对句子单词前后两两组合,如果组合出现在Bi-gram就为1,否则0)。
  • POS词性;
  • 主题特征:可以LDA计算得到;
  • Task-specific features

基于词向量的特征工程主要包括以下几个方面:

  • 将Word2Vec或FastText词向量求和或取最大值。
  • 基于Word2Vec或FastText的词嵌入求出某个词向量的最大值和平均值,并把它们作为样本新的特征。
  • 在样本表示中融合 Bert,XLNet 等预训练模型的 embedding
  • 考虑词与词之间交互对模型的影响,对于模型来说,贡献最大的不一定是整个句子,可能是句子中的一部分,如短语、词组等等。在此基础上我们使用大小不同的滑动窗口
    (k=[2, 3, 4]),然后进行平均或取最大操作。
  • 在样本表示时,融合样本在自动编码器(AutoEncoder)模型产生的Latent features 。
  • 在样本表示时,融合样本在 LDA 模型产生的 Topic features。
  • 对于分类问题,没有考虑类别的信息,因此我们可以从训练好的模型中获取到所有类别的 embedding。可以参考论文《Joint Embedding of Words and Labels for Text Classification》提出的LEAM获取标签空间的词嵌入。计算方法:获取到所有类别的 label embedding, 与输入的 word embedding 矩阵相乘, 对其结果进行 softmax 运算,对 attention score 与输入的 word embedding 相乘的结果求平均或者取最大。

这里,联合多种特征工程来构造新的样本表示,主要通过以下三种特征工程方法:

  1. 第一:利用word-embedding的average pooling和max-pooling;
  2. 第二:利用窗口size=2,3,4对word-embedding进行卷积操作,然后再进行max/avg-pooling操作;
  3. 第三:利用类别标签的表示,增加了词语和标签之间的语义交互,以此达到对词级别语义信息更深层次的考虑。

基于人工定义的特征,可以有:

  • (原始)文本的长度;
  • 大写的个数;
  • 大写与文本长度的占比;
  • 感叹号的个数;
  • 问号个数;
  • 标点符号个数;
  • 总词数(词的个数);
  • 唯一词的个数;
  • 名词、形容词、动词的个数;
  • 唯一词与总词数的比例;
  • 名词与总词数的比例;
  • 形容词与总词数的比例;
  • 动词与总词数的比例;
  • 词的平均长度;
  • 标点符号占总长度的比例;
  • 是否存在地名;
  • 是否包含人名;

欢迎各位关注我的个人公众号:HsuDan,我将分享更多自己的学习心得、避坑总结、面试经验、AI最新技术资讯。

你可能感兴趣的:(NLP,Machine,Learning,数据挖掘,NLP,自然语言处理,特征工程)