特稿 >

行业洞察 >

eBay数据科学家李睿:自然语言处理在eBay的技术实践

eBay数据科学家李睿:自然语言处理在eBay的技术实践

投稿 丨 行业洞察

12212
1744

2017-08-16

eBay Inc. Tech Lead数据科学家李睿


近日,在飞马网主办的“FMI人工智能&大数据高峰论坛”上,来自eBay的数据科学家李睿博士以“NLP(自然语言处理)在eBay的技术实践”为题做了主题分享,主要涵盖的应用包含:搜索(Search)、分类器(Classifiers)、命名实体识别(Name Entity Recognition)、机器翻译(Machine Translation)等。


以下为李睿博士的演讲及Q&A实录,AI科技大本营做了不改变原意的整理:


李睿:大家好,今天给大家分享一些我在美国工作的一些经验。 


背景介绍


首先自我介绍一下,我的本科和硕士是在浙大念的,相信在座有很多我的校友们。后来到美国去念的博士,博士论文是用模式识别的方式对图像进行分类。毕业后,就到了工业界来做工程师,当时毕业的时候,模式识别专业很难找工作的,跟现在完全不一样。陆续做过智能视频监控,视频防抖动,车牌识别等工作。


后来大概在2012年的时候,大数据兴起了,我发现模式识别终于有用武之地了,于是到了eBay做大数据,到现在已经有5年多了。在eBay主要做一些分类器,这个分类器背后可以想像用了很多自然语言处理的技术,所以这也是我今天的主题。


简单给大家介绍一下eBay,我相信大家应该对这个名字不陌生。事实上,eBay和亚马逊一起,算是美国八大电商之一。它跟亚马逊最大的差别是亚马逊自营很多商品,我们像淘宝一样只是一个平台,给卖家和买家提供交换的平台,我们没有自营店,没有物流。这是1955年一个叫皮埃尔的工程师做的,他周末在家无事可做,就做这么一个网页,上去卖的第一件商品,就是家里一只坏了的激光笔,居然很快就有人买,后来迅速发展的很大规模。


事实上在1997年的时候,eBay想进入中国市场,由于各种原因,eBay自己的定位也有一些问题,最后很遗憾没有进入到中国市场。


但是在美国,eBay还是一个大家用的比较多的网站,它有三大块y业务:


  • Marketplace(类似淘宝)

  • 电影票销售

  • 分类广告


不仅在美国,eBay在20多个国家都有网站,每个国家都用自己的语言,这背后是有机器翻译的技术在支持。它现在有一亿多的活跃的用户,每一季度大概营收是在两百亿美金左右。eBay的总部在湾区,是整个湾区的高科技公司里面比较早使用大数据的,我们的很多平台都是业界比较领先的。现在就讲讲自然语言处理在eBay有哪些具体的运用场合。


NLP在eBay的应用场景


1.png

搜索


在电商上买东西,最重要的功能是搜索,而搜索是由自然语言处理作为技术支撑的。


因为一般用户搜索的时候输入的是没有结构化的一句话,或者短语,怎么样使得它结构化?由于整个关键词是有歧异的,比如说在欧洲,有人输入iphone orange,他不是要搜索一个橘色的iphone,他是要搜索一个叫orange的供应商所绑定的iphone。这里需要结合使用场合和周围的关键词,才能够准确的进行搜索,从而找到用户想要的东西。


还有搜索根分类器,在eBay新旧好坏的商品都是可以卖的。搜索关键字里面,想买一个新东西还是旧东西,怎么在商品上知道我是卖新的还是旧的,能够做正确的匹配。


另外有一些个性化的应用,每个人搜索的目的是不一样的。比如说我很喜欢看电影,系统从我的购买历史中,知道我是爱看电影的人;另外一个人爱看书,所以系统针对我的搜索结果就应该将电影排在前面,针对另一个人就应该将书的结果放在前面。


NER


2.png


NER(Name Entity Recognition)是个很重要的组成部分,这里给大家具体讲一下。比如说这是一个简单的eBay的商品,NER的作用是什么呢?目的是什么呢?首先它要尽可能把这个标题上每一个单词,都分成某一个类别,打成一个标签。


