ML.NET Cookbook:(18)如何在文本数据上训练模型?
生活随笔
收集整理的這篇文章主要介紹了
ML.NET Cookbook:(18)如何在文本数据上训练模型?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一般來說,所有的ML.NET學習器都希望這些特征是一個浮點向量。因此,如果您的一些數據不是一個float,您需要將其轉換為float。
如果我們想學習文本數據,我們需要從文本中“提取特征”。NLP(自然語言處理)的整個研究領域都在處理這個問題。在ML.NET中,我們提供了一些文本特征提取的基本機制:
文本規范化(刪除標點符號、變音符號、切換為小寫等)
基于分隔符的標記化。
停用詞刪除。
Ngram和skip-gram提取。
TF-IDF重縮放。
詞袋轉換。
NET提供了一個名為TextFeaturizer的“一站式”操作,它將上述步驟作為一個大的“文本特征化”來運行。我們已經在文本數據集上對它進行了廣泛的測試,我們確信它的性能相當好,而不需要深入研究操作。
但是,我們還提供了一些基本操作,讓您可以自定義NLP處理。下面是我們使用它們的例子。
維基百科 detox 數據集:
Sentiment???SentimentText 1?Stop?trolling,?zapatancas,?calling?me?a?liar?merely?demonstartes?that?you?arer?Zapatancas.?You?may?choose?to?chase?every?legitimate?editor?from?this?site?and?ignore?me?but?I?am?an?editor?with?a?record?that?isnt?99%?trolling?and?therefore?my?wishes?are?not?to?be?completely?ignored?by?a?sockpuppet?like?yourself.?The?consensus?is?overwhelmingly?against?you?and?your?trollin?g?lover?Zapatancas,?? 1?:::::?Why?are?you?threatening?me??I'm?not?being?disruptive,?its?you?who?is?being?disruptive.??? 0?"?*::Your?POV?and?propaganda?pushing?is?dully?noted.?However?listing?interesting?facts?in?a?netral?and?unacusitory?tone?is?not?POV.?You?seem?to?be?confusing?Censorship?with?POV?monitoring.?I?see?nothing?POV?expressed?in?the?listing?of?intersting?facts.?If?you?want?to?contribute?more?facts?or?edit?wording?of?the?cited?fact?to?make?them?sound?more?netral?then?go?ahead.?No?need?to?CENSOR?interesting?factual?information.?" 0?::::::::This?is?a?gross?exaggeration.?Nobody?is?setting?a?kangaroo?court.?There?was?a?simple?addition?concerning?the?airline.?It?is?the?only?one?disputed?here.??? //?創建加載器:定義數據列以及它們在文本文件中的位置。 var?loader?=?mlContext.Data.CreateTextLoader(new[]?{new?TextLoader.Column("IsToxic",?DataKind.Boolean,?0),new?TextLoader.Column("Message",?DataKind.String,?1),},hasHeader:?true );//?加載數據。 var?data?=?loader.Load(dataPath);//?檢查從文件中讀取的消息文本。 var?messageTexts?=?data.GetColumn<string>(data.Schema["Message"]).Take(20).ToArray();//?應用ML.NET支持的各種文本操作。 var?pipeline?=//?一站式運行全部文本特征化。mlContext.Transforms.Text.FeaturizeText("TextFeatures",?"Message")//?為以后的轉換規范化消息文本.Append(mlContext.Transforms.Text.NormalizeText("NormalizedMessage",?"Message"))// NLP管道1:詞袋。.Append(mlContext.Transforms.Text.ProduceWordBags("BagOfWords",?"NormalizedMessage"))// NLP管道2:bag of bigrams,使用散列而不是字典索引。.Append(mlContext.Transforms.Text.ProduceHashedWordBags("BagOfBigrams","NormalizedMessage",?ngramLength:?2,?useAllLengths:?false))// NLP管道3:具有TF-IDF加權的三字符序列包。.Append(mlContext.Transforms.Text.TokenizeIntoCharactersAsKeys("MessageChars",?"Message")).Append(mlContext.Transforms.Text.ProduceNgrams("BagOfTrichar",?"MessageChars",?ngramLength:?3,?weighting:?NgramExtractingEstimator.WeightingCriteria.TfIdf))// NLP管道4:詞嵌入。.Append(mlContext.Transforms.Text.TokenizeIntoWords("TokenizedMessage",?"NormalizedMessage")).Append(mlContext.Transforms.Text.ApplyWordEmbedding("Embeddings",?"TokenizedMessage",WordEmbeddingEstimator.PretrainedModelKind.SentimentSpecificWordEmbedding));//?讓我們訓練管道,然后將其應用于相同的數據。 //?請注意,即使在70KB的小數據集上,上面的管道也可能需要一分鐘才能完成訓練。 var?transformedData?=?pipeline.Fit(data).Transform(data);//?檢查結果數據集的某些列。 var?embeddings?=?transformedData.GetColumn<float[]>(mlContext,?"Embeddings").Take(10).ToArray(); var?unigrams?=?transformedData.GetColumn<float[]>(mlContext,?"BagOfWords").Take(10).ToArray();歡迎關注我的個人公眾號”My IO“
總結
以上是生活随笔為你收集整理的ML.NET Cookbook:(18)如何在文本数据上训练模型?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拿到阿里云服务器后的基本安全配置
- 下一篇: 设计模式6大基本原则