自然言語処理の概要と前処理入門(Learn-Natural-Language-Processing-Curriculum-week1)

自然言語処理を8週間で学習するカリキュラム(Learn-Natural-Language-Processing-Curriculum)がYoutube,githubで公開されております。

www.youtube.com

github.com

この記事ではweek1の学習時のメモを公開しています。
※week2との難易度の差が激しいので、カリキュラムの難易度(英語力含む)を知りたい方はweek2の内容も合わせて見ることをオススメします。

Week1概要

NLPの概要
テキストの前処理

教材

Video

https://www.youtube.com/watch?v=hyT-BzLyVdU&list=PLDcmCgguL9rxTEz1Rsy6x5NhlBjI8z3Gz

Reading

https://web.stanford.edu/~jurafsky/slp3/ed3book.pdf (全文)
githubでは1,2となっているが1は文章なし。3は言語モデルなので、week1の範囲ではない。
これらからchapter2のみ読めば良いと思われる。

Practice

NLTKを使った前処理の実装方法
https://github.com/hb20007/hands-on-nltk-tutorial

※NTLK以外にも前処理用のパッケージは多く存在する。 以下NLTKとspaCyの比較記事
https://blog.thedataincubator.com/2016/04/nltk-vs-spacy-natural-language-processing-in-python/
前処理のパッケージの比較
https://stackoverflow.com/questions/55492666/what-is-better-to-use-keras-preprocessing-tokenizer-or-nltk-tokenize

学習順としては、
Readingの方が詳しいため
Reading(詳細な学習)⇨Video(復習)⇨Practice(実装)
Video(予習)⇨Reading(詳細な学習)⇨Practice(実装)
のどちらかになると思う。

まとめ

Videoまとめ

1.1NLP概論
NLPの応用範囲
Watsonのクイズ大会
Information Extraction
Information Extraction&Sentiment Anaalysis⇨商品の特徴とそれぞれの評価を得られる。
機械翻訳
できること、改善できていること、依然として難しいことの表

NLPが難しい理由
判別がつきにくい
non-standard English: 例u taught us 2
segmentation issues 例New York-New HavenをNew York/-/New HavenではなくNew/York-New/Havenとなってしまう
idioms
neologism(新たな造語)
world knowledge(一般常識)
entity name:固有名詞など

これらの問題の解決のためには
言語の知識と一般常識を結びつける必要があり、
言語データから確率モデルを作ることで達成できる。

2.1正規表現の話
※詳しい人は飛ばしていいかも
https://www.regexpal.com/

動画で使われている『Cat in the Hat』の文章
We looked!
Then we saw him step in on the mat.
We looked!
And we saw him!
The Cat in the Hat!

2.2正規表現の例:電話番号
※詳しい人は飛ばしていいかも

2.3テキストのトークン化
NLPではテキストの標準化が求められる。
1.テキストを単語に分割
2.単語のフォーマットの統一
3.テキストの区切りを決める

Tokenize
単語の定義=単語の数
fragment(単語の一部)、pause(えーっと, uh)などはカウントするか
lemmaは同じとみなすがwordformは異なる

typeはユニークな単語数、tokenはのべ単語数という二つの評価基準がある。

言語によっても単語の区分方法は変わってくる
中国語はスペースがないので、別の区分が必要となる。
それがMaximum Matchingでできるだけ多くの文字をとるように分割する。
ただこのアスゴリズムは英語ではうまくいかない。
thetabledownthere
theta bled own there

2.4Normalize
同じものを指す文字列のmapを作る。
非対称なmapも作成できるが、効率化のため対照的なmapを作ることが多い。
非対称な例
window ⇨window, windows, Window
Window ⇨Window

caseの取り扱い
大文字を小文字化するか

感情分析ではしないほうが良い

Lemmatization
機械翻訳ではしないほうが良い

Morphology
stems:中心的な意味
affixes:stemにくっついたもの
⬇︎
Stemming
affixesを削除して強引に標準化する方法
Porter’s algorithm(most common English stemmer)が一般的なstemmingのアルゴリズム

2.5
文の区切り方
!?.は必ずしも文末に出てくるわけではない。
U.S.A.

決定木で決める
ルールを決めてpunctuationが文の句切れか確認する
位置や、大文字・小文字、.と一緒に出てきた単語の文字数など。
手作業で作成するのは大変なので、機械学習(ロジスティック回帰、SVMニューラルネット)ですることが多い。

Readingまとめ

2の導入文
正規表現、テキストの標準化(Text Normalization)、レーベンシュタイン距離( edit distance)について学ぶ。
正規表現により文章から欲しい文字列を抜き出すことができる。
テキストの標準化により文章をより扱いやすく、統一の形にすることができる。
前処理にはトークン化、レンマ化(ステム化:簡易ver)、文章の区切りなどがある。
レーベンシュタイン距離により二つの文字列の類似性などを把握することができ、
この技術は文章の修正や音声の自動認識に用いられる。

2.1 正規表現
※自分の気になったところだけまとめ
2.1.1
・大文字小文字は別で認識する
・[^~~]はでも~でも~でない
例:[^A-Z]大文字のアルファベットではない。
2.1.2
正規表現の処理には順序があり、上から順に
Parenthesis ()
Counter * + ? {}
Sequence and anchors the ^my end$
Disjunction
・non-greedyの表現には+?, *?を用いる
2.1.5
・{n,m}一つ前の文字または塊がnからm回起こる

