在我的生活中,我73%的时间都在考虑网络性能——在低规格手机上达到60FPS,有序加载资源,离线缓存任何可以缓存的东西。还有一些其他的优化。最近,我发现我对网络性能的定义可能过于狭隘,从用户的角度来看,这些只是网络性能中的一些小插曲。于是我打开了我常去的网站,尝试了用户每一次可能的操作,并记录了操作所花费的时间。(我们需要对时间轴工具进行一些用户操作)之后,我找到了提高性能的可能解决方案。下面文章的内容着重介绍具体网站的具体操作步骤。但我认为这个解决方案(好吧,是的!它是机器学习)可以应用于许多其他类型的网站。问题是,我怎样才能节省时间?本网站供卖家出售无用的东西,买家通过购买这些东西来购买一些有价值的东西。卖家要在网站上卖东西,首先要选择类目,然后选择相应的模板,然后填写详情,预览,最后发布。然而第一步-选择类别-让我走了弯路首先,有674个类别,我不知道我的旧皮划艇属于哪个类别(SteveKrug说得好,不要让用户思考)在第二个这一步,即使我知道商品所属的类别——子类别——子子类别,我也至少需要12秒。如果我告诉您我可以将您的页面加载时间缩短12秒,您会认为我疯了。那么为什么不将这12秒保存在其他地方。正如JuliusCaesar所说,时间是宝贵的。我一直相信用户无知是福。如果我把商品的标题、描述、价格放到机器学习模型中,系统应该可以自动计算出商品所属的类别。这样可以节省子用户选择类别的时间。他们可以愉快地花时间在reddit上寻找DIY双层床。机器学习——你不应该逃避它,你必须拥抱它。一开始,我对机器学习一无所知。我是在比赛AI之后,阿尔法狗打败人类围棋顶尖选手后才知道的。所以我要开始理解了,后面的步骤也用不了一个小时。谷歌搜索“机器学习”并看到大量关于机器学习的文章找到了亚马逊的机器学习相关服务我开始意识到我不需要对机器学习了解太多嗯嗯。太开心了(作者注:因为没有系统研究过机器学习,所以文章中的一些专业术语可能会被乱用。。。)一个简单的实现过程亚马逊发布了他的机器学习文档。如果你对这篇文档不是很感兴趣,打算花5个小时看完,那就看看我写的一些总结吧。整理如下:获取一些CSV数据文件,每一行是一个产品项(^_^我的kayak),列名分别是title、description、price、category。将数据发送到Amazon的AWSS3存储桶,并使用这些数据来训练机器。这样,这个云端小机器人就可以通过商品的标题、描述和价格来预测它的分类。在前端页面,写一些代码获取用户输入的title/description/price,并发送给云端机器人。经过计算,它可以预测产品的类别。实战模拟下面是我写的一个表格,模拟了卖家发布信息的几个关键流程。下面的结果肯定会保持您对机器学习的兴趣。你只需要相信我,建议的课程是通过深度学习模拟预测的。卖个冰箱再试试卖个水族箱:这个云机器人居然能认水族箱!看到这个结果,我手舞足蹈,是不是很棒?(偷偷告诉你我是如何实现的:React,Redux,JQuery,Mox,RxJs,BlueBird,Bootstrap,Sass,Compass,NodeJs,Express,Loadsh。项目使用webpack打包,最终生成文件1M左右)嗯。没有BB了。开始说正经的。最开始是为了机器学习获取数据。我也想打破我的头。我需要大约10K条数据。这些数据后来在当地一家交易网站上被发现。在查看了URL和DOM结构后,我使用GoogleScraper插件提取了一些数据。导出为CSV文件。我在这些数据上花了大约四个小时。整个项目时间的近一半。整理好数据后,上传到AmazonS3,配置机器学习的参数,建立数据模型。整个学习的CPU时间只有3分钟。界面上还有实时预测功能,所以我打算用一些参数来测试一下。嗯。它非常容易使用。为了不在浏览器中暴露我的AmazonAPI,我将API放在了Node服务器上。后台代码(Node)使用起来非常简单。接口参数为modelId,服务端返回预测:constAWS=require('aws-sdk');constmachineLearning=newAWS.MachineLearning();constparams={MLModelId:'some-model-id',PredictEndpoint:'some-endpoint',Record:{},};machineLearning.predict(params,(err,prediction)=>{//wehaveaprediction!});这里的参数都是大写字母开头的,本来是要改的。想了想,算了。记录,是一个JSON对象。属性值是(title,description,price)我不想只提供一些代码片段。为了帮助大家更好的理解。我已经粘贴了所有服务器端代码。server.js:constexpress=require('express');constbodyParser=require('body-parser');constAWS=require('aws-sdk');constapp=express();app.use(express.static('public'));app.use(bodyParser.json());AWS.config.loadFromPath('./private/aws-credentials.json');constmachineLearning=newAWS.MachineLearning();app.post('/预测',(req,res)=>{constparams={MLModelId:'my-model-id',PredictEndpoint:'https://realtime.machinelearning.us-east-1.amazonaws.com',Record:req.body,};machineLearning.predict(params,(err,data)=>{if(err){console.log(err);}else{res.json({category:data.Prediction.predictedLabel});}});});app.listen(8080);aws-credentials.json:{"accessKeyId":"my-access-key-id","secretAccessKey":"shhh-secret-squirrel","re??gion":"us-east-1"}(ignore/privatefolderin.gitignore)以上是所有代码隐藏。前端代码形式的代码功能比较简单。监听几个输入框的blur事件,读取表单中的字段值,POST到API端,将API端返回的预测显示在页面上(function(){consttitleEl=document.getElementById('title-input');constdescriptionEl=document.getElementById('desc-input');constpriceEl=document.getElementById('price-input');constcatSuggestionsEl=document.getElementById('cat-suggestions');constcatSuggestionEl=document.getElementById('suggested-category');functionpredictCategory(){constfetchOptions={method:'POST',headers:{'Content-Type':'application/json',},body:JSON.stringify({title:titleEl.value,描述:descriptionEl.value,price:priceEl.value,})};fetch('/predict',fetchOptions).then(response=>response.json()).then(prediction=>{catSuggestionEl.textContent=prediction.category;catSuggestionsEl.style.display='block';});}document.querySelectorAll('.user-input').forEach(el=>{el.addEventListener('blur',predictCategory);});})();以上就是所有的前端代码了。啊啊啊……云服务还是要收费的。别把帽子收起来,魔术表演哪有免费的。我上面使用的模型数据(10K行/4列)有6.3MB。当云等待接受请求时,它消耗了6.3MB的内存。这些资源的成本是每小时0.0001。或者每年8。我买手套的钱比这个多。每次做出预测,费用为0.0001。所以不要随便调用这个API。虽然目前不仅亚马逊提供这项服务,但我还没有找到其他两大厂商的价目表。谷歌有TensorFlow,我看了入门教程就跑了。微软有机器学习产品,但IE6仍然让我有点担心(也许很快,亚马逊和微软之间就会有一场大战)。有些摘要可能让我有点意外(我记得意识到“新闻”是“新”的复数形式),但我认为这非常令人惊讶。它允许像你我这样的普通人(他们对开发的影响较小)深入研究机器学习,可能会为这些用户带来重大改进。下一步在哪里?上面的例子显然是人为的,我承认,我遗漏了一些主题。如果可以的话,我应该把所有的问题都列出来,但是自己动手并自己发现问题会很有趣。所以继续吧,如果你取得了一些成功,我很乐意在评论中看到它们。
