深度学习

理解和使用深度学习网络

使用深度学习分类的内容

这篇文章来自Anshul Varma MathWorks开发商,谁会谈论一个项目,MATLAB用于实际生产应用:应用深度学习MATLAB的答案进行分类。

在2019年的春天,我有一个严重的问题。我刚刚把个人的任务MATLAB的答案新的分类帮助中心集成不同的文档和社区资源为单个,categorical-based设计。基于主题的类别帮助组织内容,让你很容易地找到信息。

让我给你举个例子:这是一个答案与方差分析统计分析:

我把它放在下的方差分析的范畴人工智能,数据科学和统计>统计和机器学习工具箱>方差分析>方差分析和协方差。足够简单,对吗?

这不会这么难,除了一件事:我有超过300000 MATLAB答案需要开槽为超过3500类别。

有超过40000页的MathWorks产品文档,散布在90 +产品MathWorks提供。下载188bet金宝搏这些文档页面被组织成超过3500类别,使主题和参考页面容易找到和解析。你可能使用这些类别,在左侧导航,当浏览一个文档页面:

帮助中心建设需要超过300000的集成MATLAB答案,按类别调整他们现有的文档页面。

显然,手动分配类别300000 +答案不是一个现实的解决方案:

  • 我如何通过成千上万的答案在很短的时间吗?
  • 我怎么得到帮助从内容专家知识在整个类别分类?
  • 我怎么手动分类每周数以千计的新创建的答案,使它成为一个可伸缩的过程?

我需要很多的帮助。对我来说幸运的是,我需要的帮助是正确的:深度学习工具箱和文本分析工具箱。与我的团队合作,我们拟定了一项计划,完成这项杰出成就在很短的时间内自动分类成千上万的答案。并且它成功了!它比我们可以希望效果更好。

让我告诉你我们是如何做到的故事……

深度学习的分类

我选择了MATLAB与深度学习和文本分析工具箱建立我的解决方案,因为以下两个原因:

有三个步骤解决经典监督式学习文本分类问题,我们要分类文本内容最相关的类:

  1. 您想要使用的数据准备培训
  2. 使用训练数据训练模型
  3. 验证训练模型

步骤1:准备培训的数据

我用下列MathWorks资源内容分为类别(手动策划)建立模型:

我用文本分析工具箱为数据准备。的第一部分文本数据准备所需管道主要是数据清理,我们做事情像解码HTML实体字符,将文档转换成小写,擦除HTTP和HTTPS url,删除HTML和XML标记,最后从文本中删除所有电子邮件地址:

rawTextArray = decodeHTMLEntities (rawTextArray);%将HTML和XML实体转换为字符rawTextArray =低(rawTextArray);%将文档转换为小写rawTextArray = eraseURLs (rawTextArray);%擦掉HTTP和HTTPS url从文本rawTextArray = eraseTags (rawTextArray);%从文本删除HTML和XML标签rawTextArray = regexprep (rawTextArray’s [^ @ \] * @ ^ @ \ s * \。^ @ \ s *’,”);%删除电子邮件地址

数据准备的下一步需要清洁和保护有价值的信息内容,可以很容易地失去了如果我们执行文本分析,删除所有标点符号。删除标点符号将消除完全“c++”这样的术语。我们保留编程语言特定的术语和一些MathWorks数据特有的术语在这部分的文本数据准备管道。摘自一个例子的这部分管道如下所示:

