Sentence Embedding

本文介绍了word2vec作者的一篇计算sentence vector的论文,在文本分类、文本向量表示中有着很好的应用。
需先深入了解word2vec的原理,语言结构:skip-gram,CBOW;优化方法:加速softmax (negative sampling和hierarchical softmax)

paper:

Distributed Representations of Sentences and Documents https://arxiv.org/abs/1405.4053

by mikolov (word2vec作者)

Bag-of-words

传统sentence embedding做法:Bag-of-words,即将sentence中每个vector的one-hot vector进行求和

缺点:

1. 忽略了句子的词序

比如 下面两句话

this movie is good,but I do not like it
this movie is not good, but I do like it

是完全一样的vector,在情感上却不同(注意,对一个句子中的词的词向量直接求sum或average,那么前面两句同样是一样的vector,区分不出来词序)

因此加入了 bag-of-ngrams.考虑了词序,比如 2-gram, is_good, not_good 为一个单词, not_like,do_like 也为一个单词,因此能区分上面两句。但是为了建模更大的上下文关系,选取很大的n会让训练参数过多,同时模型泛化能力会变差。

2. 维度太高+vector稀疏

sentence的维度 = unique word的个数,因此向量维度非常高。

3. 缺失语义性

每个单词都为 one-hot ,全部正交

更好的做法:

1.对句子中的word 的vector进行加权求和,来表示句子,但是同样丢失了order的信息(可以把n-gram同样求embedding之后对n-gram也进行加权?一定程度上解决order的问题)

2.构造一颗语法树,对里面word的vector进行concat

Paper中的做法:

method 1. Paragraph Vector: A distributed memory model (PV-DM)

借鉴word2vec,把文章单独赋予一个vector,每一次用文章的vector + 前k个单词的vector 拼接(文章与单词vector可以不同) or 平均(文章与单词vector必须相同?)后去预测下一个词。


PV-DM.jpg

预测结构如图,和word2vec里的CBOW类似。
如此迭代训练,可以得到文章的vector,这样对于已有的文章embedding,可以很容易的使用类似LR,Kmeans的方法做分类或聚类。

预测阶段/得到一个新文章的vector:

显然,训练阶段得到的embedding只有已经训练过的文章的vector。

那么对于一篇新的文章怎么得到他的embedding?

此时固定住已经训练好的word的vector,同样用上图的结果,加入该新文章的vector(随机初始化)进行训练(基于SGD),可以得到新的文章的vector

method 2. Paragraph vector without word ordering: Distributed bag of words (PV-DBOW)
PV-DBOW

直接拿doc的embedding去预测词

相当于对每一个doc做(doc, doc(word)) 的skip-gram,这样自然也可以训练学习到doc的embedding

结果:

通常方法1的vector已经能很好的实现任务,但在experiment中,paper中使用 method1 和method2结合的方法,即把两个vector进行concat

Experiment:


在多个任务上能取得 state-of-the art

工具

强烈推荐facebook research的文本表示与分类工具fasttext。基于C++的多线程实现,速度很快且方便,几句简单的命令行就可以实现词向量与文本分类,一千万行语料做一万分类大概在3分钟左右。代码在github上下载,make后即可使用

无监督学习:

./fasttext skip-gram 或 ./fasttext cbow
可以学习得到词向量(与google的word2vec工具一样,但是可以选择多轮迭代,同时fasttext使用了例如subword等改进来提升词向量的效果)

有监督学习:

./fasttext supervised
注意在类别数非常多(比如10000类)时,需要指定loss=ns / hs,即与word2vec一样使用negative sampling和hierarchical softmax对做多分类时的softmax进行加速。
训练完成后使用./fasttext print-sentence-vector命令即可以得到句子的向量(但是不确定是否是论文中的方法)

工作应用

  1. 获取商品标题的vector计算基于标题的相似度(cos距离)
  2. 使用标题对商品类目/产品词进行分类,效果也不错,能达到95%左右F1值的baseline
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容