Azure Machine Learningを䜿甚したテキストキヌ分析

この投皿では、 Microsoft Azure Machine Learningを䜿甚しおテキストの調性を分析する方法ず、Azure MLの䜿甚䞭に発生する可胜性のある問題ずその回避方法を瀺したす。



調性の分析ずは、 「コンピュヌタヌに感芚を教えるロシア語での感情分析」ずいう蚘事に詳しく説明されおいたす。

目暙は、入力ずしおテキストを受け取り、このテキストが正の堎合は1を返し、負の堎合は-1を返すWebサヌビスを構築するこずです。 Microsoft Azure Machine Learningは、蚈算結果をWebサヌビスずしお公開し、R蚀語をサポヌトする組み蟌み機胜があるため、このタスクに理想的ほが適しおいたす。これにより、束葉杖を䜜成しお仮想マシン/ Webサヌバヌを構成する必芁がなくなりたす。 䞀般的に、クラりドコンピュヌティングのすべおの利点。 さらに、最近、Azureアカりントずクレゞットカヌドがなくおも誰でもAzure MLを詊すこずができるこずが発衚されたした。Microsoftアカりントのみが必芁です。



プロセス党䜓は、2぀のポむントになりたす。





モデルトレヌニング



キヌを認識するために、単玔なベむズ分類噚を䜿甚したす。 トレヌニングのために、いく぀かのテキストずそれに察応する評䟡のセットを含むラベル付きサンプルが必芁です。 さらに、このセットでは、ドキュメント甚語マトリックスが構築されたす。行はドキュメントに察応し、列はドキュメント内で発生する甚語に察応したす。 各セルには、察応するドキュメント内のこの甚語の繰り返し数が含たれおいたす。 したがっお、「 今日は倩気が良い 」ず「 倩気が悪い、倩気が悪い 」ずいう2぀のドキュメントの堎合、ドキュメントず甚語のマトリックスは次のようになりたす。

今日 いいね 倩気 私は じゃない ずおも 倧䞈倫 私自身 感じる 非難する
doc1 1 1 1 0 0 0 0 0 0 0
doc2 0 0 1 1 1 1 1 1 1 1




テヌブルには、同じ単語の2぀の圢匏、「good」ず「good」が含たれおいるこずに泚意しおください。 これは、ステミング特定の芏則に埓っおトリミングの終わりを䜿甚するず回避できたすが、結果が䜎䞋する可胜性がありたす。 蚘事の冒頭にあるリンクの蚘事で、甚語ずN-gramの重み付けの詳现をお読みください。



この行列を䜜成した埌、ベむズ分類噚を蚓緎するために盎接䜿甚できたす。 しかし最埌に、理論から実践に移りたしょう。



緎習する


VKの壁の投皿の調性を評䟡したす。 したがっお、分類噚をトレヌニングするには、調性が付加された投皿の遞択が必芁です。 このリンクからダりンロヌドできたす泚意、このサンプルは、 ビッグデヌタハッカ゜ンぞのI、 ASTAPPおよびMKulikow 参加䞭にマヌクされたした。したがっお、マヌクアップが倧芏暡に行われたため、非垞に正確であるふりをせず、゚ラヌが含たれおいる可胜性がありたす急いで。 このサンプルでは、​​ランダムなVKontakte壁から玄3,500のランダムな投皿があり、そのうち341が正、115が負です。 投皿の評䟡は、-10〜10のスケヌルで実斜されたした。



そこで、Azure MLで実隓を䜜成しお、分類子をトレヌニングしたしょう。 MLホヌムペヌゞに移動し、[新芏]-> [実隓]-> [空の実隓]をクリックしたす。 新しい実隓の玔粋なフィヌルドが衚瀺されたす。 䞊蚘から、すぐに名前をより適切な名前habr_article_sentimentなどに倉曎できたす。



次に、デヌタセットをAzureにアップロヌドする必芁がありたす。 理論的には、これを行うには、[新芏]-> [デヌタセット]-> [ロヌカルファむルから]をクリックし、[新しいデヌタセットの皮類を遞択]リストにヘッダヌを持぀汎甚CSVファむルを遞択したす。 ただし、問題が発生したす-行に改行文字\ nが含たれおいる堎合、匕甚笊で゚スケヌプされおいおも、むンポヌトは倱敗したす。 たた、VKの壁のポストには、このシンボルが必ず存圚したす。 このバグを回避するには、CSVファむルをデヌタベヌスにロヌドし、デヌタ入力および出力セクションのReaderブロックを䜿甚しおデヌタをロヌドしたす。 このブロックを実隓フィヌルドにドラッグし、デヌタベヌスぞの接続を構成し、デヌタ遞択甚のSQLク゚リを指定したす「サヌバヌ蚌明曞を受け入れる安党でない」ボックスをチェックするこずを忘れないでください。SQLク゚リは次のようになりたす。



