画像解析

手話解読アプリの要素技術(2)

アプリのゴールは、スマホカメラで手話を撮影し、汎用AIを使って手指骨格座標取得し、骨格座標を(オリジナル手話用AIモデル)を使って手話トークンに変換し、解読結果を文字情報や音声情報でリアルタイムにユーザーに返す、こととします。このTopicは、骨格座標データから手話トークンを推定するための(オリジナル手話用AIモデル)を構築する流れを紹介します。人物画像から骨格座標データを取得する方法はオープンソースでいくつか提供されていますが、このアプリではiOSに標準搭載されているVisionフレームワークを使っています。手指や体骨格の特徴点座標の取得に関しては以下の公式ビデオで紹介されています。Detect Body and Hand Pose with Vision(WWDC2020)VisionのHand Poseで、手の関節座標を取得できる。同時にBody Poseで骨格座標を取得することができるので、体骨格に対しての相対的な位置関係も取得できる。数フレーム分のデータを集めれば、手の位置、手の形、手の動きをデータ化することができる、と考えられます。なお実際にデータを取得するにはノウハウが必...
画像解析

手話解読アプリの要素技術(1)

受託開発で進めている手話解読アプリを構築する上での核となるアイデアを紹介します。手話を構成する要素としては、表情や口の動き等も欠かせない要素ではありますが、手の位置、手の形、手の動きが最も主要な要素と言えます。そしてこの3つの要素で表される手話最小単位(ここでは「手話トークン」と呼びます)が時間的にどのような順番で現れるかで、単語として、さらには文章としての意味を構成していると考えることができます。手話解読アプリを開発するにあたり、上述の流れを時間的に遡っていく方法で必要な要素技術を定義していくこととします。単語や文章を表現する最小単位を把握し「手話トークン」とする。手話動画から手話トークンに対応する動画を収集する。(手話から切り出していく)手話トークン動画に対して両手の特徴点座標(片手21点、両手42点)を取得する。(手の形とての位置を表すデータ)数フレーム分の上記特徴点座標データを1まとまりとしたデータをインプットとし、アウトプットを手話トークンとして機械学習する。機械学習したモデルをスマホに組み込み、リアルタイムで手話トークン検出する。検出された手話トークンの順番を元に単語や文章...
tts

pyopenjtalkへのユーザー辞書登録

こんにちは、eQOL(イーキュオル)の山下です。今回はOpenJTalkへのユーザー辞書登録、特にPythonのラッパーであるpyopenjtalkへのユーザー辞書登録について紹介します。OpenJTalkはMecabを利用していますので基本的にはMecabへのユーザー辞書登録なのですが、OpenJTalkがTextToSpeech(TTS)のライブラリなので、若干Mecab辞書と異なる点があります。その点を中心に解説していきたいと思います。OpenJTalkとは名工大や情報通信研究機構(NICT)が中心となって作ったオープンソースのTTSシステムで、簡単なコマンドやプログラミングインタフェースを通じて利用できます。テキストから音声合成を行う際、使いやすいAPIやコマンドラインツールを提供し、幅広い環境で利用可能です。また、カスタマイズ性が高く、ユーザーが音声の特性や発音を調整できる柔軟性も持ち合わせています。ESPnetとOpenJTalkESPnetは、End-to-Endの音声処理のためのオープンソース・ツールキットです。言語翻訳、音声認識、音声合成など、多岐にわたる音声処理のタ...
tts

Mecabへのユーザー辞書登録

こんにちは、eQOL(イーキュオル)の山下です。テキストを自動で読み上げるTextToSpeechが身近な存在になりつつあります。youTubeの音声が自動読み上げ音声であることも多くなりましたが、時折人間ではありえないような読み間違えがあリます。これらはあらかじめ人間が文章をチェックして読みを修正できれば問題はありませんがマンパワーが課題となります。さらにChatGPTなどの生成AIとの組み合せとなると、人間が介在して読みを補正することは現実的ではありません。生成AIが立派な文章を生成しても読み違えが起こるようでは、サービス自体への信用にも影響が出かねません。テキストを「読み」に、そして「発声」へと変換する仕組みには、形態素解析という日本語ならではの技術が必要で、それを行う代表的なオープンソースライブラリとして知られるのがMecabです。テキストを音声に変換する日本語TextToSpeech(TTS)代表的オープンソースのOpenJTalkもMecabを利用しています。Mecabの辞書をカスタマイズしてみよう、というのか今回のブログの内容です。MeCab で楽にシステム辞書に単語を追...
アプリ