2.1.6
・capture group:()を使って特定の文字列をメモリに保存すること
例:/the (.)er they (.), the \1er we \2/
該当する:the faster they ran, the faster we ran
該当しない:the faseter they ran, the faster we ate
※captureしたくない時には(?:~~~)とする

正規表現の先読みと後読みはアンカーと考えると理解しやすい
https://abicky.net/2010/05/30/135112/

2.2 Words
単語を処理する前に、何を単語とするのか考える必要がある。
コーパスとはコンピュータが読むことができる文章のこと。

単語の扱いかた
・発話にはbroken-off word(単語のいいかけ)やfiler(英語:uh、日本語:えーっとみたいな単語に間に出てくる語)をどうするか考える必要がある。
・大文字と小文字を区別するか
・レンマ化するか(cats と catを同じとするか)

word typeは単語の種類(ユニーク)、word token は単語の数(のべ)

2.3 Corpora
言語、方言やジャンルや書き手のでモグラ情報(年齢、性別、人種、社会的地位)や時代によってコーパスの内容は変わってくる。
そのため、言語処理のモデルを考える時は言語の性質を考えた上で実装する必要がある。

2.4 Text Normalization
NLPの前に前処理が必要である。
どんなNLPでも以下の3つの前処理は共通して実行される。
1.テキストのトークン化
2.ワードの形式の標準化
3.テキスト内の分の区切り

2.4.1 Unixを使ったトークン化と標準化
省略

2.4.2 トークン化と標準化
トークン化 ・句読点の扱い
句読点には決して良い場合とダメな場合がある。
例えば「,」(コンマ)は節の区切りである場合意味を持たないが、
Ph.D.のような場合意味を持つ。
コロンも$45.55の時には小数点という意味を持つ。
同様にURLやハッシュタグやメアドなどでも同じ問題がある。

アポストロフィーの扱い
we’re ⇨ we areに変更していいのか?

・multiword(複数の単語で構成される語)の扱い
New Yorkのような間にスペースがあるものをどう扱うか

・Penn Treebank tokenizationが標準的なtokenizer

標準化 ・normalized form(様々な形式を持つ語に関して統一させる処理)
例:USA, US

・case folding
大文字を小文字に変更する

一般的にtokenize/normalizeは正規表現オートマトンで定義されていることが多い。
参考ページ:http://www.jaist.ac.jp/~kshirai/lec/i223/02.pdf

例:NLTK

2.4.3 Word Segmentation in Chinese
中国語を単語に分けるときにはMaxMatchという手法が用いられ、
前から順に一番単語数の多いものを選んでいくアルゴリズムである。
ただ、英語ではうまくいかないことが多い。

2.4.4 Collapsing words: lemmatization and Stemming
NLPには形式は異なるが同じものとして処理したいタイミングがある。
例えば、ウェブ検索で、「woodchucks」と検索した時に
「woodchucks」は出るが、「woodchuck」が出ないと不便である。

レンマ化は表面の形式が異なるものの、同じrootを持つものを統一する。
レンマ化には形態学上の解析でできる。
morphemeと呼ばれる小さい単位で単語は構成されており、
morphemeは単語の主要な意味を表すstemと追加的な意味を加えるaffixで構成される。
例:catsを分けると、cat⇨stem s⇨affix

・The Porter Stemmer
レンマ化のアルゴリズムは複雑になるため、シンプルだが雑な方法が取られることがある。
そこでは最後のaffixを削除するという方法をとり、それはstemmingと呼ぶ。
最も有名なものの一つはPorterである。
処理例:atinal⇨ate(relational⇨relate)

2.4.5 Byte-Pair Encoding
stemmingやlemmatizingには副産物があり、トレーニングデータにない未知語に対しても対応できるようになる。
ただ、場合によっては元々の形式を維持したい場合もある。
この時Byte-Pair Encoding(BPE)を使うことで頻度が多いワード形式を保存することができるようになる。
具体的にはワードを文字で区切り、多く見られる文字を順々に合体させるアルゴリズムである。

2.4.6 Sentence Segmentation
文の区切りには句読点が有効であるが、
必ずしもその区切りが正しいとは限らない。
Mr.のようにピリオドが文末でない場合がある。
近年ではこの判別には機械学習が用いられることが多い。

2.5 Minimum Edit Distance
NLPの多くは2つの文字列がどれくらい似ているかと関係する。
例:スペリングの修正

edit distanceは文字列の類似性を測るときに使える。
2つの文字列に対して、片方からもう片方までに変更する際にどれだけ処理が必要なのかで測る。
処理は代入、削除、置換などである。

有名なレーベンシュタイン距離では上記の処理にそれぞれ1のコストを付与する。
アルゴリズムによっては、処理内容でコストを変更する。

2.5.1 The Minimum Edit Distance Algorithm
最小のDistance Algorithmを発見するにはviterbiアルゴリズムやCKYアルゴリズムなどの動的なプログラミングが利用できる。
アルゴリズムの概説は省略

2.6 Summary
正規表現はパターンマッチングの強力なツール
トークン化や標準化は正規表現の組み合わせやオートマトンで表現される。
・Porter algorithmはシンプルで効率てきなstemmingの方法
・minimum edit distanceは2つの文字列を片方からもう片方に変更するの必要な手順を表し、
 その計算にはdynamic programmingが用いられます。