ハードウェアからサーバ・アプリまでワンストップで開発

Orange Pi5でC3TR-Adapterを試す

Gemmaベースの翻訳モデル

Freshmeat再起動計画を進めています。

もちろん単に同じようなものを作ってもしょうがない... と言うよりも、同じようなものは既に作ってしまいました。今はこれにいろんなソースから情報を集めて来るためのクローラとかを開発しています。

その中で

外国語の説明文が日本語に出来たら嬉しいのでは?

ということを思ったので、翻訳機能をつけてみました。その過程でC3TR-Adapterも試してみました。

背景

現在のFreshmeat再起動計画の進捗は、

  • インデクスページ(一覧ページ)が出来ました
  • データの修正をするための画面が操作しました
  • FreshCodeからのデータを使って情報方針を自動的に出来ます

という状態にあります。

とりあえずこんな画面が出ます。

この説明が英語のままだとぱっと見た時の敷居が高いのと一覧性が低い感じがしたので、データ修正のところを国際化して「日本語の説明」を書くとブラウザが日本語を要求している場合は日本語で表示してくれるようにしてあります。これはありがちのブラウザに翻訳をつけるためのものではなくて、日本語の文章を入れます。

それは良いのですが、一々翻訳をするのは手間ですしやる気の維持とかもありますので、自動化したいと思っています。

今のところ、データ修正画面に翻訳ボタンをつけて、Google翻訳を呼び出して下訳を出して、これを修正すれば良いようにしてます。下訳そのままでも日本語で出てくれるのは嬉しいものですし、気に入らないところはいくらでも修正できるので満足しています。

それは良いのですが、Google翻訳そのものですから、

  • Googleに文句言われるかも知れないのが嫌だ
  • 語彙とか適当に追加したりしたい
  • 品質がある程度良いのであれば手動ではなくてバッチ処理でやってしまいたい

という希望があって、「自前で何とかなったらなぁ」と思っていました。

そこにC3TR-Adapterのggufを作ったよというツイが流れて来たので試してみました。

やったこと

ggufはここからいただきました。

webbigdata/C3TR-Adapter_gguf

ここに使い方や注意が書いてありますが、「まぁいつものggufだね」ということで、

$ cd ~/git/llma.cpp
$ git pull origin master
$ make

ってやって最新のLlama.cppを作って、

$ cd models
$ wget https://huggingface.co/webbigdata/C3TR-Adapter_gguf/resolve/main/C3TR-Adapter.Q5_1.gguf
$ cd ..

とやってモデルを落として、とりあえず説明に書かれているコマンドラインを入れてみます。

$ ./main -m ./models/C3TR-Adapter.Q5_1.gguf -e --temp 0 --repeat-penalty 1.0 --no-penalize-nl -n -2  -p "### Instructions:
Translate English to Japanese.
### Input:
'The Boy and the Heron' follows a boy named Mahito Maki who moves to the countryside after his mother's death. There, he is lured by a mysterious heron into a secluded tower, a portal that transports him to a fantastical realm amid his grief.
### Answer:                                                                                                                            "

そうすると、

 ### Instructions:
Translate English to Japanese.
### Input:
'The Boy and the Heron' follows a boy named Mahito Maki who moves to the countryside after his mother's death. There, he is lured by a mysterious heron into a secluded tower, a portal that transports him to a fantastical realm amid his grief.
### Answer:
「少年と鷺」は、母親の死後、田舎に引っ越したマキマヒト少年の物語。彼は、謎の鷺に誘われて、悲しみに包まれたまま、秘められた塔に連れていかれ、幻想的な世界へと導かれる。
 [end of text]

llama_print_timings:        load time =    2111.38 ms
llama_print_timings:      sample time =      16.93 ms /    58 runs   (    0.29 ms per token,  3425.26 tokens per second)
llama_print_timings: prompt eval time =   31664.31 ms /    74 tokens (  427.90 ms per token,     2.34 tokens per second)
llama_print_timings:        eval time =   28769.98 ms /    57 runs   (  504.74 ms per token,     1.98 tokens per second)
llama_print_timings:       total time =   60516.58 ms /   131 tokens
Log end

というように返してくれます。ここまでは成功ですね。

実データを食わせてみる

何となく良い感じなので、実際のデータを入れてみます。

入れてみるのは、Freqtradeというよく知らないソフトです。どうやら暗号通貨関係のものらしいです。こういったソフトは1ミリも興味を持ってないのでわざわざ自分で翻訳しようとか手を加えようとかという気が起きません。こういったものこそAIがやって欲しいですね。

