AutoTrainでテキスト分類


# AutoTrain🚂🚂🚂とは

ノーコードでテキスト分類や要約などがstate-of-the-artできるサービスです。AutoNLPだとググラビリティが低かったので名称が変わったのだと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/742fcf02-89b3-df7f-ca59-c9170151eb18.png)

https://huggingface.co/autotrain

https://twitter.com/SimonBrandeis/status/1506346321795592197

# データ準備

livedoorニュースコーパスのタイトルと本文を結合して、9つのカテゴリを分類しようと思います。

https://www.rondhuit.com/download.html#news%20corpus

```python
!wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz
!tar xf ldcc-20140209.tar.gz

import glob
import pandas as pd

data = []

for path in glob.glob('text/**/*-*.txt'):
  with open(path) as f:
    data.append({
        'url': next(f).strip(),
        'datetime': next(f).strip(),
        'title': next(f).strip(),
        'body': '\n'.join([line.strip() for line in f if line.strip()]),
        'label': path.split('/')[1]
    })

df = pd.DataFrame(data)
df['title_body'] = df["title"] + '\n' + df["body"]
df.to_csv('livedoor_news.csv', index=False)
```

コードはこちら

https://colab.research.google.com/drive/1Tohhc2YfZfpzu_cDUj5_C40Pujg2B34V?usp=sharing

## プロジェクトの作成

**Text Classification (Multi-class)** と **Japanese**を選択し、プロジェクトを作成します。

https://ui.autonlp.huggingface.co/new

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/4b191fc4-1e9c-5679-1a64-5cabd53da929.png)

## CSVファイルをアップロード
CSVファイルをドラッグ・アンド・ドロップし、`text:title_body`と`target:label`カラムを選択し、プロジェクトに追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/e5db0d59-3b06-b3a8-810e-7c48cc267d82.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/e2d064b5-60de-8713-7235-554b3b0c8ec2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/093489f4-e5fa-0a31-4e86-17f056f652c8.png)

**Go to trainings**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/4da336f9-74f5-677d-8f02-e70db8184a97.png)


# 学習
**Start models trainings**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/2cb4bb86-a00c-1366-9ab2-f4b6a3704c9e.png)

https://youtu.be/WhhcUrd6siM

# 推論
94.5%の精度で分類できました。modelをクリックし、model hubで推論できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/3de4a692-c0c2-d6f1-b207-26598f345a9b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/c1f0836a-f145-00aa-28d9-bf1575f6207d.png)

右側の入力ボックスで簡単に試すことができます。

[https://huggingface.co/jicoc22578/autotrain-livedoor_news-722922024](https://huggingface.co/jicoc22578/autotrain-livedoor_news-722922024)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/1ae1b0f1-948d-ab97-9526-5827d52d261b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/45dfe3bd-7406-a75a-9868-aa7676daa038.png)

## モデルをダウンロード

モデルをダウンロードすることでオフラインでも推論できます。

https://colab.research.google.com/drive/1iicBiqB6gw4_tJEwgNV0esEKqTGF6Hb9?usp=sharing

### モデルをダウンロード
```python
!curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
!sudo apt-get -qq install git-lfs
!git lfs install
#!git clone "https://$USERNAME:$PASSWORD@huggingface.co/jicoc22578/autotrain-livedoor_news-722922024" # set username/password for private model
!git clone https://huggingface.co/jicoc22578/autotrain-livedoor_news-722922024
```

### pipelineで推論

```python
!pip install -q transformers fugashi unidic_lite
from transformers import pipeline

text = 'Windows 11搭載PCを買ったら最低限やっておきたいこと'
pipeline("text-classification", "autotrain-livedoor_news-722922024")(text)
#[{'label': 'it-life-hack', 'score': 0.8320314884185791}]
```

#### 2値分類

```python
!git clone https://huggingface.co/abhishek/autonlp-japanese-sentiment-59363
predict = pipeline("text-classification", "autonlp-japanese-sentiment-59363")
predict('何もしてないのに壊れた')
# [{'label': 'negative', 'score': 0.9975911378860474}]
predict('この商品はとても良いです🤗')
# [{'label': 'positive', 'score': 0.9995431900024414}]
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/18ffdfda-2337-ac2c-1635-fffe1733fa8a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/2c39ab49-d871-bda3-7168-034e182ef73c.png)



# まとめ
- クレカ登録しない限り無料で使えてとても便利
- curlでpython環境がなくても使える
```bash
curl -X POST -H "Authorization: Bearer $YOUR_API_KEY" -H "Content-Type: application/json" -d '{"inputs": "raytrek、Core i7-12700HとRTX 3070 Tiを搭載するノートPC"}' https://api-inference.huggingface.co/models/jicoc22578/autotrain-livedoor_news-722922024
```
- AutoML Natural LanguageだとモデルをダウンロードできないがAutoTrainならダウンロードできてオフライン環境で動かせる。predictにお金がかからない。

# AutoML Natural Language
同じデータを**AutoML Natural Language**に入れてみました。
6時間の学習したところ、平均適合率が0.994になりました:rocket:
2,400円かかりますが、精度を求めるのであらばオススメです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/902aec53-17b2-4a7a-7488-6d450a37e3ce.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/aada3608-8c90-e476-72dc-b23c25d6b4c5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/9442613a-ef53-7e4e-1718-ca8d8c122479.png)
<details><summary>more</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/065f484f-c3ab-5627-d34f-41b0d7864d67.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/bf092d59-7658-195a-a52c-cdfee84dcf43.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/375f0c77-ed8c-3ddb-ef2a-5b85ee841748.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/a495f4a6-62bd-8915-f1d7-8bc68ebac41a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208363/dceb6b25-b5cf-5ab3-2b86-114dd2161dfa.png)
</details>