原创:张春阳
这篇文章是偶然的机会在看一个 Conference 的时候听到的,当时第一感觉是 StarSpace,哇,在到处都是各种看不懂的字母堆叠的算法名称里,这名字给人的感觉眼前一亮,让我想去看看这篇文章。
一查才知道,文章也是师出有门,是 Facebook AI Research 发表在 2017 年的一篇文章,文章的名字也很有意思, StarSpace: Embed All The Things! , 要 embed 一切,目标够大!我喜欢!
一直以来,我都很喜欢工业界出的文章,因为总是可以最高效的从里面学习到值得在工作中尝试的 Idea,这篇文章也是这样,实现的方法并不是很难,但是却很好用,并且能够在不同的场景中使用,确实是 embed 一切。说了这么多,你是不是也和我一个表情了,let’s go!
这篇文章主要的时间线是这样的:
- StarSpace 是用来解决那些问题的?
- StarSpace 是怎么做的呢?
- 怎么快速的在工作中用起来 StarSpace?
StarSpace 是用来解决那些问题的?
在自然语言处理中,我们有大量的文本、文章、实体、标签等一大堆东西,我们希望能够通过向量把他们表示出来。因为如果我们能把他们都表示成在同一个空间内的向量,我们就可以对它们做相似度的判断,做分类的工作,做排序的工作了。在基础的任务之上,我们就能够使用它们来构建内容推荐,文本分类、打标签等等的系统了。这些场景在我们现实工程中的意义那就太大了,可以说现在任何一家互联网公司,都存在这些场景,但只是说大家解决的问题的领域可能不一样。
所以,我们可以说,对工业场景中的各种个样的对象做 embeding,是目前在应用场景中能够解决很多问题的基石。这种思路不仅仅在自然语言中,针对一些文字有效,其实在机器视觉的领域也是同样的,都是要想办法把实体映射到某一个向量空间中。
StarSpace 就是这样一种,把各种各样的数据投射到向量空间中的方法。数据包括但不限于:文本、文章、主题、标签、知识图谱等。
StarSpace 是怎么做的呢?
接下来,我们来看看 StarSpace 是怎么做的呢?
这里我们使用一个具体的例子,来说明 StarSpace 的工作原理。假设你现在是一家外卖公司的算法工程师,你的老板希望你能把用户对餐馆的评论进行向量化表示,从而能够实现对于用户的评论打标签的功能。老板通过其他部门收集来的数据就是一些用户的评价,以及花钱请一些“人工只能训练师”标注的标签。 标注的形式如下图所示, d i d_{i} di 表示评论, t i t_{i} ti 表示标签,并且已经标记好了哪些评论和哪些标签是有关系的。比如下图中 d 2 d_{2} d2 就和 t 1 , t 2 , t 4 t_{1},t_{2},t_{4} t1,t2,t