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
未完,持续更新…