Translate Text in Firestore

こんにちは、eQOL(イーキュオル)の山下です。本日は行政等の窓口で使える通訳アプリの開発の際にとても便利だったFirebaseの機能拡張について紹介します。通訳アプリはスマホOSに標準装備されている時代ですが、それでも行政や病院などの窓口で使いやすい専用アプリの需要があります。今回は多国語対応の通訳システムをGoogleのクラウドサービスであるFirebaseを利用してGoogle Translation APIを簡便に利用する方法を紹介します。FirebaseとFirestoreFirebaseはGoogleが提供する開発者向けのプラットフォームで、アプリの開発、改善、運営をサポートする統合ツール群です。Firebaseには多岐にわたる機能がありますが、その中でFirestoreはNoSQLクラウドデータベースのサービスです。スマホネイティブアプリやwebアプリを作成する際のバックエンド機能を実装する際には極めて便利なツールと言えます。FirestoreGoogle Translation API翻訳系のAPIといえば、まず思い浮かぶのはこれではないでしょうか。Googleの翻訳サ...
アプリ

歌詞から曲名を当てるクイズアプリ(ミスチル版)

こんにちは、eQOL(イーキュオル)の山下です。私事で恐縮ですが、家族でMr.Childrenのファンです。youTubeのイントロクイズに飽き足らず、末っ子の次女が中間イントロ(中間でもイントロというのか?)クイズアプリを作ってくれました。ファン歴が最も長い私ですが、子供達に完敗。「歌詞から曲名を当てるゲームだったら勝てる」と宣言し、このアプリを作りました。宣言通り、このゲームで私は家長としての威厳を取り戻しましたが、それ以上にゲームとしても結構面白い。もし貴方が(真の?)ミスチルファンでしたら楽しめること間違いなしです。無料で使えるwebアプリとして公開していますので、ぜひ一度試してみてください。Lyricアプリの制作過程と構成を簡単に紹介します。歌詞データの取得歌ネットというサイトで様々なアーティスト楽曲の歌詞を調べることができます。Pythonのスクレイピング機能を使ってミスチル全曲の歌詞を取得します。2023/11/5現在で258曲が登録されていました。Google Colaboratoryを使用しています。import requestsfrom bs4 import Bea...
生成AI

Rinna-3.6B を「天空の城ラピュタ」でLoRAファインチューニングしてみる

こんにちは、eQOL(イーキュオル)の山下です。36億パラメータの日本語LLMのRinna-3.6BをLoRAファインチューニングする方法を紹介したブログを参考に、「天空の城ラピュタ」のシータのセリフを学習させることを試みました。Google Colab で Rinna-3.6B のLoRAファインチューニングを試す元ブログでは、Hugging FaceのDatasetsで使えるkunishou/databricks-dolly-15k-jaを使ってファインチューニングをしていますが、このブログではオリジナル(?)のDatasetを用意してファインチューニングしてみます。ファインチューニング用データGoogleのSpreadsheetに次のようなデータを作成しました。outputがシータのセリフ。instructionはシータのセリフの前のセリフを「人物:セリフ」の形式で整形したテキスト。inputはその会話の場面や背景、心情などを自分なりに解説したテキスト。実は、ラピュタのセリフは結構擬音が多く、流石に擬音を学習するのは良くないだろうと言うことでちゃんとしたセリフだけを残すと、データ...
生成AI

PEFT(Parameter-Efficient Fine-Tuning)解説

こんにちは、eQOL(イーキュオル)の山下です。ChatGPTなどの大規模自然言語モデル(LLM)の性能向上が著しいですよね。ChatGPTはGPT3.5やGPT4といった事前学習済みのAIモデルを対話用にファインチューニングして構築されたモデルです。事前学習では1000億を超えるパラメータを最適化する膨大な計算がなされていて、もはやちょっとした大企業でも手を出せない領域になっています。しかし安心してください。事前学習済みモデルは、人類共有の知的財産をとてもシンプルな戦略で学習したものであり、その成果物である事前学習済みモデルはオープンソースとして利用できるようになっています。この事前学習モデルは優秀な中高生レベルには賢いのですが、大人のマニアックな要求に十分に答えるにはさらに専門的に大学や社会で学んでいくことが必要なわけで、我々一般人がなすべき(我々のできる)ことは特定のタスク用にLLMをファインチューニングし活用することであると言っても過言ではないと思います。というわけで、このブログではLLMのファインチューニングを自分で手を動かして挑戦してみたい、という人向けに記事を書いていきた...