2023-03-25 pScrapboxAutoTrans

翻訳したものをこのScrapboxに入れるのかどうか

  • Engineer’s way of creating knowledgeで書籍丸一冊分のコンテンツが英語で入れてあるわけだが、その後1年近く経って、まったく「つながった!」という経験がない
    • たまに予期せずつながることはあるけど、嬉しい繋がり方ではない
  • 翻訳したものが即座にこのScrapboxに別ページとして追加されると、似たページが2枚ずつ並ぶことになる
    • イマイチ
  • ページに日本語と英語を併記する
    • この方がマシだがイマイチだと思う
  • 根本的にはページ一覧がカスタマイズできないことが問題

英語発信支援

  • Scrapboxに気軽に書いたのを自動的に機械翻訳して英語版のScrapboxプロジェクトに転記した上で英語アカウントでツイートし、リアクションがあった時に僕に通知が来るようにして社会的トリガーを仕掛けるというのはどうか

    • 英語アカウントでツイートしをしていない
    • Twitter上でのリアクションはない

Scrapbox英語化計画

  • ScrapboxのAPIでは逐次的アップデートを実現するの面倒そう

    • Yes
  • スモールスタートとして、まずJSONでエクスポートして翻訳してインポートしたらいい

  • 先頭行に(auto-translated from [Japanese http://....])と挿入する?

    • 先頭行に機械的テキストを入れるとカード表示がゴミ屋敷になる
    • 先頭に入れるならアイコン記法

ScrapboxAutoTrans開発日記2021-12-28

  • 将来的にはGithub Actionで静的ファイルとして吐いてGithub Pagesとかでホストすると良いのではないか

    • まあ少なくとも僕が死んでnhiroドメインの維持費が支払われなくなって、消滅してから死んだことに気づかれるかもしれないからドメインは分散した方がいいね

2023-03-26 寝て起きる

問題が複雑

  • 日々更新されていくドキュメントをどう翻訳するか
  • 翻訳されたものをどう見せるか
  • 翻訳されたものをどこに置くか シンプルな問題に分割するべき

Github Actionで取得するところまではできている

  • 翻訳したデータもおけばいい?

  • 翻訳するまでもなくすでに英語なものがある?

    • 手動で翻訳したコンテンツがあるよな
  • 見積もり

    • 13,115,848文字
  • from エンジニアの知的生産術英語化プロジェクト

  • from 機械翻訳の費用

    • ¥2,500 per 1 million characters

  • characterがUnicode characterかbytesか

  • bytesなら27,493,421

    • こっちが前回の見積もりに近いね
  • 見積もり7万円弱

    • 年収の1%未満であり、今後の1年で生産性が1%向上するなら1年でペイする、という気持ち
  • 実行

    • 300ページ走らせてみて400円だった
  • 全体実行中

  • メモ

    • 細かいこと考えて一年近く放置してたが、もう先延ばしという選択はなしだろ、今日doneにするぞ、Done is better than perfect、という勢いで実装したんだけど土壇場で色々閃いたので手を動かさずに悩んでた時よりも良くなった
    • ベクトル検索が使えるのでリンクの文字列が完全一致でない問題は気にしない
    • 行単位でキャッシュしてる
      • なのででかいページに1行追加しても1行だけ翻訳
    • 箇条書きなのでインデントを維持して行単位翻訳
      • インデントと本文を分けてから翻訳してる
      • なので同じ内容のインデント違いはキャッシュヒットする
    • ローカルで言語判定かけて日本語でない行は翻訳せずに素通しする
      • これによってソースコードや画像記法などが翻訳対象でなくなる
    • 誤訳を発見した時、キャッシュを修正する手が使える
  • ビューのことは何も考えていない

    • 考えてなくもないか
    • Githubにテキスト形式で置いてるぞ

2023-03-30

  • 割とエラーでこけてて、リトライ付けてなかったのでまだ終わってない

    • 変なクエリーでリトライし続けて無駄にお金を使うリスクがあったから、大丈夫とわかるまではエラーは目視した上で手動リトライしてた
  • https://github.com/meganii/sandbox-github-actions-scheduler

    • を参考にしてる
  • https://github.com/nishio/etude-github-actions

    • においてる
    • まだGithub Actionでの実行はしてない
  • @TwitterDev: Today we are launching our new Twitter API access tiers! We’re excited to share more details about our self-serve access. 🧵

    • いいタイミング!「自分のScrapboxを1日1回英訳した上でGPTに英語で要約ツイートさせる」をやりたいのでやりやすくなった
  • langdetectはやめた方が良さそう

    • 短文に対しては誤判定が多くて、確率的挙動をするから「一度英語だと判定したけど、今度は日本語だと判定したから訳しました」的なのが発生してる
    • 日本語領域の文字を一文字でも含んでたら日本語と判定した方がよさげ

https://www.deepl.com/account/usage

  • image
  • 今これでページ数的には半分くらい行ってるはずなので、意外と安いな?という感じ

2023/4/1

  • 無事完了した
  • image
  • 2.3万円。予想よりかなり安いね
    • バイト数で見積もって7万円のつもりでいたが、どうやらユニコード文字みたいだな
    • 13,115,848文字 / 27,493,421bytes
    • インデントや改行の除去とキャッシュによる重複文字列の除去がきいて13M文字から9.3M文字に減った

まず0を1にして、それから改善する

  • 翻訳されたものをどこに置くか
  • 日々更新されていくドキュメントをどう翻訳するか
    • Github Actionsで更新できるかトライしよう
    • 手元での時間計測
      • python main.py 2578.84s user 270.36s system 98% cpu 48:27.16 total
      • なんでそんなに時間が掛かるんだ?
      • あ、キャッシュの更新か
      • 直した Github
        • python main.py 3.73s user 2.56s system 68% cpu 9.118 total

この一週間の間の更新を再クロール

  • python main.py 39.36s user 14.77s system 10% cpu 8:49.13 total 再翻訳
  • total 28492485 no_cache 156769 ratio 0.005502117488172758
  • python main.py 48.04s user 7.02s system 3% cpu 24:02.17 total
    • 翻訳APIの待ち時間がほとんど

Github Actionsで実行

  • 1時間経っても終わってない
  • どこが遅いのかもっと詳細に調べたいな
  • ページの取得と翻訳を一つのスクリプトにしてしまったからどっちが問題なのかとかわからない
    • 取得が遅い場合
      • 全部取ってるからそりゃそうだ
        • 最初に候補を出す段階で更新日時はわかっているので、更新されてるものだけ取れば良い
        • 自分が管理権限を持ってるものに関してはexport APIでもよい
    • 翻訳が遅い場合
      • APIのレスポンスを直列で待ってるからだな

6時間掛かってキャンセルされてる

  • image
  • ログを見た
  • クロールは完了して、翻訳をしてる最中で止まってる
  • 9%|▉ | 1368/14461 [00:00<00:07, 1831.53it/s]
    • キャッシュが効いてなかったらもっと遅いと思うのだが…
  • Error: The operation was canceled.

2023/4/5

  • キャッシュが効いてない可能性を疑ったがそんなことはなかった
  • 状況を確認するためにデバッグ出力をいろいろ変更したのだがなぜかあっさり完了した。は?
    • 一晩寝て気づいたんだが、もしかしてプログレス表示がイレギュラーなターミナル操作をすることと、Github ActionsのログをキャプチャしてWeb上でリアルタイムに見せるための仕組みの相性が悪かったのかも?

2023/4/6

  • まずはScrapboxに自動インポートする
    • 理想としてはmem.nhiro.orgにつなげるのが良いが、まずは手軽な一歩から
  • 活動ダイジェストを自動Tweetしたい
    • まずは手軽なところから「Tweet内容をファイルに出力」「人間がそれを見てTweet」

実験2023-04-06

from /villagepump/2023/04/07

  • Scrapbox機械翻訳結果を見て、初っ端から「Yasukazu Nishio」と訳されてるのを見てガッカリしている
  • 昼休みにChatGPT Pluginが来てることに気づいた
  • 翻訳を改善する話は吹き飛んだ
  • ということをあとでメモしておかないと「なんでやめたんだっけ?」になる

next pScrapboxAutoTrans2023-04-18