学習内容まとめ
使用した教材
- Udemy : 【初心者向け】自然言語処理をPythonで学ぼう!
- ChatGPT
学習期間
3時間ほど、計2日
学習内容メモ
形態素解析
- 文章を形態素に分解し、各形態素に品詞などの属性を付与する。
- 形態素 : 意味を持つ最小の単位
- 例)「私は学校へ行きます。」を形態素解析する
- 私(名詞)
- は(助詞)
- 学校(名詞)
- へ(助詞)
- 行き(動詞)
- ます(助動詞)
- 形態素解析ツールが複数存在する
- MeCab ←今回使用」
- JUMAN
文章の類似度
TF-IDF
- TF
- 単語の出現頻度
- 特定の文書内での単語の出現回数を示す値
- IDF
- 逆文書頻度
- 特定の単語がどれだけ多くの文書に出現するかを示す値
- 出現率が低い単語はIDFが高くなる(レアな単語を検出する)
コサイン類似度
2つのベクトルの向きで類似度を測る
コサイン類似度の関数
$$
Cos類似度 = \frac{a_1b_1 + a_2b_2}{\sqrt{a_1^2+a_2^2}\sqrt{b_1^2+b_2^2}}
$$
Pythonで実装①(要Numpy)
import numpy as np
def cos_sim(vec_a, vec_b):
dot = np.dot(vec_a, vec_b)
norm_a = np.linalg.norm(vec_a)
norm_b = np.linalg.norm(vec_b)
return dot / (norm_a * norm_b)
Pythonで実装②(要sklearn)
# TFIDF行列をそのまま渡すだけで1行で計算できる
from sklearn.metrics.pairwise import cosine_similarity
cos_sim_matrix = cosine_similarity(tfidf_matrix)
Word2Vec
- 単語をベクトルに変換する
- 単語の意味や文脈的な関係性を反映している
- ベクトル間の演算によって単語間の関係性を表現できる
$$
king - man = woman \approx queen
$$ - 文書分類、機械翻訳、感情分析などに利用
- 主にCBOWとSkip-gramという2つのモデルがある
CBOW
- 周辺単語から中心となる単語を予測するモデル。
- 例)私 は xx が 好き ➡ xxに入る単語を予測する
- 猫 70%
- 犬 20%
- 魚 5%
Skip-gram
- 中心となる単語から周辺の単語を予測するモデル
- 例)xx xx 猫 xx xx ➡ xxに入る単語を予測する
Doc2Vec
- 文章や段落単位でベクトルに変換する
- W2Vの拡張版で、文書全体の意味や内容を捉えるのに使う
- 文書分類、情報検索、レコメンデーションなどに利用
W2V、D2VどちらもPythonでライブラリを用いて簡単に実装することができる