今回は、キカガクで「機械学習による自然言語処理」を学んだ。
Table of Contents [Disable]
学習内容
実装の流れ
自然言語処理の流れ(文章の特徴を抽出するための操作)は次のとおり。
- データの収集
- 【前処理】クリーニング処理
- 【前処理】単語の正規化
- 【前処理】形態素解析
- 【前処理】基本形への変換
- 【前処理】ストップワード除去
- 単語の数値化
- モデルの学習
データの収集
解決したいタスクに応じてデータを収集する。
【前処理】クリーニング処理
HTMLのタグなど意味を持たないノイズを削除する。
BeautifulSoup や 標準ライブラリ re モジュールを使用する。
【前処理】単語の正規化
半角や全角、小文字大文字などを統一する。
表記ゆれ(「行う」と「行なう」、「りんご」と「リンゴ」、「Apple」と「apple」等)を統一する。
【前処理】形態素解析
文章を単語ごと分割する。単語の分かち書き。
MeCab、Janome、JUMAN++ を使用する。
MeCab は MeCab: Yet Another
Part-of-Speech and Morphological Analyzer から mecab-0.996.exe をダウンロードしてインストール(文字コードは UTF-8 を選択)。
さらに、pip
install mecab-python-windows で Python 開発環境にもインストール。
【前処理】基本形への変換
語幹(活用しない部分)への統一を行う。
例:学ん(だ)→学ぶ
主に MeCab を使用する。
昨今の実装では基本形へ変換しない場合もある。
【前処理】ストップワード除去
出現回数の多すぎる単語など、役に立たない単語を除去する。
ストップワードをまとめた辞書との一致検索や出現頻度による削除を行なう。
昨今の実装では除去しない場合もある。
単語の数値化
機械学習で扱えるよう文字列から数値へ変換を行う。
モデルの学習
タスクに合わせ、古典的な機械学習~ニューラルネットワーク選択する。
オープンデータセットについて
オープンデータセットとはある団体が保有しており、自由に活用できるよう公開しているデータのこと。
オープンデータセットは次のようなものがある。
オープンデータセットのまとめサイト
ソースコード
# クリーニング処理の例 | |
text = '<html>Deep Learningにはマシンリソースが必要です。</html>' | |
from bs4 import BeautifulSoup | |
soup = BeautifulSoup(text, 'html.parser') | |
text = soup.get_text() | |
print(text) | |
# 単語の正規化の例 | |
text = text.lower() | |
print(text) | |
# 形態素解析の例 | |
import MeCab | |
mecab = MeCab.Tagger('-Owakati') | |
text = mecab.parse(text) | |
ret = text.strip().split() | |
print(ret) | |
# ストップワードの除去の例 | |
# 空のリストを用意 | |
word_list = [] | |
# 辞書の用意 | |
stopword = ['に', 'は', 'が', 'です', '。'] | |
# 辞書に無いものをリストに追加 | |
for word in ret : | |
if word not in stopword: | |
word_list.append(word) | |
print(word_list) | |
実行結果
C:\Development\Python\Project001\venv\Scripts\python.exe C:/Development/Python/Project001/venv/natural_language_processing.py | |
Deep Learningにはマシンリソースが必要です。 | |
deep learningにはマシンリソースが必要です。 | |
['deep', 'learning', 'に', 'は', 'マシン', 'リソース', 'が', '必要', 'です', '。'] | |
['deep', 'learning', 'マシン', 'リソース', '必要'] | |
Process finished with exit code 0 |