%去除所有标点符号之前保存的编程语言rawTextArray =取代(rawTextArray、“c++”、“cplusplus”);rawTextArray =取代(rawTextArray, c#, csharp);rawTextArray =取代(rawTextArray“net”,“dotnet”);%做更多定制保护条款具体MathWorks数据……rawTextArray = regexprep (rawTextArray ' [r \ n \] + ', ' ');%擦掉\ n \ r从文本rawTextArray = erasePunctuation (rawTextArray);%从文本删除标点符号

过去分词文本数据准备管道的一部分,分析文本数据。我们标记文件,删除停止的话,删除短和长的话说,最后正常的话:

preprocessed_tokens = tokenizedDocument (rawTextArray,“语言”,“en”);%的标记化的文档进行文本分析preprocessed_tokens = removeWords (preprocessed_tokens stopWords);%从文档删除选中的单词preprocessed_tokens = removeShortWords (preprocessed_tokens 2);%从文档删除短词preprocessed_tokens = removeLongWords (preprocessed_tokens 15);%从文档删除长单词output_analyzed_text = normalizeWords (preprocessed_tokens);%茎或lemmatize的话

一旦所有文件预处理,我们可以使用它们来创建一个深度学习文本分类器。

步骤2:使用训练数据训练模型

我指的是使用深度学习分类文本数据示例创建一个深度学习LSTM文本分类器。我使用了预处理和分析数据训练模型。

准备数据进行训练、测试和验证:

%删除表的行与空文件。idxEmpty = strlength (data.preprocessed_text) = = 0;:数据(idxEmpty) = [];%将数据划分为类,将这些标签转换为分类。数据。id =分类(data.id);%找到类包含少于十观测。idxLowCounts = classCounts < 10;infrequentClasses =一会(idxLowCounts);%从数据中删除这些罕见的类。使用removecats删除未使用的类别分类数据。idxInfrequent = ismember(数据。id, infrequentClasses);:数据(idxInfrequent) = [];数据。id = removecats (data.id);%数据分割成一个培训分区和伸出的分区进行验证和测试。本量利= cvpartition(数据。id,“坚持”,0.1);dataTrain =数据(训练(cvp):);dataHeldOut =数据(测试(cvp):);本量利= cvpartition (dataHeldOut。id,“坚持”,0.5);dataValidation = dataHeldOut(培训(cvp):);人数(= dataHeldOut(测试(cvp):);%提取预处理文本数据和标签的分区表。documentsTrain = tokenizedDocument (dataTrain。preprocessed_text,“语言”,“en”);documentsValidation = tokenizedDocument (dataValidation。preprocessed_text,“语言”,“en”);documentsTest = tokenizedDocument(人数(。preprocessed_text,“语言”,“en”);YTrain = dataTrain.id;YValidation = dataValidation.id;欧美= dataTest.id;

训练数据摘录如下所示:

%视图最初几个预处理培训文档。documentsTrain (1:5) 5×1 tokenizedDocument: 26日令牌:中国火神经元模型仿真软件中国火神经元模型仿真软件shufa金宝appn仿真软件hdl编码仿真软件模型中国火神经元网络模型仿真软件中国火神经元模型33令牌:音频水印selvakarna音频水印selvakarna音频过程热带雨林提取福尔曼frequenc提取过程波热带雨林他们matlab仿真软件matlab定点dsp系统设计编码器信号处理音频水印selvakarna音频水印selvakarna 45令牌:仿真软件initi schedul仿真软件initi sequenti块execut exampl enabl execut initi schedul sequenti触发坎詹(模型文件包含simpl exampl基地enabl子系统块显示execut模型块initi execut块initi sequenti schedul execut不同子系统仿真软件initi sequenti块execut exampl 10令牌:权力交接限制同时kathir韦尔模型同时纸一起19令牌:matlab图形仿真软件techniqu matlab图形仿真软件图形仿真软件一起住脚本迈克garriti techniqu matlab图形仿真软件一起

生成一个词云。

%可视化培训文本数据使用一个词云图wordcloud (documentsTrain);标题(“训练数据”)

设置文档序列。

%创建一个词编码。内附= wordEncoding (documentsTrain);%将文档转换为数字序列使用doc2sequence指数。seq_length = 800;XTrain = doc2sequence (enc documentsTrain,“长度”,seq_length);XValidation = doc2sequence (enc documentsValidation,“长度”,seq_length);

准备训练选项,配置LSTM网络层,并执行培训。

%创建和火车LSTM网络%设置培训配置。inputSize = 1;embeddingDimension = 100;numHiddenUnits = enc.NumWords;hiddenSize = 180;numClasses =元素个数(类别(YTrain));层= […sequenceInputLayer (inputSize) wordEmbeddingLayer (embeddingDimension numHiddenUnits) lstmLayer (hiddenSize OutputMode”,“最后”)dropoutLayer (0.4) fullyConnectedLayer (numClasses) softmaxLayer classificationLayer];选择= trainingOptions(“亚当”,…“LearnRateSchedule”、“分段”,…“LearnRateDropFactor”, 0.1,… 'LearnRateDropPeriod', 20, ... 'MaxEpochs', 25, ... 'GradientThreshold', 1, ... 'InitialLearnRate', 0.01, ... 'ValidationData', {XValidation, YValidation}, ... 'Plots', 'training-progress', ... 'Verbose', true, ... 'shuffle', 'every-epoch');%火车LSTM网络使用trainNetwork函数。网= trainNetwork (XTrain、YTrain层,选择);

第三步:验证训练模型

我们用客观和主观验证来验证该模型按预期工作。

目的验证

测试的准确性LSTM网络使用测试文档

% %测试LSTM网络%测试文档转换为序列使用doc2sequence相同的选项当创建的训练序列。XTest = doc2sequence (enc documentsTest,“长度”,seq_length);%使用训练LSTM网络测试文档进行分类。[YPred, PBScore] =(净,XTest)进行分类;%提取3大预言。类= net.Layers . class(结束);classes_matrix = repmat(类、大小(类的);%’创建矩阵来表示所有的类[~,我]=排序(PBScore 2“下降”);Top3_YPred = classes_matrix(我(1:3));%计算模型的准确性。model_accuracy = nnz (table2array (rowfun (@ismember、表(欧美,Top3_YPred)))) /元素个数(YPred);

我们模型的分类预测精度约为70%。我们计算的精度评估如果测试文档的类别匹配任何顶级的3类预测的模型。我们选择这种方法来计算精度自类别数据分层。分类是非常主观的,因为答案可以住在多个类别。在大多数情况下,分类不黑白由于类别和父子关系的本质。我们不能完全依赖的客观分析精度计算进行验证。所以,我们做主观验证如下所述。

主观验证

我们招募员工的帮助来测试我们的预测的准确性。我们进行许多宴会,诱人的员工提供披萨,巧克力,和奖品,以确保参与将统计学意义。

测试的预测
  1. 首先,我们建立了一个可能使用的常用短语列表由客户在我们的MATLAB中央社区。这些来自搜索短语在客户访问。
  2. 然后,我们邀请员工熟悉我们的产品,我们的客户基础,或人工智能是如何工作的,一般来说,参加一个聚会。我们要求他们使用我们的内部分类工具搜索内容在一个特定的主题空间。然后,我们要求他们检查每个结果的建议分类,分类提出主观判断。我们要求他们捕捉:
    1. 他们在寻找什么。
    2. 得分总体预测作为“好建议”的1或0“可怜”的建议。
    3. 什么类别,一般来说,他们检查。
    4. 什么他们想要分享作为一个观察。
测试的分类
  1. 我们组装使用的类别列表和社区的数量问题,auto-categorized了这个话题。
  2. 然后,我们邀请技术支持人员熟悉我们的产品参加另一个聚会金宝app。这一次,我们要求他们去他们的网站并导航到一个类别有技术专长。他们看顶部10 - 20的答案显示的类别,并评估结果是好的,坏的,或不清楚。他们捕获:
    1. 他们检查了什么类别。
    2. 1分(好),0(贫穷),或未知。
    3. 具体原因他们选择他们选择的分数。
    4. 建议适用的答案,如果已知类别的,如果,他们说这是糟糕的分类。
在执行主观评估之后,然后我们进行了数值分析在数据捕获和识别:
  • 我们在分类感到自信的地方。
  • 该算法可以改进的地方。
  • 我们需要额外的测试领域。

我们使用客观和主观指标和分析数据生成验证评估分类的质量。总的来说,我们是满意的结果。

That's it! We have created a text classification model using MATLAB Deep Learning and Text Analytics Toolboxes that can automatically assign categories to more than 300,000 Answers. Using MATLAB, we can automatically categorize the in-flow of new and updated Answers daily as well. It was a unique solution that helped save us a lot of time and manual effort. It made our processes scalable and manageable.

让我结束这篇博客分享一些有趣的挑战在生产环境中使用人工智能技术,专业技巧,与你和资源:

有趣的在生产环境中使用人工智能技术的挑战
  • 刷新模型经常以防止腐烂:MathWorks文档和类别分类法是每6个月更新一次MATLAB作为新版本的一部分。我们与更新的训练数据训练模型和分类标签。更新后的模型部署到生产,然后内容分为正确的类别。

  • 确定需要我们关注的类别最优的用户体验:有类别,我们想提高我们的模型更好的预测结果。我们是这样分类的确定的方法之一是通过训练数据集。我们发现缺乏分类手册培训输入提供的一个人。这种类别的分类质量最优。我们正在研究这些数据每6个月当我们重新训练模型。我们把内容专家的帮助在我们组织协助管理。这个活动提供了反馈模型对未来改进的分类。

  • 开发自动测量和相关性测试质量:我们正在开发方法来自动化模型的验证和分类的过程。我们想象一个进程来执行相关性测试套件自动分析指标和通知我们是否有异常。自动化将帮助我们节省开发时间在数据刷新和模型升级。

专业技巧
  • 我一般建议当你想使用人工智能在生产解决问题首先是容易理解和调试,然后发展到一个更复杂的过程(如使用神经网络)如果它得到更好的结果。

  • 原型,原型,原型!不要害怕失败。人工智能可以复杂。将人工智能应用于解决复杂问题更难。你需要让你的手在粘土有时理解如果AI技术可以或不能为你工作。

  • 真相你的数据可能会让你大吃一惊。利用人工智能技术对你的数据往往揭示了一些有趣的模式。模式可以帮助确定有趣的用例/你可能没有想到的问题。

参考资料来了解更多

  • 创建简单的文本分类模型是一个很好的例子来开始使用一个简单的文本分类模型。这是一个简单的文本分类器使用bag-of-words模型。
  • 使用深度学习分类文本数据是另一个很好的例子使用LSTM网络文本数据进行分类。它是一个复杂的文本分类器,但可以返回一些很棒的结果甚至对本身的问题。
|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。