はじめに
現在、自然言語処理についての勉強をしており、今回は自分の試したいことに関連する知識をまとめています。
ほぼ忘備録&目的再認識なので、記事へのリンクのオンパレードになります、ご了承ください。
なんで自然言語処理なの?
自分たちが日々の生活の中で文字の情報が圧倒的に多いと思います。メール、SNS、Webサイトなど様々です。
この溢れに溢れている文字を使って機械学習も勉強できるんじゃないか?というのが自然言語処理をやろうとしたきっかけです。
また、近年では自然言語処理に欠かせない技術の精度が上がっており、かつ、手軽に試すことができることも自然言語処理を始める後押しにもなりました。
- 形態素解析器(Mecabとか)
- Word2Vec
- Pythonのgensim
などなど、一例ですが、今後自分が使用するであろう技術たち
自然言語処理で欠かせない「単語の分散表現」について
文字そのままでは計算機が認識できないため、単語を数学的なベクトルで表現しようという試み。
単純に単語一つに対して一つの次元を割り当てると、効率が悪いため、ある一定の範囲での次元で表現することで、ある程度の精度が得られる。
次の記事がわかりやすい。
分散表現にも課題はあるが、自然言語処理の精度を上げるために自分ができることは
- 質の良いテキストデータを集めること(実際に試したいことに関連する単語が多く含まれる記事など)
- テキストデータに対しての前処理
くらい。
使うであろうWord2Vec
単語をベクトル化する手法の1つ。Pythonとの相性も良いし、Word2Vecに関する記事も多いので採用すると思う。
Word2Vecの基本的な活用方法として、
- 類義語の予測
- 文章間の類似度の予測
ができる。
使うとしたら、Word2Vecの結果を利用したレコメンドシステムに近いかも。
詳しい概念や使い方は以下の記事を参照。
Word2Vecの仕組みを紹介している記事は勉強しがいがある内容
Word2Vecに似た手法としては、Doc2Vec、text2vec、fastTextがある。
- [翻訳] text2vec vignette: text2vecパッケージによるテキスト分析
- FacebookのfastTextでFastに単語の分散表現を獲得する
- pythonでfasttextを使って文書分類してみた
- Doc2Vecについてまとめる
TF-IDFを使用した類似度計算
文章の特徴となる単語の抽出に使う手法。
概要としては、
- TF値(文章内の単語の出現頻度)
- IDF値(ある単語の文書出現頻度の逆数)
となる。
理解しやすい記事→TF-IDF
TF-IDFを使って単語の特徴量を算出して、コサイン類似度で文章間の類似を求めるのが多いと思う。
コサイン類似度→[Python] 2つの文書間のcos類似度を計算
TF-IDFについては大学時代に勉強していたので、復習みたいな感じ。
しかし、Okapi BM25というTFIDFに似た手法もあった。精度もTFIDFより出る可能性があるとのこと。
実際にできること
今回紹介した技術、手法を使うことで様々なことができる。その可能性は無限大
個人的に興味深かった記事