3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINEの日本語言語モデルを使って、とりあえずBotを作ってみよう(Power Automate)

Last updated at Posted at 2023-08-18

はじめに

先日発表された「LINEのNLP Foundation Devチームの36億パラメータの日本語言語モデルを公開しました」を参考に、APIを検証してみました。

内容が浅かったのでText Generateについて詳しく見てみましょう。

APIのParametares

Hugging Faceの下記のページにAPIの詳細が記載されています。

Text Generation taskをテーブルに変換

英語で少しキャッチアップし辛いので、日本語に変換してみます。

Key 必須/任意 説明
inputs 必須 テキスト生成の元となる文字列を指定します。
parameters 任意 テキスト生成の方法を指定するための辞書です。以下のキーを含みます。
top_k 任意 新しいテキストを作成するためのサンプル操作内で考慮されるトップトークン数を定義する整数です(デフォルト: None)。
top_p 任意 テキスト生成のためのサンプル操作内のトークンを定義する浮動小数点数です(デフォルト: None)。確率の合計が top_p を超えるまでトークンを追加します。
temperature 任意 サンプリング操作の温度を定義する浮動小数点数です(デフォルト: 1.0)。1.0は通常のサンプリングを、0.0は常に最高スコアを取得を意味します。
repetition_penalty 任意 生成中にトークンが使用される回数に応じてトークンを罰するための浮動小数点数です(デフォルト: None)。
max_new_tokens 任意 生成される新しいトークンの最大数を整数で指定します(デフォルト: None)。入力の長さは含まれず、生成されるテキストの大きさを見積もります。
max_time 任意 クエリが最大で受けるべき時間を秒単位で指定する浮動小数点数です(デフォルト: None)。ネットワークのオーバーヘッドを考慮してソフトリミットを設定します。
return_full_text 任意 結果に元のクエリを含めるかどうかを指定するブール値です(デフォルト: True)。Falseに設定すると、結果に元のクエリは含まれません。
num_return_sequences 任意 返される生成提案の数を整数で指定します(デフォルト: 1)。
do_sample 任意 サンプリングを使用するかどうかを指定するブール値です(オプション: True)。使用しない場合は貪欲なデコーディングが行われます。
options 任意 出力オプションを指定するための辞書です。以下のキーを含みます。
use_cache 任意 リクエストを高速化するためのキャッシュレイヤーを使用するかどうかを指定するブール値です(デフォルト: true)。
wait_for_model 任意 モデルが準備できるまで待つかどうかを指定するブール値です(デフォルト: false)。503エラーを受け取った後にtrueに設定することを推奨します。

完全に整えると下記の様なJSONを渡すイメージになるようです。

{
  "inputs": "これはテキスト生成の例です。",
  "parameters": {
    "top_k": 50,
    "top_p": 0.8,
    "temperature": 0.7,
    "repetition_penalty": 1.2,
    "max_new_tokens": 150,
    "max_time": 30.0,
    "return_full_text": false,
    "num_return_sequences": 3,
    "do_sample": true
  },
  "options": {
    "use_cache": true,
    "wait_for_model": false
  }
}

ただ検証をしてみているのですが、なかなか難しい。
下記の方々のnoteが本当に参考になり、Google Colabで実践してみたのですが、
outputの精度が大幅に異なります。

Google ColabはGoogleアカウントがあれば無料で使えますので、実践してみることをお勧めします。私もやってみました。

image.png

かなり物議が出そうな話題ですが、正直面白いです。

Text Generateは、やはりChat形式で実践するものなので、
Power Automate & LINELINE BOTを作ってみましょう。

作成に入る前に

LINE BOTの作成に関するコンテンツは、本当に沢山あり、私が書いてもただの焼き増しになります。
個人的に尊敬している方の記事をご紹介するので、是非LINE側の設定はこちらを参考にしてみてください🙇

私は Power Automateに焦点を当てて記事を書いていきます。

Power Automateの作成

1. HTTP 要求の受信時

カテゴリは「自動化したクラウドフロー」になります。
トリガーは「要求」 > 「HTTP 要求の受信時」です。

image.png

Power Automateの進化のスピードは本当に速く、トリガーも加速度的に増えていきます。検索 によって見つけるほうが、時短につながります。

image.png

HTTP POSTのURLについて

こちらにつきましては、私のJSONをコピーしていただくか、一度、フローを保存するとURLが自動作成されます
LINEのWebhookを送信してみると、サンプルのペイロードを使用してスキーマを生成する の機能が
利用できます。

