【NLP】3、nlp文本表示

nlp文本表示即词嵌入(word Embedding),例如“我”字用类似[0.23,0,4231,0.1223]的向量表示,称为词向量。到底怎样的词向量更能表达词的意思?就有很多种方法

一、传统表示

  • one-hot
    也称独立热词,用位置表示词语。如总共4个词,分别用1表示,如:

输入:鹦鹉黄雀在飞,分词:鹦鹉、黄雀、在、飞
最终得到:
鹦鹉[1, 0, 0, 0]
黄雀[0, 0, 1, 0]
在[0, 1, 0, 0]
飞[0, 0, 0, 1]

· 优点:简单易用
· 缺点:1、浪费内存,即维度灾难
    如总共10000个词,则每个词[0,1,0,0,…,0] (总共9999个0和1个1)
    2、丢失相关语义信息
    如鹦鹉和黄雀都是鸟类,计算相似度为0

  • Bag of Words
    建立词典,统计文本中每个词出现的次数,用次数表示词语。如:

输入文本:
文本1:“鹦鹉和黄雀在飞,鹦鹉飞更高”
文本2:“鹦鹉比黄雀更快”   
分词、建立词典:{“鹦鹉”:0,“和”:1,“黄雀”:2,“在”:3,“飞”:4,“更”:5,“高”:6,
         “比”,:7,“快”:8}
最终得到:
文本1:[2,1,1,1,2,1,1,0,0] ("鹦鹉"出现2次, "和"1次…)
文本2:[1,0,1,0,0,1,0,1,1]

  • N-Grams
    把文本中以N个词切分(其中N自己设定),可用于求字词出现的概率,如:

输入文本:鹦鹉和黄雀在飞 ,设定N
最终得到:
如N=1则“鹦”、“鹉”、“和”、“黄”、“雀”、“在”、“飞”
如N=2则“鹦鹉”、“鹉和”、“和黄”、“黄雀”、“雀在”、“在飞"
如N=3则"鹦鹉和"、“鹉和黄”、“和黄雀”、“黄雀在”、“雀在飞”
如此…
 
拿N=1来说,词典有7个词,求概率
P(鹦,鹉,和,黄,雀,在,飞)=P(鹦)*P(鹉|鹦)*P(和|鹉)*P(黄|和)*P(雀|黄)*P(在|黄)*P(飞|在)
P(鹦) = "鹦"出现的次数 / 词典总次数
P(鹉|鹦) = "鹉"出现的次数 / "鹦"出现的次数

  • TF-IDF
    TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率),实现上是TF*IDF,一个词在一个文本中出现的次数则该词的TF越大(词在文本中很重要),该词在多个文本出现的次数越少则IDF越大(词在多个文本中辨识度高)
  • Co-currence matrix
    指两个单词在一个窗口内共同出现的次数,窗口大小自定义。如:

鹦鹉很美,黄雀很小。
窗口大小:2
窗口1:鹦鹉为中心词,左右2个词为背景词:鹦鹉+很+美,得到鹦鹉-很、鹦鹉-美
窗口2:很为中心词,左右2个词为背景词:鹦鹉+很+美+黄雀,得到很-鹦鹉、很-美…
窗口3:美为中心词,左右2个词为背景词:鹦鹉+很+美+黄雀+很,得到美-鹦鹉…
窗口4:黄雀为中心词,左右2个词为北京慈:很+美+黄雀+很+小,得到黄雀-很…

如下:为窗口1得到的结果,后面则只需在相应位置加上1
|  |鹦鹉|很 |美|小|
|鹦鹉| 0  | 1 | 1 | 0 |
|很 | 0  | 0 | 0 | 0 |
|美 | 0  | 0 | 0 | 0 |
|小 | 0  | 0 | 0 | 0 |

二、分布式表示

把文本从高维嵌入到低维,即不像传统表示中基于位置、次数的高维表示,而是用更低维表示,如10000个词的词典用传统表示每个词是10000维,而分布式可以做到每个词128维(此维度可自定义)。

  • NNLM
  • word2vec
    计算上下文信息的之间一起出现的概率,把它表示为n维向量,其中n自己设定。
    · 实现方法1:cbow(continue bag of word) 上下文预测某个词

文本:鹦鹉和黄雀在飞,分词:鹦鹉、和、黄雀、在、飞
目标词:黄雀
输入:
鹦鹉 [1,0,0,0,0] (5,1) *w(128,5)= (128,1) |
和 [0,1,0,0,0] (5,1) *w(128,5)= (128,1) |----
在 [0,0,0,1,0] (5,1) *w(128,5)= (128,1) |---- 相加/4 =(128,1) *W(5,128)=(5,1)
飞 [0,0,0,0,0] (5,1) *w(128,5)= (128,1) |
输出结果:
softmax(5,1)=[0,41, 0,29, 0,1, 0.05, 0.15],表示4个概率,取最大,则输出"鹦鹉"
如此…
一直训练最大化w和W输出黄雀的概率,然后换目标词。
最后每个词都有属于自己的w(128,1),而越接近目标词如"在",“在"的w会使后面若出现"在”,输出黄雀的概率比较大,这个w就是我们想要的词向量(其中w和W中的128就是n,可自定义)。

· 实现方法2:skip-gram 某个词预测上下文

与cbow相反

优点:低维表示,上下文联系。
缺点:1、虽然最终表现是低维的,但在训练中,仍然是需要输入词典如10000个词
     的词典进去训练
   2、虽然是上下文联系,但是很短的上下文。它实现中会有一个窗口移动,如
     例子中把句子加长,“美丽的鹦鹉和漂亮的黄雀在广阔的天空上飞”,
     窗口1是"魅力的鹦鹉和漂亮",先训练这个窗口,然后再下一个窗口"鹦鹉
     和漂亮的黄雀",如此…

  • Glove
    Global Vectors for Word Representation,针对word2vec,考虑了全局词频统计。

构建共现矩阵(Co-ocurrence Matrix)
构建词向量和共现矩阵之间的近似关系
训练如此…

优点:比N-GRAM和TF-IDF都要进步一点。单词不再是独立了,考虑了附近的上下文共现次数。
tip:Glove只需理解考虑了全局词频的思想

  • ELMO
  • Bert

未完,持续更新…


你可能感兴趣的:(NLP)