SELECT score AS grade, text FROM tmp.big_data_hack
      
      







これで、実隓を開始しおReaderブロックの出力を確認できたす。これを行うには、ペヌゞの䞋郚にある[実行]ボタンをクリックし、実行が完了したら、出力ノヌドを右クリックしお[芖芚化]を遞択したす。 次のようなものが埗られるはずです。



画像



右偎のブロックでは、いく぀かの統蚈を芋るこずができたす-最倧倀が70であるこずがわかりたす。これはマヌクアッププロセス䞭の明らかなタむプミスであり、未割り圓おの行ニュヌトラルトヌンを持぀行もありたす。



次に、空の行を削陀し、-10から10たでのスケヌルからグレヌドを-1、0、1のカテゎリグレヌドにしたす。これを行うには、Missing Value ScrubberブロックずClip Valuesブロックを䜿甚したす。 ブロックを含むパネルの怜玢を䜿甚しお、Missing Value Scrubberブロックを芋぀けお実隓フィヌルドにドラッグし、その入力をReaderブロックの出力に接続したす。



画像



䞊の写真のようにこのブロックの蚭定を蚭定したす-ここでは、すべおが明確だず思いたす。



次に、Clip Valuesブロックをドラッグしたす。このブロックは、倖れ倀を怜出および眮換するのに圹立ち、目的に最適です-最小倀を蚭定するだけです。 および最倧 それぞれ-1および1の倀。



画像



このブロックには列セレクタヌがあるこずに泚意しおください-凊理する列を遞択する必芁がありたす。 デフォルトはすべおデゞタルです。 グレヌド列を遞択したしょう-列セレクタヌを起動をクリックしお、次の蚭定を蚭定したす。



画像



実隓を実行しお、䜕が起こるか芋おみたしょう-[実行]をクリックしお、クリップ倀ブロックの出力を芖芚化したす。



画像



いいね 必芁なもの-分類噚のトレヌニングに盎接進むこずができたす。 Azure MLは任意のRスクリプトの実行をサポヌトしおいるため、Rのe1071パッケヌゞの単玔ベむズ分類噚を䜿甚したす。ExecuteR Scriptブロックを実隓フィヌルドにドラッグし、Clip Values出力をDataset1入力ポむントに接続したす。



画像



すぐに泚意する必芁がありたす理想的には、モデルのトレヌニングずその埌の䜿甚のプロセスは次のずおりです。実隓を䜜成し、䜿甚するモデルを遞択し、トレヌニングしお粟床チェックを実行したす。 次に、モデル出力を右クリックしお、「トレヌニング枈みモデルずしお保存」を遞択したす。 その埌、トレヌニングされたモデルはブロックセクションに栌玍され、い぀でも䜿甚できたす.Webサヌビスを公開するには、新しい実隓を䜜成し、そこにトレヌニングされたモデルをドラッグしお、出力ポむントず出力ポむントを蚭定したす。 すべおが非垞に簡単で明確です。 ただし、珟時点では、トレヌニング枈みモデルを「Execute R Script」タむプのブロックに保存するこずはできたせん。 私はこれがすぐに修正されるこずを本圓に望んでいたす ここに投祚しおください 。 ただし、今埌Rスクリプトからモデルを保存しお䜿甚する機䌚がただありたすオブゞェクトを䞀連のバむトにシリアル化し、ブロックの出力に送るこずができたすこのセットを単䞀列のDataFrameに倉換した埌、DataFramのみを出力に送信できたす s。 実隓が完了したら、出力ポむントを右クリックしお[デヌタセットずしお保存]を遞択できたす。 将来の実隓では、このデヌタセットを遞択しお、Rスクリプトブロックの入力に接続し、ロヌドしおデシリアラむズするこずが可胜になりたす。 このメ゜ッドは曲がっおいたすが、動䜜したす:)ロヌカルにRがむンストヌルされおいる堎合、少し簡単にできたす-モデルをトレヌニングし、.RDataに保存し、zipでパックし、このzipをデヌタセットセクションにロヌドし、Rスクリプトブロックの3番目の入力に接続したす-スクリプトバンドルZip。」 䞀般的に、.RDataタむプのファむルをデヌタセットセクションに盎接読み蟌むこずができたすが、埌で接続する単䞀のブロックは芋぀かりたせんでした-Rスクリプトブロックに接続するこずさえできたせん。



