##はじめに
この記事の対象者は「機械学習初学者」です。
つまり私です。
##自然言語とは
自然言語ってなんだろう。
まずは、そこから理解しました。
例えばpythonのようなプログラミングで使う言語が
「固い言語」としたら、
普段私たちが使う言葉は**「やわらかい言葉」です。
1つの言葉や文字にも複数の意味があり
時代によって消えたり増えたりする
まさに生きているような言葉が「自然言語」**です。
そんなやわらかい言葉を
頭の固い(?)コンピュータに理解させる技術が
自然言語処理です。
##実践したこと
早速、以下の文を名詞抽出してみました。
text = 'こんにちは。最近Python学習を始めたさとちんといいます。'
MeCabをインポートして-Ochasen を使用して
形態素解析(品詞などを必要な情報を分ける)します。
import MeCab
# -Ochasen を使用
mecab = MeCab.Tagger('-Ochasen')
# 形態素解析
res = mecab.parse(text)
print(res)
→
こんにちは コンニチハ こんにちは 感動詞
。 。 。 記号-句点
最近 サイキン 最近 名詞-副詞可能
Python Python Python 名詞-一般
学習 ガクシュウ 学習 名詞-サ変接続
を ヲ を 助詞-格助詞-一般
始め ハジメ 始める 動詞-自立 一段 連用形
た タ た 助動詞 特殊・タ 基本形
さと サト さと 名詞-固有名詞-人名-名
ちん チン ちん 名詞-接尾-人名
と ト と 助詞-格助詞-引用
いい イイ いう 動詞-自立 五段・ワ行促音便 連用形
ます マス ます 助動詞 特殊・マス 基本形
。 。 。 記号-句点
EOS
nouns = get_nouns(text)
nouns
→['最近', 'Python', '学習', 'さと', 'ちん']
#要素を半角スペースで結合
' '.join(nouns)
→最近 Python 学習 さと ちん
ここから特徴量を抽出してベクトル化します。
こうすることでコンピュータに数値として情報を渡せるように処理をします。
自然言語の特徴量変換の方法として、
Bag of Words (BoW)を使用します。scikit-learnで実装します。
BoWとは、単語の出現回数によって単語を数値に変換する方法です。
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
x = vectorizer.fit_transform(nouns4)
vectorizer.vocabulary_
{'python': 0, 'さと': 1, 'ちん': 2, '学習': 3, '最近': 4}
x = x.toarray()
print(x)
[[0 0 0 0 1]
[1 0 0 0 0]
[0 0 0 1 0]
[0 1 0 0 0]
[0 0 1 0 0]]
以上のようにベクトル化を行うことができました。
##おわりに
最初、ベクトル化が何を表しているのかがよくわからなかったんですが、
単語毎に
{'python': 0, 'さと': 1, 'ちん': 2, '学習': 3, '最近': 4}のように
IDが割り振られて、IDごとの出現回数をベクトルで表示しているのだと
理解しました。(15分くらいかかりました)
また、名詞を抽出する際に
['最近', 'Python', '学習', 'さと', 'ちん']のように
さとちんが「さと(固有名詞)」と「ちん(名詞・接尾」と分かれていて
勝手にMeCabに感心しました。
以上、自然言語処理の基礎について理解しました。
参考文献
この記事は以下の情報を参考にして執筆しました。