Freqtrade

 

$ ./main -m ./models/C3TR-Adapter.Q5_1.gguf -e --temp 0 --repeat-penalty 1.0 --no-penalize-nl -n -2  -p "### Instructions:
Translate English to Japanese.
### Input:
Freqtrade is a free and open-source crypto trading bot written in Python. It is designed to support all major exchanges and be controlled via Telegram or WebUI. It contains backtesting, plotting, and money management tools as well as strategy optimization by machine learning. Always start by running a trading bot in Dry-run and do not engage money before you understand how it works and what profit/loss you should expect. We strongly recommend you have basic coding skills and Python knowledge. Do not hesitate to read the source code and understand the mechanisms of this bot, algorithms, and techniques implemented in it. Write your strategy in python, using pandas. Example strategies to inspire you are available in the strategy repository. Download historical data of the exchange and the markets you may want to trade with. Find the best parameters for your strategy using hyper optimization which employs machining learning methods.
### Answer:
"

トークン数がどうとかということは全く気にせず、説明文をそのままぶっこみます。

そうすると、

 ### Instructions:
Translate English to Japanese.
### Input:
Freqtrade is a free and open-source crypto trading bot written in Python. It is designed to support all major exchanges and be controlled via Telegram or WebUI. It contains backtesting, plotting, and money management tools as well as strategy optimization by machine learning. Always start by running a trading bot in Dry-run and do not engage money before you understand how it works and what profit/loss you should expect. We strongly recommend you have basic coding skills and Python knowledge. Do not hesitate to read the source code and understand the mechanisms of this bot, algorithms, and techniques implemented in it. Write your strategy in python, using pandas. Example strategies to inspire you are available in the strategy repository. Download historical data of the exchange and the markets you may want to trade with. Find the best parameters for your strategy using hyper optimization which employs machining learning methods.
### Answer:
freqtradeはPythonで書かれた無料・オープンソースの暗号通貨トレード・ボットです。freqtradeはすべての主要な取引所をサポートし、TelegramかWebUI経由で制御できるように設計されています。freqtradeにはバックテスト、プロット、マネー・マネージメントツール、機械学習による戦略最適化が含まれています。必ず最初にドライランでトレード・ボットを実行し、どのように機能し、どの程度の利益/損失が期待できるかを理解するまで、お金を投入しないでください。基本的なコーディングスキルとPython知識を強くお勧めします。ソースコードを読むこと、このボットの仕組み、アルゴリズム、実装されたテクニックを理解することを躊躇しないでください。あなたの戦略をPythonで書き、pandasを使用してください。あなたの戦略にインスピレーションを与えるための例戦略がストラテジー・リポジトリにあります。あなたがトレードしたいと考える取引所と市場の歴史データを取得してください。機械学習手法を用いたハイパー最適化を使用して、あなたの戦略の最適なパラメータを見つけることができます。
 [end of text]

llama_print_timings:        load time =    1843.98 ms
llama_print_timings:      sample time =      66.36 ms /   219 runs   (    0.30 ms per token,  3300.03 tokens per second)
llama_print_timings: prompt eval time =   83207.84 ms /   193 tokens (  431.13 ms per token,     2.32 tokens per second)
llama_print_timings:        eval time =  115245.12 ms /   218 runs   (  528.65 ms per token,     1.89 tokens per second)
llama_print_timings:       total time =  198780.02 ms /   411 tokens
Log end

という感じで答えを出します。訳のところだけ出すと、

freqtradeはPythonで書かれた無料・オープンソースの暗号通貨トレード・ボットです。freqtradeはすべての主要な取引所をサポートし、TelegramかWebUI経由で制御できるように設計されています。freqtradeにはバックテスト、プロット、マネー・マネージメントツール、機械学習による戦略最適化が含まれています。必ず最初にドライランでトレード・ボットを実行し、どのように機能し、どの程度の利益/損失が期待できるかを理解するまで、お金を投入しないでください。基本的なコーディングスキルとPython知識を強くお勧めします。ソースコードを読むこと、このボットの仕組み、アルゴリズム、実装されたテクニックを理解することを躊躇しないでください。あなたの戦略をPythonで書き、pandasを使用してください。あなたの戦略にインスピレーションを与えるための例戦略がストラテジー・リポジトリにあります。あなたがトレードしたいと考える取引所と市場の歴史データを取得してください。機械学習手法を用いたハイパー最適化を使用して、あなたの戦略の最適なパラメータを見つけることができます。

