はじめに
2年ほど前から週1でQiitaへ投稿しており、本記事で100週連続投稿となりました。
区切りが良いので、前回の振り返り以降に公開した60本強を振り返ります。
開発環境整備
VS Code使いこなし
AIコーディングがどんどん実用的になっている時期(2025年4月以降)に、設定をいろいろ試行錯誤していました。
VS Codeのエージェント機能を試用したり、AIコーディング向けのPythonリポジトリテンプレートを作ったりしました。また、Cursor Agent導入前後の活動を比較しました。ちなみに、プルリクエスト数は2か月あたり13件から42件へ増えたと当時書いていましたが、今はおそらく2か月で100〜200件ほどのプルリクエストを作っているので、AIの大きな進歩を感じます。
またAIコーディングそのものではないですが、当時リリースされたOpenAI Agents SDKの使い方を試しました。
Copilot CLI
2026年になると、AIの性能向上に伴って、開発環境の中心がVS CodeなどのIDEからCLIへ徐々に移行してきました。
当時はCopilot CLIが圧倒的なコスパを誇っていたので、Copilot CLIの使いこなしをいろいろ検討していました。
- macからubuntuにsshしてCopilot CLIをつかうときの認証情報保存がややこしかったので、手順を整理した
- ローカルの画像ファイルを読み取れるか確認した
- Copilot CLIにLLM系のアプリを開発させるときにOpenAI APIキーの環境変数が連携できなくて困ったので、解決方法を検討した
- Copilot CLIで開発するための隔離されたDockerコンテナ環境を整備した
- Copilot CLIの質問にPCを閉じていても気付けるように、スマートフォンへの通知方法を検討した
その他
開発を進める中で詰まったことや方針で定まったことを、メモする感覚で、整理しました。
2つめの記事は今でもときどきリアクションがつきます。
- Qiita記事と画像のGit管理
- 自宅サーバへのn8n・Difyの導入とHTTPS化
- 情報量の多いスライド向けのMarp CSSとフッター画像の配置
- NASで動画の表示名とファイル名が食い違う問題を直したりしました。
RAG・エージェント関連の技術調査
RAG
RAGのときによくやる実装をライブラリの具体的な使い方を含めて記事化しました。
LLMの性能検証として、LLMの正確コピー(exact-copying)性能を検証したり、検索順位からhit rateやrecallなどを計算する処理したうえで、LLMが検索結果の妥当性を判定する能力を、MIRACLデータセットを用いて定量評価しました。RAGASの内部プロンプトを詳細に読んで理解したり、NVIDIA Metricsのcontext relevanceという指標を試したりもしました。
エージェント技術の論文読み
rStar2-Agentの論文やマルチエージェントが効果を発揮する条件を調べた論文も読みました。後者の論文は、エージェント構成によるベンチマーク精度の違いを、なるべく統制された条件で検証していて面白かったです。
空耳自動生成
趣味でやっている空耳自動生成関連の研究開発です。
「聞こえた音をそのまま文字にする」ための試行錯誤
通常の音声認識は、言語モデルによってもっともらしい文章に補正されます。空耳や替え歌の分析では、その補正よりも「実際にどのように聞こえるか」を取り出したいので、カナや音素を直接認識する方法を試しました。特に洋楽歌詞のカナ化を目指していましたが、まだまだハードルは高い状況です。
カナASRモデルを用いる方法と、漢字カナ混じり認識モデルを後処理でカナ化する方法を、無意味カナ文字列に対して、精度比較しました。無意味かな文字列では漢字カナ混じりを後処理でカナ化するほうが精度がよさそうでした。
一方で、本命である洋楽歌唱音源のカナ認識はいずれの方法でも、かなり難しかったです。強いて言えば、音素ASRをルールベースでカナに変換する方法が、耳で聞いた印象に近かったです。
カナ化はせずとも音韻的な類似度が取れたらよいのでふりがなWhisperの中間表現がどの程度、音韻特徴を反映しているか眺めてみましたが、意味や文脈の影響も大きく、実用レベルではなさそうでした。
カナ化ではないですが、テキストから得た複数の読み候補をCTC forced alignmentの尤度で比較し、歌唱音源に合う読みを選ぶ方法も実装しました。「明日」を「アシタ」と読むか「アス」と読むかのように、テキストだけでは決められない読みを音源から補えるようになりました。
意味と音の両方を扱いたい
「〇〇で歌ってみた」の替え歌生成では、意味はほぼ不要で、音韻の類似度のみが重要ですが、一般的なラップや替え歌では意味(文脈)と音韻の両方をバランスよく重視する必要があります。そこで、編集距離が近い単語の検索を高速化し、意味と音韻の両方を考慮した単語検索を試しました。短い単語では役立つ場合がありましたが、長い単語では音韻条件だけで候補が絞られ、意味の近い語が残りにくいという課題がありました。
音韻条件を加えたマスク単語予測や、言語モデルと母音フィルタを用いた韻踏み文生成、かな文字列で学習されたLLMによる韻生成も試しましたが、自然な文章を安定して作るところまではいきませんでした。
LLMは音韻を理解しているのか
LLMの音韻理解能力を、自作の音韻検索ベンチマークを用いて、詳細に評価しました。LLMの音韻能力が高ければ空耳生成に活用できると思われるためです。
素朴な設定では、LLMの音韻検索能力は簡単なルールベース手法に劣りますが、プロンプトと推論の有無などの軸でいろいろ比較したところ、音韻の比較手順を明示した推論モデルが、それまで最良だったルールベースのRecall@10を上回りました。
ここから、「LLMは本当に音韻を理解したのか、それとも文字列操作をしているだけなのか」が気になり、検証を続けました。
- 推論トークンの中で何をしているか観察する
- カナではなくローマ字を与えて性能を比較する
- LLMがカナの編集距離を計算できるか調べる
- カナをスペースで区切り、tokenizationの影響を減らす
- 継続的に比較できる評価関数を整備する
特に編集距離の検証では、複数文字が1トークンになる場合に誤りやすく、文字間をスペースで区切ると改善しました。一方、音韻検索全体では単純にスペースを入れるだけでは改善せず、個別能力の改善が最終タスクの改善にそのままつながるとは限らないことも分かりました。
研究の位置づけを整理するため、Phun-Bench、PhonologyBench、YOMI-Bench、P-CoTの論文も読みました。
Webアプリ改善
「〇〇で歌ってみた」替え歌作詞支援システム「Soramimic」でも使っている音韻類似度算出ロジックのパラメータを、操作結果が感覚と合うように調整しました。また、英語をカナ化するときに辞書外の単語にも対応するため、機械学習ベースの英語―カタカナ変換ライブラリも比較し、よさそうなものをアプリに取り込みました。
架空人物の生成と顔の多様性
空耳替え歌動画などで使える、権利面で扱いやすい人物素材を作るため、LLMで架空の科学者の名前、経歴、肖像画を生成するパイプラインを作りました。
生成結果を並べると、時代や地域が共通のグループ内で顔の多様性が出にくい(みんな同じ顔に見える)問題がありました。そこで、顔埋め込みとVLMで多様性を評価する指標を検討し、その指標を用いて、顔生成の多様性を高める試行錯誤をしました。
を試しました。指標的にはローカルモデルへの特徴注入が一番良かったですが、定性的にはどの手法も一長一短という感じでした。
ネタ
人は見た目も話し方も9割であることが長らく気になっていたので、「aはbがc割」系の書籍タイトルを国会図書館のデータから集めて合計しました。人は全部で54割でした。
おわりに
最近はVSCodeをほぼ使っていないので、1年半前はVSCodeの設定で試行錯誤をしていたのだなあと、LLM界隈の進歩の速さを感じました。
これからもゆるく記事は書き続けていければと思います。
付録:前回の振り返り以降に公開した記事
2025年3月〜6月
- 個人開発でCursorを本格導入したらコード生産性が3倍になった
- CursorユーザによるVSCodeのエージェント機能ことはじめ
- ChatVRMをVoiceVoxに対応させる+α
- OpenAI Agent SDKで会話履歴を保持する
- uvでdemucsをインストールして音源分離
2025年7月〜12月
- 【litellm/pymupdf】pdfを画像化してlitellmに入力
- ふりがなWhisperを試す
- ふりがなWhisperの音韻埋め込みを試す
- クエリごとの正解文書順位のリストから検索メトリクス(hit_rate, recallなど)を計算
- litellm/langchainとpydanticで構造化出力/バッチ処理
- 【python】LLMで「コンテキストに確実に含まれる文章」を抽出する
- AIコーディング向けのpythonリポジトリテンプレート
- LLMの正確コピー(exact-copying)性能の検証
- rStar2-Agent技術論文を理解する
- M1 Mac向け:GitHub Pages Jekyll導入 & 127.0.0.1:4000 でindex.md を表示する手順
- 自宅サーバにn8nとdifyをインストールしてHTTPS アクセスするまで
- 【Parler-TTS/OpenAI-TTS】英単語のTTSができない
- 発音可能な無意味カナ文字列を生成する
- 日本語っぽい無意味カナ文字列を作成する
- いろんな方法でカナ音声認識してみた
- 音素ASRを試す
- 無意味カナ文字列の音声認識精度
- RAGASのプロンプトを理解する
- 歌唱音源をフレーズ単位に分割(faster-whisper)
- 英語歌唱音源のカナASR(失敗)
- whisperで英語の歌唱音源に対するカナASRを試す
- 【python】ARPAbet-日本語カナ変換
- 【python】機械学習ベースの英語-カタカナ変換ライブラリの比較
- 洋楽歌詞をカタカナで書き起こす(音素ASR x カナ変換)
- 日本語検索データセットMIRACLを用いたLLMによる検索結果評価の精度検証
- RAGAS(nvidia-metrics)のcontext relevanceを試す
2026年1月〜4月
- 【python】編集距離が近い単語を得る処理の高速化
- 意味と音韻を考慮した単語検索
- 音韻を考慮したマスク単語予測(失敗)
- 言語モデルと母音フィルタを用いた韻踏み文の生成
- 情報量多めのスライド作成を想定したMarpのカスタムCSS
- 【Marp】フッターに画像を表示して適切な余白を設ける
- マルチエージェントが効果的なタスクとは(論文メモ)
- 【人は話し方が54割】「aはbがc割」系の書籍タイトルを集めて合計してみた
- かな文字列で学習されたLLMによる韻踏み文生成の検証
- LLMで架空の科学者をたくさん生成する
- Ubuntu で Copilot CLI ログイン時に「平文保存する?」と聞かれたときの対処メモ
- Copilot CLIで指示待ち時にスマホ通知する
- 顔埋め込みやLLMを用いた顔の多様性の評価
- Copilot CLI からOpenAI APIキーを参照する方法
- copilot-cliを比較的安全に実行するためのdockerコンテナ作成
- copilot-cliがローカルの画像ファイルを読み取れるか検証
- LLMによる音韻理解はプロンプトエンジニアリングで向上するか
2026年5月〜8月
- 音韻理解タスクにおけるLLMの推論トークンの中身の確認
- ローマ字表記を与えた場合のLLMによる音韻検索精度
- 音韻検索ベンチマークのLLM性能評価関数の整備
- LLMはカナ編集距離を計算できるのか? tokenizationの影響調査
- Buffalo NAS + DiXiM Play で Finder と動画ファイル名が違う問題を直した
- スペースで区切ると音韻検索は良くなるのか?
- LLM音韻理解の研究調査:Phun-Bench論文を読む
- LLM音韻理解の研究調査:PhonologyBench論文を読む
- LLM音韻理解の研究調査:YOMI-Bench論文を読む
- LLM音韻理解の研究調査:P-CoT論文を読む
- Qiita記事と画像をGitで管理
- 歌詞の読み誤りを音源で補正する(CTC forced alignmentの尤度で読み候補を選ぶ)
- Mii的な模式顔からのi2iで架空人物の顔多様性を上げたい