比如说New,需要把它标成一个condition;Apple是一个品牌;iPhone6s是model;16GB能够识成容量;AT&T Locked 绑定的就是手机供应商,Space Gray 是颜色,Smartphone是类别。


传统的NER的做法很简单,每一个词就是一个对象,这个词有多长,里面含有一些什么样的字母的组合,以及前后文,出现在句子的开头或者结尾,里面是几个词,有了这些特征之后,就可以训练一个Classifiers,我知道我是在手机类别下面,我可能会分7类,最早很简单,用的是逻辑回归或者线性回归。


后来,神经网络兴起之后,大家就用词向量,谷歌做出来的词向量,使得这些矢量可以代表他的语意,而且矢量还可以重新加减,发现效果得到了非常大的提升。当然了,这是用谷歌自己的词向量,不一定适用于电商,后来我们就把自己的商品作为训练数据,训练出了自己的词向量,性能得到了进一步的提升。


后来这几年,大家都做神经网络,我们也觉得要试一试看,神经网络是不是表现会更好,答案是肯定的。我们训练出了自己的神经网络,性能得到了进一步的提升。这些NER能够在各个领域对用户体验进行帮助。就像我提到的搜索,还有机器翻译,都能够极大的帮助提升用户体验。


还有一个,可以想象,我想淘宝也是一样的,实际上背后有一个很大的词典来描述不同的类别。比如说在手机类别下有哪些品牌呢,有苹果、三星、华为、小米,有什么型号呢?层出不穷的型号。这个词典是怎么产生的呢?在过去词典肯定都是人手工输入的。可是手工输入显然是效率很低,而且容易出错的一个方式,怎么样能够自动的去增加词典里面的内容?NER可以很大程度的帮助。


Classifiers


还有一大块是所谓的分类器——Classifiers。作为一个C2C平台上的新卖家,用户要卖一样东西,但不知道卖在哪个门类下,因为eBay在美国的网站上有一万六千个分类,有卖食品的,有卖日用品的,有卖电子商品的走廊。每个走廊里面有细分,到手机的走廊,有手机,有充电器,有保护膜,分的非常细。对于一个新的卖家而言,他不知道放在哪一个门类下面,如果放错了,别人就找不到他的东西。我们希望能够帮助这些C2C的用户,使他们将商品放到正确的门类下。


还有一个,虽然系统给他推荐类别了,但是有的人还是可能会点错,有的干脆是故意点错。有这样的例子,这是一个很常见的,我听说淘宝也有类似的问题。用户在手机的门类下面搜索iphone,大家都想买便宜的,会按价格排序,从低往高一排,发现全是手机壳,这些人希望通过这种方式,让别人看得到,我们要做的是防止这种情况的发生。我们希望能够把这些商品找出来,把它们放在正确的门类下,而且对卖家进行警告、惩罚。


要对商品进行分类,分成附件、主机、套装。比如说这是一个翻页笔,这是一个麦克风,比如说这是一台电脑,这是一部手机,这是称之为产品的类别,为什么要做这样的事情呢?比如说用户刚买了一个手机,是不是应该推荐他买个壳?买个保护膜?买个充电器?这是个性化的推荐,系统会把相关的商品联系在一起进行推荐,所以这是为什么我们要做分类的问题。


刚才提到的,我输入一个文学作品,到底是买书还是买电影光盘,都是一样的。还有就是所谓的评价,我们上面有卖几百万,上千万的商品,这个商品的评价好不好,对买家来说我是买华为的P9还是P10呢?要看看评价。有些说卖家出货太慢,或者说这个卖家包装的不好,或者这个卖家反馈非常的不及时,或者是有人甚至在上面说脏话,这些都不是真正的产品的评价。这也是一个分类问题,怎么样分出真正的评价,或者是关于卖家的评价,甚至是脏话,这就是一个分类问题。


