自然言語処理
はじめに mecab-pythonで形態素解析を行って何らかの処理をするとき、特定の品詞だけ取り出したいということがよくあります。 そういう目的で書かれたコードとして、よくこんなものを見たりすると思います。 import MeCab tagger = MeCab.Tagger() tagger.pa…
はじめに 自然言語処理などで大規模疎行列を扱うことがあります。一昔前はNLPといえばこれでした(最近は低次元密行列で表現することのほうが多いですが)。 疎行列はその特性をうまく生かして扱うとパフォーマンス上のメリットが得られる反面、うかつにdens…
概要 自然言語処理やテキストマイニングをしていると文単位で処理・分析したいということはたまにあるので、テキスト(複数文)→センテンス(単一の文)という変換をしたくなることがあります。 英語の場合は、nltkを使うと簡単です。 nltk.sent_tokenizeで…
自然言語処理などでお馴染みのコサイン類似度。これを1から引いたものを「コサイン距離」と称している文献も散見されますが、この「コサイン距離」は距離としての性質を満たしません。それがどういうことなのかをこの記事で説明していきます。
はじめに 線形判別分析など、線形の判別モデルは係数を使って各クラスに重要な特徴を取り出すことができます。 今回はロジスティック回帰を使って、20newsgroupsのデータセットから各クラスの特徴語を取り出してみます。 実験 以下のようなコードを走らせま…
はじめに ずっと放置していたシリーズですが、その後新たに得られた知見が出てきたので、更新しておこうと思います。 得られた知見 いろいろ勉強した結果、以下のような考えに至りました。 そもそもデータ数が多いので、高級な分類器であればあるほど速度的…
はじめに mecab-pythonで以下のようなコードを書くことがよくあると思います。 import MeCab s = "吾輩は猫である。" tagger = MeCab.Tagger("") tagger.parse("") node = tagger.parseToNode(s) while node: print(node.surface, node.feature) node = node…
はじめに 20 newsgroupsはこのブログでも過去何回か取り上げまたしが、ベクトル化済みのデータを読み込めるfetch_20newsgroups_vectorizedは意図的にスルーしていました。 使えるかどうか気になったので、試してみます。sklearn.datasets.fetch_20newsgroups…
注意:線形判別分析(LinearDiscriminantAnalysis)ではありません。トピックモデルのLDAです。 はじめに LDAといえば、トピックモデルの代表的な手法であり、一昔前の自然言語処理では頻繁に使われていました(最近は分散表現や深層学習に押されて廃れ気味…
はじめに MeCabの辞書といえばipadicが定番ですが、unidicという辞書もあります。 ちょっとこれを使いたくなったので、使ってみることにしました。 なお、MeCabおよびmecab-pythonはすでにipadic等で使える状況になっているものとします。 目次 はじめに uni…
概要 すでに語り尽くされた感のあるネタですが、TF-IDFで文書の重要な単語(重要語、あるいは特徴語)を抽出してみます。 numpyとsklearnを使うと、10行程度のコードで実現できるので簡単です。スポンサーリンク (adsbygoogle = window.adsbygoogle || []).p…
前回は性能を追い求めると次元がでかくなりすぎて・・・というところで終わっていた。今回はもうちょっと頑張って次元を減らしてみる。 目次 ストップワードの除去 PCA(主成分分析)とLDA(線形判別分析) 分類 ソースコード 結果とまとめ 次回 過去の回 ス…
Stemming(ステミング)は単語の語幹を取り出したいとき、Lemmatization(レンマ化、敢えてカタカナ表記するとレンマタイゼーション)はカテゴリごとにグルーピングしたりしたいときに使う。 公式ドキュメントはここ。 nltk.stem package — NLTK 3.4 documen…
環境 ubuntu 14.04 cabocha 0.69 cabocha-python 0.69 問題の概要 変な挙動だった。というか率直に言ってバグなのでは? >>> import CaboCha >>> cparser = CaboCha.Parser() >>> tree1 = cparser.parse("吾輩は猫である。") >>> print(tree1.toString(CaboC…
日本語のモダリティを解析できるらしい。「文中のイベント(動詞や形容詞など)に対して、その真偽判断(イベントが起こったかどうか)、仮想性(仮定の話かどうか)などを解析します」とのこと。 公式ページはたぶんここ。jmizuno.github.io 環境 ubuntu14.…
形態素解析、いわゆるPOS taggingと呼ばれるようなタスクをnltkを使うと簡単に行なえます。日本語の解析ではmecabやjumanを使うと思いますが、英語だとnltkに入っているものが使えるので(インストールとかが)楽です。
sklearnのPCA(主成分分析)がやたら遅くて腹が立ちました。計算コストを下げるために次元削減してるのに、次元削減で計算コスト食ったら意味がありません。 とにかくこのPCAを高速化したかったので、svd_solverを変えてどうなるか試しました。なお、腹が立…
目次 はじめに――長年の疑問 検証 結果 tf-idfは死んだのか? まとめ はじめに――長年の疑問 自然言語処理でテキスト分類などに、よくtf-idfが使われます(最近はそうでもないのかもしれないが)。一般には、tf-idfを使うことで分類精度の向上効果があると認識…
sklearnのCountVectorizerを使うとBoW(Bag of Words)の特徴量が簡単に作れます。 ただし、指定するパラメタが多かったり、デフォルトで英語の文字列を想定していたりして若干とっつきづらい部分もあります。 この記事ではCountVectorizerの使い方を簡単に説…
前回はとりあえずベースラインの分類を行い、F1値にして0.7くらいの性能を得た。 ここで自然言語処理的なアプローチで手法の改良に進むのもありだと思うが、とりあえずmin_dfをパラメタチューニングしてみるか、という方向に傾いている。前回は恣意的に決め…
前回の続きをやっていく。とりあえず今回は簡単な方法で分類してみて、ベースラインを作ることにする。 目次 特徴を捨てる 分類する まとめ 次回 何はともあれ、文書から特徴抽出してベクトル化しないと話にならない。ベースラインなのでBag of Wordsを使う…
fetch_20newsgroupsはUsenetというネットニュースの記事(でいいのかな、良くない気がする)をカテゴリ別に集めたデータセット。sklearnで気楽に使えるので*1、試してみることにする。 とりあえずこの記事はintroductionとし、使い方とデータの扱い方の説明…
構文解析アルゴリズムのCKY法の実装について説明する。参考にしたテキストはこれ。自然言語処理の基礎作者: 奥村学出版社/メーカー: コロナ社発売日: 2010/10/15メディア: 単行本(ソフトカバー)購入: 8人 クリック: 379回この商品を含むブログ (11件) を見…