Googleが誇る自然言語処理モデル「BERT」のAIを簡単に作れるWebアプリを作ってみた



<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> でGoogleが誇る自然言語処理モデル「BERT」のAIをweb上で誰でも気軽に作れるようにしました🎉<br><br>①AIに学習させるテキストのラベルを設定<br>②学習データはツイッターから自動で収集<br>③AIがデータから学習<br><br>の３ステップで簡単！<br>みんなもAIを作って遊んでみてね！🙌<a href="https://t.co/Vnf0QITH1v">https://t.co/Vnf0QITH1v</a> <a href="https://t.co/mUbImOff6j">pic.twitter.com/mUbImOff6j</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1343203755659993088?ref_src=twsrc%5Etfw">December 27, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

---


こんにちは。
趣味でWebサービスの個人開発をしている、2z（Twitter： [@2zn01](https://twitter.com/2zn01) ）と申します。

ノーコードで誰でも簡単にAIを作れる「AIメーカー」というサービスを運営しています。

* AIメーカー      
https://aimaker.io/



# 今回作ったもの

今回は「AIメーカー」でGoogleが誇る自然言語処理モデル「BERT」によるテキスト分類のAIを簡単に作れる機能をリリースしましたので、ご紹介します。


以下の３ステップで誰でも簡単にテキスト分類のAIを作れます！

1. AIに学習させるテキストのラベルを設定
2. 学習データはツイッターから自動で収集
3. AIがデータから学習

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> でGoogleが誇る自然言語処理モデル「BERT」のAIをweb上で誰でも気軽に作れるようにしました🎉<br><br>①AIに学習させるテキストのラベルを設定<br>②学習データはツイッターから自動で収集<br>③AIがデータから学習<br><br>の３ステップで簡単！<br>みんなもAIを作って遊んでみてね！🙌<a href="https://t.co/Vnf0QITH1v">https://t.co/Vnf0QITH1v</a> <a href="https://t.co/mUbImOff6j">pic.twitter.com/mUbImOff6j</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1343203755659993088?ref_src=twsrc%5Etfw">December 27, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# 何ができるの？

指定したテキストを学習時に定義したカテゴリへ分類するAIを作ることができます。
分かりやすい用途としては、コメントのスパム判定などが考えられます。

試しに、ローランドさんの「俺か、俺以外か」をテキストから見分けるAIを作ってみました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ちなみに動画上で作成したAIはこちらです！<br><br>「俺か、俺以外か」<br>世の中には2種類の男しかいない。俺か、俺以外かをAIが判定します。 <a href="https://t.co/YeqBunZdzz">https://t.co/YeqBunZdzz</a> <a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> <a href="https://twitter.com/hashtag/%E4%BF%BA%E3%81%8B%E4%BF%BA%E4%BB%A5%E5%A4%96%E3%81%8B?src=hash&amp;ref_src=twsrc%5Etfw">#俺か俺以外か</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1343204067351224321?ref_src=twsrc%5Etfw">December 27, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下のように、テキストやTwitterの直近のツイートやプロフィールなどから、AIによる診断を試すことができます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">作成したAIはこんな感じで簡単に試せます！<br>ぜひ遊んでみてください！<br><br>「俺か俺以外か」の診断結果<br>世の中には2種類の男しかいない。俺か、俺以外かをAIが判定します。<br>俺：82％<br>俺以外：18％<br> <a href="https://t.co/Ey7nEpSH6k">https://t.co/Ey7nEpSH6k</a> <a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> <a href="https://twitter.com/hashtag/%E4%BF%BA%E3%81%8B%E4%BF%BA%E4%BB%A5%E5%A4%96%E3%81%8B?src=hash&amp;ref_src=twsrc%5Etfw">#俺か俺以外か</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1343204506725621760?ref_src=twsrc%5Etfw">December 27, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以下のURLより、実際に試せますので、ぜひ遊んでみてください。

* 俺か俺以外か      
https://aimaker.io/app/text-classification/id/5798
* 駆け出しエンジニア判定      
https://aimaker.io/app/text-classification/id/5877
* プログラミング適正診断      
https://aimaker.io/app/text-classification/id/5758
* 会社員・フリーランス診断      
https://aimaker.io/app/text-classification/id/4028


# 画面イメージ

## AIモデル登録画面

![AIモデル登録画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/9d5fa017-236e-64cf-f9ad-8b282dee6f01.png)


## 学習データの登録画面

![学習データの登録画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/acab9c7e-0a85-6525-cd58-70438d71b312.png)


## モデルの学習画面

![モデルの学習画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/d35d7058-54d4-d134-33c7-b6ddde5d0ea5.png)


## モデルの学習履歴

![モデルの学習履歴](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/c49a5e8f-5b76-3a03-00a2-f850a372b48b.png)


## モデルの推論画面

![モデルの推論画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/5b96a9c2-7d6b-4bcc-304b-6755f2d1a2f9.png)


## モデルの推論結果画面

![モデルの推論結果画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/5613b8f4-305d-8cae-3722-020684c96771.png)



# システム構成図

システム構成図は以下の通りです。

![AIメーカー-システム構成図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/6d3a1c0a-e044-b3c1-ad3d-da1cff89057c.png)


Amazon Web Services（以下、AWS）を使ってサービスを構築しました。

大きな構成としては、主にユーザからのリクエストを受け付けるフロントサーバと機械学習の処理を取り扱うバックエンドサーバの2つです。


# 使用技術

### Linux

クラウドのホスティングはAWSで、EC2でサーバを立てています。
サーバのOSはLinuxでフロントサーバ側はAmazon Linux2、バックエンドサーバ側はUbuntuを使っています。

### Apache

webサーバはApacheを使っています。
Nginxもありますが、Apacheは普段から使っており、設定方法も把握しているため、いつも通りの安定の選択としました。


### MySQL（Amazon RDS）

データベースはMySQL（Amazon RDS）を使用しています。

### NFS（Amazon EFS）

各インスタンスでファイルを共有するため、NFS（ネットワークファイルシステム）として、Amazon EFSを使用しています。

### PHP

フロントサーバのプログラムはPHPを使って実装しています。

### Python

バックエンドサーバのプログラムはPythonを使っています。
また、フロントサーバ側からバックエンド処理を呼び出すためのAPIは、「FastAPI」というフレームワークを使って実装しています。

* FastAPI    
https://fastapi.tiangolo.com/ja/

### ktrain

「ktrain」はディープラーニングを簡単にローコードで使えるライブラリです。
TensorFlow, Keras, transformers, scikit-learn, stellargraphなどの軽量ラッパーで、たった数行程度のコードでファインチューニング、推論などを実行することができます。

* ktrain      
https://github.com/amaiya/ktrain

### HuggingFace Transformers

Hugging Face社が提供している、自然言語処理のディープラーニングのフレームワークです。
TensorFlowとPyTorchの両方に対応していて、BERTなどの最先端のアルゴリズムを手軽に試すことができます。
今回はktrainを通して利用しています。

* HuggingFace Transformers      
https://github.com/huggingface/transformers


### TensorFlow

TensorFlowは、Googleが開発・オープンソースで公開されている、機械学習のフレームワークです。
今回はktrainを通して利用しています。

* TensorFlow      
https://www.tensorflow.org/?hl=ja


# 実装で工夫した箇所など

## 1. 学習データの自動収集

AIのモデル作成で大変なのが学習データの収集です。
AIメーカーではとにかく手軽に誰でも試せるように、ツイッターAPIを使ってラベル名をもとにツイートを自動収集し、学習データとして利用することができます。

また、自動収集だけでなく、CSVアップロードによる学習データの登録にも対応しています。

![学習データの登録画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/acab9c7e-0a85-6525-cd58-70438d71b312.png)


## 2. 学習モデルによる自動アノテーション機能

学習データ（教師データ）を用意する際のラベル付け、大変ですよね、、？

そこで、学習済みのモデルから自動でアノテーション（ラベル付け）する機能を用意しました。

![自動アノテーション機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273248/f087ecf6-fe73-893c-b329-808a307e4bc6.png)

自動アノテーション機能を使った場合は、そのラベル付けが正しいかをチェックする必要がありますが、ゼロからラベル付けするよりも、アノテーション作業の手間を減らすことができます。


# API

作ったAIは、APIを使ってwebサービスやアプリに組み込めるようにしています。
自分が作ったAIはもちろん、他の方が作って公開されているAIもAPIでご活用頂けます。


## APIの呼び出し方法

### HTTPリクエスト

POST https://aimaker.io/text/classification/api 

### クエリパラメータ

| パラメータ | 型 | 説明 |
|:---|:---|:---|
| id | integer | モデルのIDを指定してください（必須）|
| apikey | string | APIキーを指定してください（必須） |
| text | string | 分類したいテキストを指定してください（必須） |


モデルID、APIキーについては、AIメーカーの各モデル画面の「APIを使う！」をご覧ください。
https://aimaker.io/app/text-classification/id/5877

各モデルは以下URLのみんなのAIから検索頂けます。
https://aimaker.io/app/search


### CURLでAPIを実行する場合

`curl -X POST -F id=$id -F apikey=$apikey -F "text=テキスト" "https://aimaker.io/text/classification/api"`

### 成功時のレスポンス

*JSON形式*

```json-doc

{
    "state": 1,
    "text": "テキスト",
    "labels": {
        "0": {
            "score": 0.997,
            "label": "ラベル0"
        },
        "1": {
            "score": 0.003,
            "label": "ラベル1"
        }
    }
}
```

### 失敗時のレスポンス

*JSON形式*

```json-doc

{
    "state": 0,
    "messages": [
        "不正なアクセスです。"
    ]
}
```


## APIの活用例

あくまで一例ですが、以下のような活用が可能かと思います。

* webサービスにテキスト分類AIを組み込む
* アプリにテキスト分類AIを組み込む
* LINE BOTなどでテキスト分類の診断Botを作る

AIメーカーとそのAPIを使うことで、自分でテキスト分類AIのモデルを作る手間を省いてシステムに組み込めるので、ぜひご活用ください。


# 最後に

今回は「AIメーカー」でGoogleが誇る自然言語処理モデル「BERT」によるテキスト分類のAIを作れる機能について、ご紹介しました。

以下のURLよりぜひAIを作って、試してみてください！

■URL
https://aimaker.io/

皆さんもぜひ試して頂いた際には、試した結果をTwitterにシェアして頂けると嬉しいです！


また、このサービスに少しでも興味をもって頂けましたら、ぜひともフォローやいいね、リツイートで応援お願いします！

* はてなブックマーク
    * [この記事をブックマーク](https://b.hatena.ne.jp/entry/s/qiita.com/2zn01/items/16f0227a8bb1923b428d)
    * [「AIメーカー」をブックマーク](https://b.hatena.ne.jp/entry/s/aimaker.io/)
* Twitter： [@2zn01](https://twitter.com/2zn01)
* Qiita： [@2zn01](https://qiita.com/2zn01)
* note： [@2zn01](https://note.mu/2zn01)


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/AI%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#AIメーカー</a> でGoogleが誇る自然言語処理モデル「BERT」のAIをweb上で誰でも気軽に作れるようにしました🎉<br><br>①AIに学習させるテキストのラベルを設定<br>②学習データはツイッターから自動で収集<br>③AIがデータから学習<br><br>の３ステップで簡単！<br>みんなもAIを作って遊んでみてね！🙌<a href="https://t.co/Vnf0QITH1v">https://t.co/Vnf0QITH1v</a> <a href="https://t.co/mUbImOff6j">pic.twitter.com/mUbImOff6j</a></p>&mdash; 2z / AI MAKER (@2zn01) <a href="https://twitter.com/2zn01/status/1343203755659993088?ref_src=twsrc%5Etfw">December 27, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



普段は以下のようなサービスを開発・運営していますので、興味があるものがございましたら、ぜひとも使ってみて頂けると嬉しいです！

* AIメーカー
https://aimaker.io/
誰でも簡単にAIを作ったり、試したりできるサービスです。
使ったAIを活用するためのAPIも提供していますので、ぜひご活用ください。

* waifu2x-multi
https://waifu2x.me/
画像・動画を高画質化・拡大・ノイズ除去できるサービスです。

* 文字起こすくん
https://text.aimaker.io/recognize-bot/
画像、音声、動画をアップするだけで簡単に文字起こし・書き起こしできるサービスです。話者の識別も可能になりました！    

* テロップメーカー
https://text.aimaker.io/recognize-video/
動画をアップロードするだけで、動画内の音声を認識して文字起こしを行い、自動で動画に字幕・テロップをつけるサービスです。こちらも話者の識別が可能になりました！

* Clubhouse Watch
https://watchclub.house/
Clubhouseの配信情報・人気ランキングを見たり、ルーム検索機能で話題のルームや興味のあるルームを探せるサービスです。