ざっと読んでみると、"Write your strategy in python, using pandas."の訳が「あなたの戦略をPythonで書き、pandasを使用してください。」となって、ちょっと惜しい感じですが、全体としては結構いい感じの訳になったのではないかと思います。

ちなみに、Google翻訳だと、

Freqtrade は、Python で書かれた無料のオープンソース暗号通貨取引ボットです。 すべての主要な交換をサポートし、Telegram または WebUI 経由で制御できるように設計されています。 これには、バックテスト、プロット、資金管理ツールのほか、機械学習による戦略の最適化が含まれています。 必ずドライランで取引ボットを実行することから始めて、その仕組みと予想される利益/損失を理解するまで資金を関与させないでください。 基本的なコーディング スキルと Python の知識があることを強くお勧めします。 遠慮せずにソース コードを読み、このボットのメカニズム、アルゴリズム、実装されているテクニックを理解してください。 パンダを使用して、Python で戦略を作成します。 インスピレーションを与える戦略の例は、戦略リポジトリで入手できます。 取引所および取引したい市場の履歴データをダウンロードします。 機械加工学習手法を採用したハイパー最適化を使用して、戦略に最適なパラメータを見つけます。

という感じになります。

まぁこの翻訳に3分くらいかかってしまうのはちょっとなぁと思いますが(Google翻訳だと一瞬)、品質としては悪くないなという感じです。

次に、Tiki Wiki CMS Groupwareというのを試してみます。

Tiki Wiki CMS Groupware

元の文

"Software made the wiki way"

A full-featured, web-based, tightly integrated, all-in-one Wiki+CMS+Groupware, Free Source Software (GNU/LGPL), using PHP, MySQL, Zend Framework, jQuery and Smarty. Tiki can be used to create all kinds of Web applications, sites, portals, knowledge base, intranets, and extranets.

Tiki is the Open Source Web Application with the most built-in features. Highly configurable and modular, all features are optional and administered via a web-based interface.

Major features include a wiki engine, news articles, discussion forums, newsletters, blogs, file galleries, bug and issue trackers (form generator), polls/surveys and quizzes, banner management system, calendar, maps, mobile , RSS feeds, category system, tags, an advanced themeing engine, spreadsheet, drawings, inter-user messaging, menus, advanced permission system for users and groups, search engine, external authentication, etc.

Security reports: https://security.tiki.org

訳文

ソフトウェアがWikiの道を拓いた

Wiki+CMS+Groupwareのオールインワン、Webベース、機能満載、完全に統合されたフリーソースソフトウェア(GNU/LGPL)、PHP、MySQL、Zend Framework、jQuery、Smartyを使用しています。Tikiはあらゆる種類のWebアプリケーション、サイト、ポータル、知識ベース、イントラネット、エクストラネットを作成するために使用できます。

Tikiは最も機能が内蔵されたオープンソースWebアプリケーションです。高度にカスタマイズ可能でモジュール化されていますが、すべての機能はオプションであり、Webベースのインターフェース経由で管理されます。

主な機能にはWikiエンジン、ニュース記事、討論フォーラム、ニュースレター、ブログ、ファイルギャラリー、バグおよび問題追跡器(フォーム生成器)、投票/調査およびクイズ、バナー管理システム、カレンダー、地図、モバイル、RSSフィード、カテゴリーシステム、タグ、高度なテーマエンジン、スプレッドシート、図、ユーザー間メッセージ、メニュー、ユーザーおよびグループのための高度な許可システム、検索エンジン、外部認証などがあります。

セキュリティ報告書:https://security.tiki.org

Google翻訳

「ソフトウェアはウィキのやり方を作った」

PHP、MySQL、Zend Framework、jQuery、Smarty を使用する、フル機能の Web ベースで緊密に統合されたオールインワン Wiki+CMS+Groupware、フリー ソース ソフトウェア (GNU/LGPL)。 Tiki を使用して、あらゆる種類の Web アプリケーション、サイト、ポータル、ナレッジ ベース、イントラネット、およびエクストラネットを作成できます。

Tiki は、最も多くの機能が組み込まれたオープンソース Web アプリケーションです。 高度に構成可能でモジュール式であるため、すべての機能はオプションであり、Web ベースのインターフェイスを介して管理されます。

主な機能には、Wiki エンジン、ニュース記事、ディスカッション フォーラム、ニュースレター、ブログ、ファイル ギャラリー、バグおよび問題のトラッカー (フォーム ジェネレーター)、投票/調査およびクイズ、バナー管理システム、カレンダー、地図、モバイル、RSS フィード、カテゴリ システムが含まれます。 、タグ、高度なテーマ エンジン、スプレッドシート、描画、ユーザー間メッセージング、メニュー、ユーザーとグループの高度な権限システム、検索エンジン、外部認証など。

