nlp文本表示即词嵌入(word Embedding),例如“我”字用类似[0.23,0,4231,0.1223]的向量表示,称为词向量。到底怎样的词向量更能表达词的意思?就有很多种方法
输入:鹦鹉黄雀在飞,分词:鹦鹉、黄雀、在、飞
最终得到:
鹦鹉[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
输入文本:
文本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
最终得到:
如N=1则“鹦”、“鹉”、“和”、“黄”、“雀”、“在”、“飞”
如N=2则“鹦鹉”、“鹉和”、“和黄”、“黄雀”、“雀在”、“在飞"
如N=3则"鹦鹉和"、“鹉和黄”、“和黄雀”、“黄雀在”、“雀在飞”
如此…
拿N=1来说,词典有7个词,求概率
P(鹦,鹉,和,黄,雀,在,飞)=P(鹦)*P(鹉|鹦)*P(和|鹉)*P(黄|和)*P(雀|黄)*P(在|黄)*P(飞|在)
P(鹦) = "鹦"出现的次数 / 词典总次数
P(鹉|鹦) = "鹉"出现的次数 / "鹦"出现的次数
鹦鹉很美,黄雀很小。
窗口大小: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维(此维度可自定义)。
文本:鹦鹉和黄雀在飞,分词:鹦鹉、和、黄雀、在、飞
目标词:黄雀
输入:
鹦鹉 [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是"魅力的鹦鹉和漂亮",先训练这个窗口,然后再下一个窗口"鹦鹉
和漂亮的黄雀",如此…
构建共现矩阵(Co-ocurrence Matrix)
构建词向量和共现矩阵之间的近似关系
训练如此…
优点:比N-GRAM和TF-IDF都要进步一点。单词不再是独立了,考虑了附近的上下文共现次数。
tip:Glove只需理解考虑了全局词频的思想
未完,持续更新…