自然言語処理技術を活用したレシピの紹介

# はじめに

Axrossを運営している藤原です。

**[Axross](https://axross-recipe.com/recipes)** とは、エンジニアの"教育"と"実務"のギャップに着目し、「学んだが活用できない人を減らしたい」という想いのもと、ソフトバンクと社内起業制度にて立ち上げたサービスです。

現役エンジニアによる開発ノウハウやAI活用事例を"レシピ"として教材化し、実際にプログラミングで実装を追体験しながら学ぶことができます。AI/機械学習、またはその周辺領域をテーマにした、様々な業務領域やビジネスの課題解決に応用できる実践的な学習教材を150以上揃えています。（2021年7月時点）
Axross：https://axross-recipe.com
公式Twitter：https://twitter.com/Axross_SBiv
![Axrossアイキャッチ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/9f500e0e-a759-20e2-bb8b-480bbcfaaf9b.png)
今回は、自然言語処理の仕組みとその代表的な活用例を紹介し、Axrossのサービスで学べる実践的な **自然言語処理技術を活用したレシピ**をご紹介します。


# 自然言語処理とは
自然言語処理（Natural Language Processing、略称：NLP）は、**人間が日常的に使っている話し言葉や書き言葉（自然言語）を、コンピュータに処理させる一連の技術**のことです。

自然言語とよく対比されるのが、プログラミング言語で、コンピュータを制御するためのプログラムを記述するために利用します。自然言語は、人間が使う言葉であり、人によって言葉の意味が異なったり、文章の解釈が分かれたりするため、言語に曖昧性が存在します。一方で、プログラミング言語は、コンピュータが同じ表現を常に同じ解釈で、同じように制御するようにプログラムするための言語であるため、言語は一意で、曖昧性はありません。

このように自然言語は、人間同士の会話でも勘違いや伝達ミスが起きるくらい「言葉の曖昧さ」が含まれますので、自然言語をいかにしてコンピュータが、前後の文脈やその人の意図・感情等の要素をくみ取って認識できるか、といった部分が難しい点であり、肝となります。

## 自然言語処理の仕組み
自然言語処理はだいたい以下4つの行程を踏まえて処理されます。

* **形態素解析**：文＞単語＞形態素 というように、文章をそれぞれの意味の最小単位（＝形態素）に分割し、それぞれに品詞など各種情報を振り分ける作業をします。形態素解析は、主に形態素解析エンジンを使って、文章の中にある形態素の意味をデータとして抽出します。形態素解析の代表的なものは、無料で使えるMeCab, ChaSen, KyTea、商用で使われているRosette, IBM Watson, MARIMOなどが挙げられます。

* **構文解析**：形態素解析で分割した単語同士の関係性を解析し、依存構造（どの単語がどの単語に係るか）を発見し、隣接する語の関係に基づいてツリーとして図式化します。

* **意味解析**：構文解析までの手順でいくつかのパーツが出来上がりましたが、そのパーツが全体のどこに位置するかを確認する必要があります。意味解析は、「辞書」に基づいた意味を利用して正しい文を解析します。

* **文脈解析**：複数の文章に形態素解析と意味解析を行い、文同士の関係性を解析して、最終調整を行います。ここで、正しく文章の文脈を解析するために、文章の中にある形態素や単語の関係以上に隠された情報を取得する必要があり、「辞書」や「コーパス」の領域を超えて、様々な領域の知識・複雑な文の関係性を学習させる必要があります。ここで、「機械学習」や「ニューラルネットワーク」が絡んできて、AIに膨大な言語学習を行うことにより、高い精度の予測を実現します。

自然言語処理に関連する代表的なモデル・手法については、**[AIチャットボットを開発するレシピ紹介](https://qiita.com/Axross_SBiv/items/36c8c5976d89a5e2c28f)**もご参照ください。

## 自然言語処理の活用例
自然言語処理の技術は、検索エンジンやレコメンドシステム、SNSやレビューの解析、チャットボット、文章要約・生成、機械翻訳、文字起こし、感情予測・分類、可視化、知見抽出など、挙げたらきりがありませんが、業界・職種問わず様々な活用例があります。

Axrossに掲載されているレシピでも、様々なテーマで揃っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/e39e1ce5-02bf-8f54-7112-a9b57eff3ffa.png)

# 自然言語処理技術を活用したレシピの紹介
### [ニュース記事をword2vecでベクトル化して可視化するレシピ](https://axross-recipe.com/recipes/34)
投稿者：[@su2umaru](https://twitter.com/su2umaru)さん
Livedoorのニュース記事のデータセットを用いて、 **word2vec**でテキストデータをベクトル化し、そのベクトルを**主成分分析（PCA）**で低次元に圧縮してプロットすることで、記事のテキストを可視化します。

実務では、ニュース記事やレビュー等、テキストをベクトル空間に埋め込んで可視化するときに利用される手法です。

### [文書の「あいまい検索」機能をつくるレシピ](https://axross-recipe.com/recipes/110)
投稿者：[@tdualdir](https://twitter.com/tdualdir)さん

**fasttext**(word2vecの発展系)を使って、日本語文章の検索単語が完全に一致してなくても検索できる仕組み「**あいまい検索**」を作成します。自然言語処理の基本的なクレンジングや、fasttextの学習、文章のベクトル化、検索機能の作成などを学ぶことができます。

社内ドキュメントの検索システムや類似ドキュメントの検索・レコメンドシステムなどの実務で活用することができます。

### [材料の単語分散表現から知見を抽出するレシピ](https://axross-recipe.com/recipes/95)
投稿者：[@mi21216](https://twitter.com/mi21216)さん

業界として希少な**マテリアルズインフォマティクス**において、Pythonで単語分散表現から人間が予測しなかった知見を抽出する方法を学ぶことができます。

材料系に関する膨大な数の論文をスクレイピングして学習し、**mat2vec**というパッケージを活用して材料同士の類似度を分析、材料の類似度ネットワークのインタラクティブな可視化と単語分散表現の機械学習モデルの可視化、転移学習による精度向上を実演します。

### [GPT-3でタイトルや要約から記事本文を自動生成するレシピ](https://axross-recipe.com/recipes/135)
投稿者：[@benao_python](https://twitter.com/benao_python)さん

イーロンマスクの共同経営している人工知能研究所（OpenAI）が開発した文章生成言語モデル**GPT-3**を使って、タイトルや要約などの文章をデータとして与え、その記事の本文を自動生成させます。

GPT-3は、GPT-2よりも膨大な学習データが使われ、飛躍的にモデル精度・キャパシティが向上しました。このレシピでは、そんなGPT-3のAPI機能の中で、長文の自動要約と日本語の記事コンテンツを自動生成する手法を学ぶことができます。AIがブログやSNS文章のコンテンツを自動で作成する未来も、そう遠くはないかもしれません。

GPT-3による文章生成の応用 **[夏目漱石の「坊ちゃん」を学習させてマルコフ連鎖で新作を自動生成させるレシピ](https://axross-recipe.com/recipes/240)**や、日本語版GPT-2との精度比較**[Microsoftから独立した企業が公開した日本語版GPT-2でチャットボットを作るレシピ](https://axross-recipe.com/recipes/287)**も併せて学習してみてください。

### [日本語BERT事前学習モデルを使ってMultilabel Sentiment分類器を学習するレシピ](https://axross-recipe.com/recipes/216)
投稿者：@sbtoukouさん
**Twitter API**を使ってTwitterのツイートから日本語の教師データを集めて、**Hugging Face**で公開されている
BERTの事前学習モデル使って、モデルをFinetuningし、マルチラベル問題の分類器を作成します。

事前学習モデルを使ったマルチラベルデータの学習方法と、テキストから感情分類をするモデルの作成手法を学ぶことができます。


# 最後に

今回は、Axrossサービスで学べる実践的な、**自然言語処理技術を活用したレシピ** をご紹介しました。

Axrossのレシピを通して、プログラムの意味を考えながら写経（コードを実際に書き写す行為）し、実際に動くものをつくりながら学ぶことで、新たな知識の習得やスキルアップの一助になれれば幸いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620853/b48ed75c-2ed0-5598-0ca4-195626c30d70.png)
また、Axrossでは自身の持つ知を学習教材"レシピ"として寄稿いただけるエンジニアの方も募集しています！

見習いエンジニアから募った学びたい内容を**[ウィッシュリスト](https://docs.google.com/spreadsheets/d/1HTL3puxFN6GGt6ReOwEbkuRGty82q_IDkjcQ9WSkD8c/edit#gid=175640870)**として掲載しています。募集中のテーマからご自身で作成いただけるようでしたら、レシピ作成にご協力お願いいたします。