学習に使用したテキスト次第で特定のキーワードが強くなりすぎてしまうのかもしれません。, fastTextを使って文章を「美容系」、「エンタメ系」、「暮らし系」に分類しました。 「良かったです」 ⇒ __label__4 どこぞのRTBのブログでこれをコンテンツ解析に使ってるっていってたので。, おなじみのmecabを使って形態素解析をしました。 なかなかの辛さ。というか結構辛いです。 What is going on with this article? 「二度と買いません」 ⇒ __label__0 生成は以下のコードで行います。変換自体は1行で完結します。, input_fileに学習用のテキストファイル名、 - 「Requests」と「lxml」を使ってWebの情報を取得してみた # 中間ファイルを保存 『分類前』が処理前で『分類後』がfastTextを使って分類した結果です。, 上記のように分類前は色々なジャンルの投稿内容が入り混じった状態です。 何回か時間を置いて繰り返し実行してデータをためてください。, 取得直後のテキストはカテゴリごとにバラバラの状態なので、CATコマンドで結合させましょう。, 取得した「model.txt」からfastTextのモデルを生成します。 運良くお客さんが帰るタイミングだったのか、6.7人並んでいましたが、それほど待たずに 今日も 美味しいご馳走をありがとうございました!, まず、ここはデートではいけません。笑 ____label____3, 分かち書きした文章分かち書きした文章分かち書きした文章, 1,文章文章文章文章文章 判定結果が入力した文章に近いほど確率の値が高くなります。, 結構いい感じに分類してくれている気がします。 また取得した投稿3000件*3を学習用、100件*3を検証用に別で用意し実験したところ、 96.333%の精度で分類できました。*2, ・のび太「あったかいふとんでぐっすりねる。こんな楽しいことがほかにあるか。」 片付け中に出てきた lanケーブルのカテゴリの見分け方 がわからず、地味に困りました。 「 cat6 」みたいに印字されていれば簡単にわかるんですが、 vcom – vinh khanh e333750 (ul) type cm 24awg/4prs utp tia/eia-568-b.2-1 categoryse patch cord. 先日、弊社の2020年の開発合宿(一泊二日)でやったネタを投稿します。, 合宿日記も兼ねてるので完全にとりとめのない時系列順の出来事の羅列になりますが、ご容赦ください。, 自然言語処理や機械学習は全然わからん勢なのですが、せっかくの合宿なのでwebサイトのコンテンツ解析をして遊んでみました。, あらかじめ決めたカテゴリ分類に応じて、入力された未知のWebサイトが適切にカテゴライズされることを目的とします。, AWSのML系サービスで遊んでみることも考えましたが、今回はfasttextによる単語ベクトルの算出というアプローチをとってみました。, fasttextは、facebook製の自然言語処理ライブラリです。word2vecと同じく単語ベクトルを算出するライブラリと理解しました。 output_fileに生成後のモデル名を設定します。, fastTextにモデルと新たに判断したいテキストを渡すと、 MacBook Air (11-inch, Early 2015) OS X El Capitan バージョン 10.11.6 Why not register and get more from Qiita? またせっかくなので@コスメのクチコミデータを使ってネガポジ判定をやってみます。, @コスメのクチコミは「おすすめ度」という評価が0~7までついているので、これをカテゴリにします。 今回はPythonの機械学習(人工知能の一種)を使って、テキスト・文書を自動で分類するWebアプリを作ってみました。 1. http://torch.classcat.com/2018/07/06/fasttext-tutorials-text-classification/, 現状、0.6を下回っていてあまり良いモデルとは言えないのでエポックを増やしてモデルの作成とテストを再度行います。, 上記のようにエポックの数を大きくするとモデルの作成に非常に大きな時間がかかっています。, ・fastTextの実装を見てみた 元サイトのジャンル別の問題数で最も少ないのが約1000問(スポーツ)だったので、各ジャンル1000件を学習データとして、残りを検証データとしました。 分類ごとにCLASS_LABELとキーワードを変えて実行します。, 今回は約3000件*3の投稿内容を用意しました。 AWSのML系サービスで遊んでみることも考えましたが、今回はfasttextによる単語ベクトルの算出というアプローチをとってみました。 fasttextは、facebook製の自然言語処理ライブラリです。 FacebookのfastTextでツイートやニュース記事やレシピの分類をやってる記事をいろいろ見ながら、クイズ問題のジャンル分けが自動でできるかなと思って、夏休みの自由研究でやってみました。 環境. 「思ったより悪かったです。」 ⇒ __label__1 判定結果の分類とその判定が下される確率が取得できます。 Is different between fasttext and fastText in python? こんにちは。分析基盤の構築などを担当しているnaganotです。 3,文章文章文章文章文章, dimやepoch、その他のパラメータなどもいろいろ調整できます。 以下の環境で実施しました。 合宿一日目の夕方くらいから方針決めてはじめてみたのはいいんですが、当たり前ですがそもそもこの作業自体が大変でした... このように、「きれいな学習用データを集める」という作業だけで一日目の深夜までいってしまいました。 グリーンカレーがそれほどでもなかったので、 人工知能という言葉が、昨今、ますます身近になってきており、Siriなどの対話システムも日々発達してきています。, また、人間の言語を人工知能に解釈させる対話システムの需要が増えると共に、NLP(自然言語処理)のニーズも日に日に高くなって来ています。, NLP分野では、画像処理系や、音声処理系と比較すると、まだ技術的なブレークスルーが起こっているという状況では無く、他の分野に比べて人工知能関連の技術適用は、限定的と言えるかもしれません。, しかしながら、NLPの分野でも、当然、機械学習は使用されますし、ディープラーニングをNLP分野に使おうとする動きも多く見られています。, 今回は、その中で対話システムの制御等に使われる、入力文章の意図、主に対話カテゴリーの分類を、NLP、及び、機械学習を用いて、なるべくシンプルな手法で実装してみます。, 文章のカテゴリー分類とは、例えばブログを書いた時のカテゴリ、メール内容のトピック、チャット内容の感情の分類などに使えます。, 具体的なコードの実装に進む前に、まずは、人間はどのように対話中で、文章・テキストの意図(カテゴリー)を把握しているか考えてみましょう。, 人間の頭であれば、これらが「天気」についての質問であることは、すぐに理解できるかと思います。, 人によっては「地図」についての話だと思う方もいるでしょうし、「乗り換え案内」と捉える方もいるかもしれません。, それでは、これらの文章のカテゴリー把握は、人間はどのように行っているのでしょうか?, 上記のように、赤字で示した単語等から、人間の頭はこれらの文章が「天気」についての話題であるという事を抽象的に把握しているはずです。, それは、「晴れ」「天気」「雨」等が、天気を思わせる単語であり、そういった単語から連想しています。, これらの周辺単語が文章の中に入っているため、上記の文章が、「天気」や「ナビゲーション」の事についてのものだと、人間の頭は漠然と把握をできる訳です。, おそらく、勘のいい読者の方であれば、ピンときたでしょうが、これらの作業を機械にさせる事ができれば、文章の意図の把握、つまり、文章のカテゴリー分類を機械化できるのです。, これらのクエリ(問い)から、「晴れ」「天気」「雨」「降って」等を抽出出来れば、これらの文章を「天気」のカテゴリーだと判定させるためのロジック実装への大きな足がかりになりそうです。, そのための最も簡単な方法はと言うと、「晴れ」「天気」「雨」・・・等、天気に関連しそうな単語を予め集めた辞書を事前に用意しておいて、その辞書に存在する単語が、文章中に存在するかどうかをチェックしていく事です。 (通常、こういった辞書をgazetteerガゼッティアといいます。), しかしながら、長い文章や、gazetteerのサイズが巨大になってくると、計算量が非常に増加してしまう事もあるため、マシンパワーが少ない環境で作業している場合などは、何らかの工夫をする必要があります。, (勿論、この方法も十分に有効な方法で、gazetteerをしっかりと用意しておくことは、カテゴリ分類の精度を向上させる事に繋がる為、非常重要な作業となってきます。), 形態素解析は、文章を最小の構成単位である単語(名詞、動詞等)に分かち書きを行う技術です。, 形態素解析器に関しては、オープンソースで提供されており、MeCabという形態素解析器が一般的に有名です。, (MeCabのpythonでのセットアップ方法に関しては、MeCab(形態素解析)をPythonから2分で使えるようにする方法 をご参照下さい。), 形態素解析器を使用すると、入力した文章を分かち書きしてくれるため、分かち書きをした単語に対して、gazetteerの単語とマッチするかチェックすれば良い事になります。, 以下に、形態素解析器としてMeCabを利用し、pythonでgazetteerの単語と照合チェックする実装例をお見せ致します。, 簡単にコードを説明すると、「MeCabオブジェクトをpythonから取得し、入力文章の分かち書きを行って、その単語の表層(surface)が、gazetteerに存在したら出力をする」という、非常にシンプルなコードとなっています。, 形態素解析器の挙動の詳細を知りたい場合、上記コードの、elementをプリントアウトしてあげると、詳細が把握できるかと思います。, これで、gazetteer中の単語が、入力文章中に存在するかどうかを確認する方法については、ご理解頂けたかと思います。, 機械学習を用いる前に、先ほど紹介したgazetteerを用いて、簡素ですが、非常にパワフルにカテゴリー分類する方法について、具体的に説明していきます。, ここで、入力文章は、「天気」と「ナビゲーション」の2つのカテゴリーのみと仮定して、そのうちのどちらかにカテゴリー分類するように実装してみます。, 先ほどの内容から、カテゴリを分類する際には、そのカテゴリに対応したgazetteerが、事前に用意されている必要があります(今回は「天気」と「ナビゲーション」)。, 結論からいうと、gazetteerの作成方法に関しては、何か正解がある訳ではありません。, ご自身で、思いつく単語を手作業で羅列していく方法も、外部のライターさん等に依頼して、関連語を羅列してもらう方法もあります。, ただ、マニュアルでgazetteerを作成していくと、どうしても人手によるミスなどが発生する可能性があります。, また、なるべくここに対して人手をかけないようにする事が、後々の作業の効率化を考えると重要になってきます。, 特に、「人名」や「地名」等の一覧は、Wikipediaをはじめとした、webサイトなどに整備されてまとめられている事が多く、そういったリソースを活用しながら関連するgazetteerを構築すると、効率よく進めることが出来ます。, その様な方法で、gazetteerの網羅率をなるべく上げておく事が、分類精度の要となってきます。, ここでは、説明を簡単にするために、gazetteerの辞書には最小限のエントリのみを追加し、入力文章も単純な短文を仮定しています。, 上記のコードで、classify_categoryというメソッドを実装していますが、こちらがカテゴリー判別をする関数で、ここに文章を入力すると、その文章が「天気」または、「ナビゲーション」のどちらのカテゴリーに属しているかを分別します。, ロジックとしては非常に単純で、まずは、「天気」「ナビゲーション」それぞれのgazetteerを用意し、入力された文章を、MeCabによって、分かち書きを行い、分かち書きされた単語が、それぞれのカテゴリーのgazetteerにどの位存在しているかをカウントしています。, 最終的に、そのカウントスコアを比較して、スコアが高い方のカテゴリーを、判定カテゴリーとして表示します。, この方法は、非常にシンプルながらそれなりの精度で動くので、色々と試してみると良いでしょう。, ただし、この方法はあくまで簡易実装なので、gazetteerの辞書のエントリに結果が強く依存します。, 例えば、ヒットした単語の中で、特に強調したい単語がある場合等のきめ細かい調整はできないため、分類精度的にはそこまで高くはならないというのが実情です。, そこで、以降は少し難しくなりますが、機械学習(MLP 、いわゆるディープラーニング)を用いた、カテゴリー分類の実装方法について、ご説明させて頂きます。, 今回は簡単な割に精度が高い、Bag of wordsとニューラルネットワークを組み合わせた手法でやってみたいと思います。, 少し加工する必要があるので、下記の記事の【2.コーパスの準備】をお読み頂き、corpus.txtというファイルを作成して下さい。, これはそのままの意味で、文章を単語単位に区切り、それをバッグに詰め込んでしまうイメージです。, もちろん情報を捨ててしまっていることになるのですが、自然言語処理界では広くこの手法が使われています。, それは、順番の情報を捨ててしまっても多くの場面で精度を出すことが可能であるからです。, 英語の文章の場合、そのまま単語ごとに区切ってバッグに入れてしまう事が多いのですが、日本語の場合はそうはいきませんので、文章を何らかの単位で区切って分割する必要があります。, 基本的にはこのように全てのテキストを形態素に分解していき、出現する全ての単語を把握したあと、全ての単語に対してテキスト中に出現するかどうかというベクトルを作成します。, その後、ニューラルネットワークに対してこのベクトルを入力とし、出力をカテゴリとして学習を行います。, main.pyを実行すると、トレーニングが実行され、トレーニングが完了すると、dumpsのディレクトリ内に、モデル情報等が格納されます。, analyzerというのは、テキストが入力された時、そのテキストを任意の方法で区切って返す関数を渡します。, 今回の場合は_split_to_wordsという関数を用い、この関数内でmecabを使って形態素解析を行い、形態素毎に区切った配列を返すようにしています。, ここが重要な部分で、ニューラルネットワークに入力(X)と正解ラベル(Y)を渡し、トレーニングを実行しています。, hidden_layer_sizesのパラメータによって、ニューラルネットワークの層とユニットの数をタブルにて定義します。, 100unit ×2層の場合は、hidden_layer_sizes=(100,100)とします。, max_iterはトレーニングをどれだけ回すかというパラメータになり、多くするほど時間はかかるようになりますが、精度が上がっていきます。, トレーニングしたモデルを使って実際に新しいテストのカテゴリ判別をするには、一番最後の行のpredict()のコメントアウトを外し、train()をコメントアウトします。, 下記の適当なニュース記事から本文を取ってきて、{カテゴリ判別したい記事内容}という箇所にコピペします。, 上記のコードでカテゴリ分類は可能ですが、更に精度アップを目指したい方はこの先も読んで実行してみて下さい。, 上記のコードでは、CountVectorizerというvectorizerを使っています。, これは、全ての単語において、出現するかしないかを01で表現したベクトルとなります。, ただ、実際カテゴリ判別をする際に「の」や「です」等は不要な気がしますね。これを考慮してくれるのがTfIdfです。, の略で、Tfはドキュメント内の単語の出現頻度、Idfは全ての文章内の単語の出現頻度の逆数です。, つまりTfIdfを使うと、いろいろな文章に出てくる単語は無視して、ある文章に何回も出てくる単語は重要な語として扱うというものです。, CountVectorizerやTfidfVectorizer、またMLPClassifierを扱ってきましたが、どのvectorizerがよいのか?, どのくらいのユニットの数にしたらいいのか等、実際の精度がわからないと決められないかと思います。, また、main.pyのtrain()の箇所をコメントアウトし、下記コードに書き換えます。, cross_val_scoreというscikit-learnに元々入っている関数を呼んでいますが、ここで評価したいモデル、入力のベクトルX、出力ラベルY、データを何分割するかをcvのパラメータとして渡します。, コードではcv=4にしていますので、データを4分割して、3/4はトレーニングに使い、1/4は評価用のデータとして使い、評価用のデータの正解がどれくらいかというスコアを算出します。, データによっても入力ベクトルの形式で最適な形式が変わってきたり、モデルのパラメータが変わってきますが、最初からそれを推定するのはとても困難です。, 例えば、MLPClassifierの隠れ層の最適なサイズは最初から分かる人は殆どいないと思いますので、いくつか試す必要があります。, 機械的に色々なパラメータを試す方法は、scikit-learn(機械学習)の推定器:Estimatorの選び方 に載っていますので、こちらも参考にしてみてください。.

.

ツイッター 炎上 特定 17, 新撰組 勿忘草 Mp3 8, ドックンドックン 効果音 フリー 6, Port Royale 3 Mods 5, 身長が伸びる 前に 体重が増える 33, Pso2 私服コーデ 夏 5, ニシノユキヒコ の恋と冒険 ロケ地 8, 佐世保事件 小6 加害者 30, オープン レジデンシア 安い 理由 8, Aviutl プロジェクトファイル 結婚式 6, お宝 鑑定団 住田 4, オンライン授業 忘れてた 言い訳 10, 日本で 一 番 悪い奴ら 婦警 7, It's Gone 意味 12, Sidem ベストゲーム ストーリー 10, 各務原 内職 自宅 4, 虫刺され 薬 顔 12, 炭酸ナトリウム 塩酸 遊離 4, 世界くらべてみたら マイラ 旦那 7, Uqモバイル キャンペーン 9月 5, 長谷川博己 食 生活 4, 満 読み方 名前 5, Oh My Teeth 評判 8, 近藤真彦 妻 年齢 5, Gu スーツ 結婚式 30, 虫除け リング 大人用 8, イタリア 硬貨 100リラ 6, シーリングライト 型番 調べ 方 4,