大家可以想象类似的分类问题还有很多种,这里不一一赘述,我给大家举两个实战的例子。先讲类别推荐,刚才提到我们有1万6千个类别,如果说随机推荐的话,准确度是很低的。 


在过去10年,eBay一直在这个问题上不断的改进。因为最早的版本非常简单,我们虽然有1万6千个类别,类别的分布是非常不均匀的,10%的商品都是手机,手机事实上是eBay卖的最好的一个类别。可能有0.0001%是卖一些纪念品之类的,分布非常的不均匀。


当你画出柱状图之后,每一个类别有一个概率,根据这个概率把一个新的商品分到这个门类下去,这样很傻对不对?实际上有50%的准确度。后来大家发现这个办法实际是太土了,就做了一步改进。


3.png


这是常用的算法,也是NLP里面用的很多的一个算法。它的原理是当用户输入卖的产品的标题之后,它把标题做一个搜索关键词,利用搜索引擎找到跟这个产品类似的标题。比如找到一百个产品或者五百个产品,就看这些产品分属于哪些类别,匹配度最高的产品,他就认为这个产品应该列在这个类别里面。这是最简单的方法,但是效果还是不错的,从50%提高到73%的准确度。


因为我们的类别会经常改,每个季度都会有一些增加或者删减,它会自适应的适应类别的改变。但是它的坏处也是,刚才那些放错了类别的商品,会使得准确度下降。于是在2015年的时候我们就做了一些改进。


比如说一百个相似产品里面,它分属于10个类别,这10个类别,不能简单的根据哪个类别的商品多就用哪个类别,而是再加了一层逻辑,用原本属于这些类别的商品,就是一些比较大的,比较多的数据量做的一个统计语言模型,这个也是NLP的一个重要的技术,统计语言模型。做了一个模型之后,重新对这10个领域进行排序。这一步简单的做法,就使得精确度从73%提高到了81%,这是一个很简单的算法。


同样的,神经网络兴起之后,我们也想,这个技术会不会使得它有更好的性能。我们做了一些卷积神经网络,大家以为,最开始的时候主要是用卷积在图像上抽取的特征,同样的思路,也可以应用于文字上,做了之后发现效果果然不错,从81%提高到了90%的精确度。


但是,这个算法也有问题,有两个问题:


  • 第一,需要很大的宣传样本;

  • 第二,我们的类别,每个季度都在变,他变的不多,10个,8个。比如说像现在很流行的,小朋友玩的指尖陀螺,这个东西之后增加了一个类别,如果说你就用旧的分类的模型来分类的话,有可能永远也不能推荐这个类别给卖家了。


它要每次根据类别的转换,重新训练模型,需要像KNN一样有自适应的功能,这也是我这么多年的一个体会。有的时候好的性能要有代价的,训练样本变得复杂,增加了难度,训练的时间增加了,训练时间要好几天,若干星期。


我的理念是,能用简单的就不要用复杂的,尤其在工业界里面越复杂系统越容易出错,除非性能有非常大的提升值得你这么去做。


4.png


还有我刚才提到的,怎么样分辨出它是产品本身,或者是它是一个附件,还有它是不是一个套装?比如说大家看这三个商品,这个红框框出来的,他们三个都有一个共同的关键字——奥林巴斯。它们也有另外相同的关键字是型号和镜头。可是大家发现,价格差很多,有1099块的,有100多块的,有999块的,为什么呢?因为第一个是套装,它是机身加镜头,第二个是镜头本身。第三个就是裸机身,不难想象,完全不同的东西,价格是一定会有差别的。


我怎么去用我们的分类器在背后能识别出他们分别是商品本身,或者是套装,或者是附件呢?给大家具体讲一下怎么做的。


来了一个标题,我把它符号化,首先这个标题叫做Red leather case for iPhone7。符号化之后,因为对应的是一个词典,Red不在词典里面,我就把它标成星号, Leather case我把它标成A,for是相当于一个连接词,就用数字4来替代,iphone 7 是一个型号,它也是一个产品,所以用P。