image.png

自動作成されたPower AutomateのHTTP POSTのURLをこちらの、Webhook URLに設定することで
LINEからPower Automateにメッセージを送ったときに、Power Automateが動きます。

実施後の画面から、受け取ったJSONを使うことでサンプルのペイロードを使用してスキーマを生成する
利用できます。

ちなみに私の設定値は下記になっております。
[ 同じ値になると思いますので、下記のをコピーしても問題ないですが自前で調べる方法として共有しておきます ]

要求本文のJSON スキーマ
{
    "type": "object",
    "properties": {
        "destination": {
            "type": "string"
        },
        "events": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "type": {
                        "type": "string"
                    },
                    "message": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string"
                            },
                            "id": {
                                "type": "string"
                            },
                            "text": {
                                "type": "string"
                            }
                        }
                    },
                    "webhookEventId": {
                        "type": "string"
                    },
                    "deliveryContext": {
                        "type": "object",
                        "properties": {
                            "isRedelivery": {
                                "type": "boolean"
                            }
                        }
                    },
                    "timestamp": {
                        "type": "integer"
                    },
                    "source": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            }
                        }
                    },
                    "replyToken": {
                        "type": "string"
                    },
                    "mode": {
                        "type": "string"
                    }
                },
                "required": [
                    "type",
                    "message",
                    "webhookEventId",
                    "deliveryContext",
                    "timestamp",
                    "source",
                    "replyToken",
                    "mode"
                ]
            }
        }
    }
}

2. アクセストークンを変数として格納する

image.png

LINEHugging FaceのAPI Keyを格納している変数です。

絶対に流出してはいけない値になります。

  • LINEにつきましては、紹介させていただいた記事
  • Hugging Faceにつきましては前回の私の記事を参考にAPI Keyを取得してください。

3. Hugging Faceでテキストを作成し、LINEで返す

image.png

LINEから受信する値はArray (配列)型のデータになります。
実質的には、1回分のみの処理になると思いますが、一旦こちらで進めます。

3. TEXE GENERATE (japanese-large-lm)をAPIで利用する

image.png

こちら前回の紹介と同様ですね。

転載しておきます。

項目
方法 POST
URI https://api-inference.huggingface.co/models/line-corporation/japanese-large-lm-3.6b

ヘッダーは下記の通りです。

Key Value
Authorization Bearer {API key}

本文

{
  "inputs": "@{triggerBody()['text']}"
}

投稿する値は、上段で説明したパラメーターによって工夫できると思いますが、
本記事では一旦割愛してお送りします。

4. LINE BOTでテキストをチャンネルに投稿する

image.png

項目
方法 POST
URI https://api.line.me/v2/bot/message/reply

ヘッダーは下記の通りです。

Key Value
Content-Type application/json
Authorization Bearer {LINEのAPI key}

本文

{
  "messages": [
    {
      "text": "@{body('HTTP_japanese-large-lm')[0]?['generated_text']}",
      "type": "text"
    }
  ],
    "replyToken": "@{items('Apply_to_each')?['replyToken']}"
}

Point 1

JSONの中に、Hugging FaceのAPIで生成したテキストを挿入しますが、こちらもArray (配列)型のデータです。
実質的に作成される配列の要素は1つになっていることから、Power Automateの関数で文字列に変換しています。

@{body('HTTP_japanese-large-lm')[0]?['generated_text']}

※ HTTP_japanese-large-lmの部分は、直前のアクションの名前です。

Point 2 replyTokenについて

replyTokenについては、HTTP 要求の受信時のトリガーから値が取得できます。

image.png

さあ、動かしてみよう!

この言語モデルは、「途中まで文字列を書いて、そのあとに推察される文字列を補完する」という方法で活用できます。

Parametareが上手く行っていないのか、Pythonで実現するほどの面白さは作れません。
挑戦はまだまだ続きますね!

LINE BOTのすゝめ

今回LINEを取り上げましたが、LINE BOTの作成は、本当にユーザーフレンドリーでやり易いです!
今回はPower Automateで紹介しましたが、Google Apps Scriptでも簡単に実装出来ます!

BOTを始めてみようかな!の最初の選択に最適なので、是非試してみてくださいね♪

この情報をもとに、TeamsやGoogle Chatも含めて応用の幅は広いので、
ドンドンチャレンジしてみましょう!

私は、Pythonで実施したくらいの面白い回答が出る方法を模索します・・・。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?