您的位置:首页 > 运维架构

[NLP论文阅读]Siamese CBOW: OptimizingWord Embeddings for Sentence Representations

2017-06-22 22:30 651 查看
论文原文: Siamese CBOW: OptimizingWord Embeddings for Sentence Representations

引言

前段时间看了一篇Siamese LSTM(孪生LSTM)用于生产句子表示的论文,这次又看到了这一篇文章,感觉也很有意思,这篇文章是借鉴了CBOW模型的想法提出了Siamese CBOW模型,并且取得了不错的效果。

主要内容

作者在文中提到,现在有很多生成句子表示的方法都是将现有的词向量进行average,那么我们可以在训练的时候就将average融入其中,尝试通过这样的方法来得到用于表示句子的词向量。

数据

Toronto Book Corpus:这是一个很庞大的语料库,包括了74,004,228句已经预处理好的句子,这些句子中含有1,057,070,918个tokens(在实验中,将词频限制在5以上,共有315,643个tokens),它们的来源是7,087本不同的书籍。这些句子前后连贯,就是完整的小说文章,仅在文章和文章之间会出现不连贯(可以忽略不计,毕竟大多数句子意思上还是连贯的)。

模型



模型会初始化一个词向量矩阵W,随着训练的进行会对W进行更新。

输入层:

以单词为单位输入。

对于语录库中的每一个si,其前一句si−1以及后一句si+1被作为正例,然后通过负采样产生n个负例。这些输入是带有标签的,设S+表示所有的正例集合,S−表示所有的负例集合,那么对于句子si和sj其概率为:



映射层:

模型将句子映射成句子向量的方法就是通过average,将句子中的前k个词的词向量进行加和平均。

这样的得到了句向量averagei(中心句),averagei−1、averagei+1以及averageneg 1到averageneg n

cosine layer:

直接计算向量之间的cos相似度作为两句句子的相似度

prediction layer:

也就是输出层,将上一层得到的相似度经过softmax归一化后得到预测的值。

损失函数



损失函数采用了交叉熵。

整个实验过程中就对词向量矩阵W进行更新。

实验结果





总结

作者开源了源代码,其所使用的数据库需要写个agreement才能获得,在获得了这两样东西之后,我尝试复现他的实验,由于实验条件所限,没有GPU可以使用,当实验运行到第三天的时候,我按捺不住邮件咨询了原作者,得到如下回复:

Well it used to take one month on a K40 GPU to get a reasonable model (and the longer the better).

于是我默默的Ctrl + c,关闭了电脑。

长叹一声,欢迎讨论~

2017年6月22日夜。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nlp 阅读
相关文章推荐