4月から仕事上の環境が変わって、文章を扱う場面が増えた。このため、これまでは主として数値解析系の機械学習モデルを触っていたが、今後は言語系の機械学習を学んでみよう、と思い勉強を始めた。数値解析系とは随分勝手が違うので勉強することが多い。以下、自分の頭の整理も含めて日本語文章の自然言語処理について記載する。
自然言語系の処理は2017年のTransformerの出現により大きく変わった。その後、2018年BERT、2020年T5等を経て最近では人間以上の能力を発揮するようにもなってきた。TransformerはAttentionの概念を用いて文章の逐次処理から並列処理への流れを作ったもので、処理速度が大きく精度も高いというものであった。その後このTransformerをベースとして新しいモデルが開発された。Transformerの詳しい解説は下のもの。

その中でもBERTは自然言語処理で当時世界最高の性能を示したものだ。BERTは、Bidirectional Encoder Representations from Transformersの略で、その特徴はBidirectional、つまり事前学習において推論の方向が下り方向だけでなく上り方向からも推定を行わせるものである。BERTでは、自然言語を用いた事前学習をさせ、最終的にファインチューニングをして自然言語処理をさせる。具体的なBERTの中身について理解することは難しいが、下に詳細が解説されている。その名前が示すようにTransformerから派生したものである。なお、Googleの検索は2019年よりBERTが使用されて、性能がかなり上がったとのこと。

BERTはその後Multiligual BERTとして多言語に対応したが、それでは日本語に対応できているかというとそうでもないようだ。英語で事前学習させた後日本語でファインチューニングして日本語をどの位理解できるようになるかということを検証した下の報告によると、英語と日本語のような語順が変わる言語間では正答率が約50%まで低下してしまうことが報告されている。
つまり日本語にBERTを適用するためには日本語で事前学習させる必要がある。このため日本語の大量の文章でBERTに事前学習させたモデルが作成されている。現実的にはこれらを用いることで初学者であってもBERTの恩恵を被ることが可能となる。下にフリーで使用できる日本語の大規模事前学習モデルが掲載されている。大規模日本語のサンプルデータとしてはWikipediaが使用されることが多いようだ。
更にその後の動きとしてはSentence BERTやSentence Transformersのような、文章単位で特徴量を抽出してより文章としての意味合いを検知するような仕組みも採用されている。更にSentence BERTを日本語で使用できるようにする日本語モデルも公開されている。下にその日本語モデルと、それを使用するためのPythonのコードも掲載されている。

最新の技術、知見を簡単に使用できる環境となっているのは非常に有難い。この分野での動きは早くて1年あるいは半年おきに新しい動きが出ている感じで、キャッチアップするのが大変ではあるものの、精度と速度が改善されているので試してみるのが楽しみだ。
#SentenceBERT #SentenceTransformers #Transformer

コメント