nlp中的文本表示

nlp中的文本表示分离散表示和分布表示,离散表示有one-hot、bow、ngram,分布表示有共现矩阵、word2vec、glove等

one-hot

  • 对词进行编码
  • 在一个语料库中,给每个字/词编码一个索引,根据索引进行one-hot表示。
  • 假设预料库如下:
John likes to watch movies. Mary likes too.
John also likes to watch football games.
  • 对出现的单子进行索引编码:
{"John": 1, "likes": 2, "to": 3, "watch": 4, "movies": 5, "also":6, "football": 7, "games": 8, "Mary": 9, "too": 10}
  • 每个单子都可以用one-hot表示
John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
...
  • 缺点
1. 词向量长度是词典长度,高维稀疏矩阵,浪费计算和存储资源
2. 不同词的向量表示互相正交,无法表达单词与单词之间的相似程度
3. 词向量只能反映某个词是否在句中出现,无法衡量不同词的重要程度

bag of words

  • 对文本进行编码
  • 一段文本(比如一个句子或是一个文档)可以用一个装着这些词的袋子来表示,这种表示方式不考虑文法以及词的顺序

基础版本

  • 在词袋模型中不考虑语序和词法的信息,每个单词都是相互独立的,将词语放入一个“袋子”里,统计每个单词出现的频率
  • 一个计数编码的例子
John likes to watch movies. Mary likes too.  -->> [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
John also likes to watch football games.     -->> [1, 1, 1, 1, 0, 1, 1, 1, 0, 0]
  • 缺点
1. 忽略词的位置信息,词的位置不一样语义会有很大的差别(如 “猫爱吃老鼠” 和 “老鼠爱吃猫” 的编码一样)
2. 但仅仅通过“出现次数”无法区分常用词(如:“我”、“是”、“的”等)和关键词(如:“自然语言处理”、“NLP ”等)在文本中的重要程度

升级版本

  • 为了解决基础版本词袋模型无法区分常用词(如:“是”、“的”等)和专有名词(如:“自然语言处理”、“NLP ”等)对文本的重要性的问题,我们尝试用tf-idf算法
  • 缺点
1. 不能反映词的位置信息,在对关键词进行提取时,词的位置信息(如:标题、句首、句尾的词应该赋予更高的权重)
2. IDF是一种试图抑制噪声的加权,本身倾向于文本中频率比较小的词,这使得IDF的精度不高
3. TF-IDF严重依赖于语料库(尤其在训练同类语料库时,往往会掩盖一些同类型的关键词;如:在进行TF-IDF训练时,语料库中的娱乐新闻较多,则与娱乐相关的关键词的权重就会偏低),因此需要选取质量高的语料库进行训练

共现矩阵

bi-gram和n-gram(离散表示)

word2vec

词向量总结

ELMo、GPT、BERT之间区别,与其它语言模型的区别,待更新!!!

posted @ 2021-02-25 23:45  baishengguan  阅读(180)  评论(0编辑  收藏  举报