nlp词向量学习笔记

1.自然语言处理技术面临的挑战:

如何让机器像人一样,能够准确理解和使用自然语言?这是当前自然语言处理领域面临的最大挑战。

(1)自然语言数量多、形态各异,理解自然语言对人来说本身也是一件复杂的事情

(2)情感倾向问题,人类同词语不同情感的表达以及不同语境中的应用使得语言处理起来变得困难。

(3)歧义性问题。在不同的上下文中,相同的单词可以具有不同的含义,这种问题我们称之为歧义性问题。

(4)对话/篇章等长文本处理问题。在处理长文本(如一篇新闻报道,一段多人对话,甚至于一篇长篇小说)时,需要经常处理各种省略、指代、话题转折和切换等语言学现象,给机器理解自然语言带来了挑战。

2.词向量。

自然语言单词是离散信号,通常情况下,我们可以维护一个查询表。表中每一行都存储了一个特定词语的向量值,每一列的第一个元素都代表着这个词本身,以便于我们进行词和向量的映射(如“我”对应的向量值为 [0.3,0.5,0.7,0.9,-0.2,0.03] )。

给定任何一个或者一组单词,我们都可以通过查询这个excel,实现把单词转换为向量的目的,这个查询和替换过程称之为Embedding Lookup。

3.让向量具有语义信息

(1)在CBOW中,先在句子中选定一个中心词,并把其它词作为这个中心词的上下文。

在学习过程中,使用上下文的词向量推理中心词,这样中心词的语义就被传递到上下文的词向量中,如“Spiked → pineapple”,从而达到学习语义信息的目的。

(2)在Skip-gram中,同样先选定一个中心词,并把其他词作为这个中心词的上下文。不同的是,在学习过程中,使用中心词的词向量去推理上下文,这样上下文定义的语义被传入中心词的表示中,如“pineapple → Spiked”, 从而达到学习语义信息的目的。

总结:CBOW比Skip-gram训练速度快,训练过程更加稳定,原因是CBOW使用上下文average的方式进行训练,每个训练step会见到更多样本。而在生僻字(出现频率低的字)处理上,skip-gram比CBOW效果更好。

4.CBOW和Skip-gram的算法实现

CBOW

在实际操作中,使用一个滑动窗口(一般情况下,长度是奇数),从左到右开始扫描当前句子。每个扫描出来的片段被当成一个小句子,每个小句子中间的词被认为是中心词,其余的词被认为是这个中心词的上下文.

Skip-gram的理想实现

在理想情况下,我们可以使用一个简单的方式实现skip-gram。即把需要推理的每个目标词都当成一个标签,把skip-gram当成一个大规模分类任务进行网络构建.在实际操作中,使用一个滑动窗口(一般情况下,长度是奇数),从左到右开始扫描当前句子。每个扫描出来的片段被当成一个小句子,每个小句子中间的词被认为是中心词,其余的词被认为是这个中心词的上下文。

  1. 声明一个形状为[vocab_size, embedding_size]的张量,作为需要学习的词向量,记为W0W_0W0​。对于给定的输入VVV,使用向量乘法,将VVV乘以W0W_0W0​,这样就得到了一个形状为[batch_size, embedding_size]的张量,记为H=V×W0H=V×W_0H=V×W0​。这个张量HHH就可以看成是经过词向量查表后的结果。
  2. 声明另外一个需要学习的参数W1W_1W1​,这个参数的形状为[embedding_size, vocab_size]。将上一步得到的HHH去乘以W1W_1W1​,得到一个新的tensor O=H×W1O=H×W_1O=H×W1​,此时的OOO是一个形状为[batch_size, vocab_size]的tensor,表示当前这个mini-batch中的每个中心词预测出的目标词的概率。
  3. 使用softmax函数对mini-batch中每个中心词的预测结果做归一化,即可完成网络构建。

你可能感兴趣的:(学习)