セキュリティレポート: https://security.tiki.org

個人的には「Wiki」を「ウィキ」とやってないC3TR-Adapterの訳の方が好きですね。訳の調子が微妙に異なるところが味わい深いです。

Mock Service Worker試してみます。

元の文

Mock by intercepting requests on the network level. Seamlessly reuse the same mock definition for testing, development, and debugging. A dedicated layer of requests interception at your disposal. Keep your application's code and tests unaware of whether something is mocked or not. Request the same production resources and test the actual behavior of your app. Augment an existing API, or design it as you go, when there is none. Use Express-like routing syntax to capture outgoing requests. Parameters, wildcards, regular expressions, mocking has never been easier. Browser usage is what sets Mock Service Worker apart from other tools. Utilizing the Service Worker API, which can intercept requests for the purpose of caching, Mock Service Worker responds to captured requests with your mock definition on the network level. This way your application knows nothing about the mocking.

訳文

ネットワークレベルでのリクエストのキャプチャによりモックを生成します。テスト、開発、デバッグ用に同じモック定義を無段階に再利用できます。リクエストキャプチャ専用のレイヤーが自由に利用できます。アプリケーションのコードとテストがモックかどうかを知らせる必要はありません。同じ生産資源をリクエストし、アプリケーションの実行状態を確認できます。既存のAPIを増強したり、設計したりできます。Expressのようなルーティング構文を使用して、リクエストをキャプチャします。パラメータ、ワイルドカード、正規表現、モックはこれまで以上に簡単です。ブラウザの使用がMock Service Workerを他のツールと区別します。キャッシュのためにリクエストをキャプチャするサービスワーカーAPIを利用し、Mock Service Workerはネットワークレベルでキャプチャされたリクエストにモック定義に応答します。これにより、アプリケーションがモックについて何も知りません。

Google翻訳

ネットワーク レベルでリクエストをインターセプトしてモックします。 同じモック定義をテスト、開発、デバッグにシームレスに再利用します。 リクエストをインターセプトする専用のレイヤーを自由に使用できます。 アプリケーションのコードとテストでは、何かがモックされているかどうかを意識しないようにします。 同じ運用リソースをリクエストし、アプリの実際の動作をテストします。 既存の API を拡張するか、API がない場合は必要に応じて設計します。 Express のようなルーティング構文を使用して、発信リクエストをキャプチャします。 パラメーター、ワイルドカード、正規表現、モックがかつてないほど簡単になりました。 Mock Service Worker を他のツールと区別するのは、ブラウザーの使用方法です。 キャッシュ目的でリクエストをインターセプトできる Service Worker API を利用して、Mock Service Worker はネットワーク レベルでのモック定義を使用してキャプチャされたリクエストに応答します。 このようにして、アプリケーションはモックについて何も知りません。

"seamlessly"の訳がちょっと気になりますがどうでしょうかね? これでもいいような気するし。

まとめ

速度のことを別にすれば、試した範囲ではGoogle翻訳の代替くらいにはなる感じですね。

「強い監視」が必要でない程度には破綻した訳にならないですし、バッチでトロトロ動かす分には速度はあまり問題にならないですから、これを使ってバッチ処理で日本語部分を作ってみても良いかなと思ってます。

まぁC3TR-Adapterって元はgemmaで、gemmaってGoogleの作品ですから、「Googleフリー」になっているというわけではないですけど。「うちの子」感があることと怒られることを心配しなくて良いのは良いですね。

最近のエントリー

遠隔手話通訳実験

LLMと戯れてみる

新刊情報の収集

最近のできごと

Hieronymusのインボイス番号対応について

会計システム「Hieronymus」の現状

OrangePi5にZabbixをインストールする

レビュー等の依頼について

オープンソースのノートアプリ「SiYuan」 - CasaOS AppStoreレビュー

お気に入りの色さがし1

創立記念日

現在の営業品目(2)

現在の営業品目(1)

SPDX License Listをデータ化した

Orange Pi5でC3TR-Adapterを試す

CasaOS上で会計システム「Hieronymus」を動かす

会計システム「Hieronymus」v1.0.0 リリースしました

CasaOSでファイル同期アプリSyncthingをセットアップする

第11回 Freshmeat

オープンソースノーコード「Activepieces」でワークフローを作る