有了这个之后,我就把它作为一个统计语言模型,说白了,就是算一个概率,第一个字符是星号的概率,第二个字符是A的概率,第三个字符是4的概率,第四个字符是P的概率,做了语言统计模型之后,熟悉统计语言模型的同学就应该知道,其实它要考虑上下文,不能简简单单的只看当前词或者当前符号的概率。


统计语言模型里面就有所谓的,就是我只关心前一个词,两个词的模型,给定前一个字符是A,下一个字符是4的概率。有人可能觉得这两个词不够,我要三个词,前面是星号A,下一个字是4的概率,这是最简单的模型的概念,有了这个统计模型之后我们就可以训练一个分类器了。


大家会想,为什么要做符号化这一步呢?很多统计语言模型都是用词本身,好处是什么?我同样的模型,可以用在手机的类别下,可以用在照相机的类别下,可以用在电脑的类别下,结构比较相似,符号化之后,它会用同样的模型适用于不同的情况,这就是它的好处。这就是统计语言模型在NLP分类器的应用。


刚才讲到了之前类别的Classifiers,背后用NLP的各种技术来进行支撑,事实上我相信类似的用途,类似的应用在淘宝也好,京东也好,各种电商应该也是有相似的应用,它不只是用于电商,这些分类器可以拓展到其他的领域。比如说在电子支付,或者是银行信贷这些,就有所谓的反欺诈。反欺诈其实就是一个简单的分类问题,你的用户的行为是正常行为或者是不正常行为。


机器翻译


机器翻译,也可以应用于非电商的领域,比如说前段时间碰到新华社的朋友,他就说新华社也有类似的,你要把别的国家的稿件翻译成中文的。事实上这些年,所有语言处理,文字处理背后,其实都是NLP的各种技术在支撑。所以明白了这个自然语言处理的基本技术,你就可以应用在各行各业里边。

我的内容就简单讲到这里。


Q&A环节


问题1:您好,我想问一下刚刚符号化的过程也是一个虚拟的过程还是说是人工标注的呢?


李睿:这个问题很好。你可以做人工标注,我们最开始是做的人工标注。当然你需要有一个词典,你要知道在手机类别下,有哪些关键字是能够被标注的,有些是词典里面没有的,那么就不标。所以这个词典的构造是人工构造的,当然你可以想象,用NER的技术可以做绿标注,然后人工的去调整,都是可以的。


问题2:请问你们做过实时的识别吗?可能我们计算量不是那么复杂,能快速的给出一个响应,但是我要是用深度学习,神经网络这个,要快速的对一个物品进行分类的话,可能这个效率会下降很多,不知道你们考虑做过这种场景没有?还是只是说离线的?


李睿:没有。这个当然是线上的,神经网络它训练的时候肯定是要变得更长,可能训练好几个礼拜。关键是你在对新来的商品进行分类的时候,不需要训练,你只是用这个模型做一个估计。这一步,神经网络时长是很快的,贝叶斯也很快,神经网络运算稍微复杂一点,但是也都是在几十毫秒的量级,不影响实时性的。


问题3:你好,我想问一下,刚刚你讲到上下文处理问题,能再讲一下吗?有没有一些办法或者算法?


李睿:一个办法是,因为他用条件概率,前面出现一个词,后面出现另外一个词,事先用训练样本把这些概率算出来,之后来了新的样本的时候,如果发现了同样的前后文组合,就会把这个概率算进去。


还有一种做法,这就是所谓的统计语言模型,它是一个马尔可夫链的概念,以一个词一个词为单位,就看在你的文章中出现这个词的概率有多少。新的样本中如果也出现这个词,就把这个概率用进去,他把两个词的短语或者三个词的短语做成一个单位,把这个概率也算出来,到时候,当新的样本里出现了两个字的短语或者三个字的短语的时候,就把这个概率用进去。各种方式都有,看你的训练样本的复杂度来决定。


【本文来自投稿,文中观点不代表Xtecher立场。】

打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

账号登录

重置密码

还没有账号?立即注册>

账号注册

已有账号?立即登录>注册企业会员

重置密码

返回

绑定手机