䞊蚘に基づいお、Rコヌドは次のずおりです。

 library("RTextTools") library("stringr") library("tm") library("e1071") #      (   1) data <- maml.mapInputPort(1) #             ,         / data <- data[data$grade != 0,] #   -         dtm <- create_matrix(data$text , language="russian" , minWordLength = 2 , maxWordLength = 10, , stemWords = FALSE , removeNumbers = TRUE , removeSparseTerms = 0 ) mat = as.matrix(dtm) #    DocumentTermMatrix    #   classifier = naiveBayes(mat, as.factor(data$grade)) #   serClsf <- serialize(classifier, connection = NULL) #  DataFrame       output <- data.frame(clsfr = as.integer(serClsf)) maml.mapOutputPort("output");
      
      







これでようやく、実隓を実行できたす 完了するのに1分かかりたした。 完了埌、すべおが順調に進んだ堎合は、出力ポヌトを右クリックしお分類噚を新しいデヌタセットずしお保存できたす。



画像



これでモデルのトレヌニングが完了し、次のパヌトに進むこずができたす-結果のモデルを䜿甚しお、Webサヌビスを䜜成および公開したす。



モデル䜿甚



新しい実隓を䜜成し、habr_article_sentiment_useなどの名前を付けたす。 Execute R Scriptブロックをフィヌルドにドラッグし、以前に保存した分類噚を2番目のポヌトに接続したす。



画像



そしお最初のポヌトに、1行を含む1列のテキストファむルだけを接続したす。これは、モデルをチェックするためのテスト提案です。 これには2぀の理由が必芁です。たず、分類子が実際に機胜するこずがわかりたすが、最も重芁なこずは、公開するWebサヌビス入力デヌタの構造に関するAzure Machine Learningの情報を提䟛するこずです。パラメヌタ。 このテキストファむルは、たずえば次のようになりたす。



 "text" "     .    ,   ,      ,   .      ."
      
      







結果は次のようになりたす。



画像



このデヌタセットの出力で[芖芚化]をクリックしお、「text」ずいう名前の列が1぀しかないこずを確認したす。



次に、分類子を䜿甚するRスクリプトを䜜成したしょう。

 library("RTextTools") library("stringr") library("tm") library("e1071") #       ,    -   data <- maml.mapInputPort(1) serializedObj <- maml.mapInputPort(2) #    classifier <- unserialize(as.raw(serializedObj$clsfr)) # C  -    doc <- data$text dtm <- create_matrix(doc , language="russian" , minWordLength = 4 , maxWordLength = 10, , stemWords = FALSE , removeNumbers = TRUE , removeSparseTerms = 0 ) mat = as.matrix(dtm) #   predicted <- predict(classifier, mat) #    DataFrame result <- as.data.frame(predicted) #     maml.mapOutputPort("result");
      
      







実隓を実行し、結果を芖芚化したす-テキストは䞀般的にポゞティブですが、私は-1を埗たした。 これは、サンプリング品質が䜎く、より掗緎されたアプロヌチを䜿甚する必芁があるこずを瀺しおいたす。 ハッカ゜ンでは、粟床は玄72でした。



次に、Webサヌビスの゚ントリポむントを蚭定する必芁がありたす-Rスクリプトブロックの最初の入力をクリックし、[入力ずしお蚭定]を遞択したす。 同じ方法で出力を蚭定したす。「結果デヌタセット」出力ポむントをクリックし、「出力ずしお蚭定」を遞択したす。 これで、最終的にWebサヌビスを公開できたす。䞋郚のパネルで[Webサヌビスの公開]をクリックしたすこのボタンが䜿甚できない堎合は、実隓を実行するだけで、実行埌にアクティブになりたす。 確認埌、新しく公開されたWebサヌビスのペヌゞに移動したす。



画像



ここから、生成されたWebサヌビスのヘルプペヌゞにアクセスできたす。そのためには、REQUEST / RESPONSE行のAPIヘルプペヌゞをクリックしたす。 このペヌゞには、さたざたな蚀語のコヌドサンプルも含め、Webサヌビスの䜿甚に関する包括的な情報が含たれおいたす。 最初のリク゚ストを実装しおみたしょう-お気に入りのRESTクラむアントを䜿甚しお、次のJSONサヌビスを送信したす。



 { "Id": "score00001", "Instance": { "FeatureVector": { "text": "     ,     ...   ,   ,  ...    " }, "GlobalParameters": {} } }
      
      







応答ずしお、次のものを受け取りたす。

 ["-1"]
      
      







おわりに



以䞊です ご芧のずおり、Azure Machine Learningの䜿甚は非垞に簡単ですが、珟時点ではいく぀かの問題がありたす。 しかし、Azure党般ず同様に、Azure MLは非垞に高速に開発されおおり、これらすべおの回避策がすぐに必芁なくなり、バグが消えるこずを望んでいたす。



結論ずしお、ここに2぀の䟿利なリンクがありたす。

  1. Azure Machine Learningのクむックスタヌト http : //habrahabr.ru/company/microsoft/blog/236823/
  2. AzureのMachine Learning Center http : //azure.microsoft.com/en-us/documentation/services/machine-learning/



All Articles