乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

ニュース

今回はアプリをリリースしたので
そちらのご報告です。

解説動画はこちら



アプリについて


今回作成したアプリはこちらです

・チャンクde英会話

iOS
AppStore


Android
Googleplay

良かったら使ってみてください


アプリの作成方法

Flutterを用いて作成しました

Flutterにした理由は
 1.iOSとAndroid両対応であること
 2.学習コストが低い
 3.文献が豊富で有る

以上の理由からFlutterにしてみました。

それ以外にもアプリを作る方法は
いくらでもありますが、今回は
Flutterを使ってみました。

開発言語がDartになるので
1から勉強することになります。

また、コードやデータなどの大半は
ChatGPTを用いて作成していますので
実質ChatGPTに頼れば
アプリの開発は容易かと思います。

学習開発の期間で2ヶ月くらいでした。



リリースについて

コードを実装しシミュレータや
実機でのテストが終わったら
ビルドを行なってアプリを作り
リリース準備ができます。


その前にアプリストアのアカウントがないと
そもそもリリース出来ないので
アプリストアのアカウント取得が必要です。

これもそこそこ手間と時間が掛かります。

リリース登録をしたら審査が行われますが
審査に通らなければビルドからやり直し
審査に通るまでの繰り返しです。

審査に通ったらようやく
リリース、アプリ配信ができる様になります。

リリース作業を始めてから
アカウント登録とアプリリリースまでで
大体1ヶ月くらい掛かっています。



Flutterについて

動画の方では少しだけ解説していますが
FlutterはiOSとAndroidの両方のアプリを
作成する事ができる開発フレームワークです。

Flutterをインストールしたら
VSCodeなどでコードを書き進める事が
できる様になります。

テストやビルドなども
Flutterコマンドを用いて行う形になります。

この辺りも
VSCodeと合わせておくと
開発が楽になるかなと思います。

どんな感じなのかは
動画の方で解説していますので
参考にしていただければと思います。


最後に

これからアプリ開発を行いたい方にとっては
色々な選択肢があると思いますが
Flutterを使ってアプリを開発したい方が
増えていただけたら幸いです。

Python言語の解説と共に
アプリ開発の方も進めていきますので
要望などあれば是非コメントいただければと思います。

それでは。

法人化して
フリーランスになって1年
どんな感じだったのかを
まとめてみました。


解説動画はこちら



今回はフリーランスになって1年の
活動記録を書きました。

どんな仕事して
どれだけ稼げたのか・・・

結論から行くと
あんまし儲からなかったです。

正直正社員で働いた方が
気楽ですね。

労働時間の自由が効く代わりに
安定というものを失った感じです。

自分で仕事探すのが超大変!!!!

それを楽に出来る人達は
めっちゃ儲かってるんでしょうねー

詳細は動画を見ていただければと思います。

それでは。


今回は
まだ活用できていない人のための
大規模言語モデルについてです


解説動画はこちら



最近流行の大規模言語モデルについての概要と
コード生成での活用方法についてです


大規模言語モデルとは

英:large language model
日:大規模言語モデル

多数のパラメータを持つ
ニューラルネットワークで構成される
コンピュータ言語モデルのこと

自然言語処理分野のさまざまなタスクで
優れた性能を発揮し 世の中の一般知識や
訓練中の事実を記憶することができるため
さまざまな自然言語タスクに応用することができる
というものです。

LLMの作成には大量のテキストデータで事前訓練が行われ
高品質な言語データは数兆語に及ぶと推定されています


現在の主流は
・巨大テキストデータセットを用いた、事前学習(Pre-Training)
・性能を最適化する、微調整(Fine-Tuning)
の2段階のプロセスで構成されています。

自社でLLMを活用する際は学習データを用意して
ファインチューニングを行い
業務に最適化させる必要があります。


大規模言語モデル(LLM)の種類

GoogleのBERTやLaMDA
ChatGPTに用いられているGPT-4
新興系だとAnthropicのClaudeなどがあります

その他、2023年現在では
様々な言語モデルが登場しています。



大規模言語モデル(LLM)の活用方法 

LLMの活用は
指示を送る入力文(プロンプト)の
エンジニアリング次第です

ここからはコード生成における
プロンプトエンジニアリングの
ベストプラクティスをお送りします

・ベストプラクティス

「命令文」「制約条件」「入力文」の
3構成に分けそれぞれで詳細な設定を行う

ここからは詳細なプロンプトの書き方を
説明します。

1.プロンプトの最初に指示を書く

役割や目的を明示しておくと良いでしょう

例:
あなたはFlutterで開発をしているプログラマーです
以下の条件でコードを修正してください

2.区切り文字を使用する

例:
# 命令書
・・・・・・・・

# 条件
・・・・・・・・


3.前提条件(制約)を指定する

使用できるライブラリや変数名を
細かく指定するとうまく行く確率が上がります

例:
#条件
・bodyにリストビューを追加する
・リスト表示用のデータはxxxを使用する
・・・・



4.出力形式を追加する

XXXメソッドの部分を直す等
細かく指定するほど出力される
コードの精度も上がるようです

例:
#条件
・XXメソッドの戻り値を文字列に変更する
・・・・

5.コードを入力する

コードを修正してもらいたい場合は
修正対象のコードをそのまま入力します

例:
#以下はflutterのコードです
・・・・
・・・・・

コピペしましょう



LLMを活用するための便利なツール

・OpenAI:ChatGPT
・Bing:AIチャット
・Google:Bard
・Anthropic:Claude

など、現在では使用できるLLMサービスが複数あります
一個一個使用するのは面倒くさかったりもするので
一気にまとめてプロンプトを投げられる
ツールが有ります。

「ChatHub」

Google Chromeのプラグインになるので
Google webstoreなどからインストール出来ます。

使用感は動画の方を見ていただければと思います。


今回はLLMとその活用方法について
お伝えしました。

コード作成がめちゃくちゃ捗るので
活用しない手は無いですね

是非色々活用してみて下さい
それでは。

今回はAI/機械学習に特化した
新プログラミング言語
「Mojo」を取り上げてみました


解説動画はこちら




Mojo言語とは

Python言語をベースにした
パフォーマンスやデプロイ問題を解決した
新しいプログラミング言語で
Python言語の拡張版のような位置付け

Python++ みたいな感じでしょうか



Python言語の利点、欠点

・Pythonの利点
読みやすい、覚えやすい
有能なライブラリが豊富で
機械学習のための標準言語になっているのが
大きな利点です


・Pythonの欠点
遅い、とにかく遅い
(現在でもCやRustなどを併用する方法も有るが
他の言語も学ばないといけない)

ライブラリの依存性問題がある

かなり致命的とも言える欠点があります



Mojo言語の特徴

Pythonエコシステムと互換性がある
(まだ未完成な所が残っているっぽい)

コンパイル型言語である
(ライブラリの依存関係問題も解決される)

関数を作成する際に「def」の代わりに
「fn」を使用してより高速な「モード」を選択できる

「class」の代わりに「struct」を使用すると
ポインタを追いかけ回すことなく
データ構造で使用することができる

C言語並に高速なコードが
Pythonコードを少し変更するだけで
書けてしまうっぽい

まだまだ特徴は有りそうですが
全部を理解するには時間が掛かりそうです



Mojo言語のメリット

TensorFlow や PyTorch などの
機械学習フレームワークがC++ で実装されているが
これを1つの言語に置き換えられる可能性があります

デプロイ時にコンパイルされたファイルを使用するので
依存関係を気にする必要が無くなる可能性があります


とにかく速いらしいです!!

ベンチマークでは35000倍高速化出来たとか・・・
本当ならMLOpsが超はかどるでしょうね


Mojo言語のまとめ

Pythonと互換性が有って
高速で動作し、デプロイも楽になる
夢のようなプログラミング言語が開発中

ただし、Get start で申し込んでも waitlist で
待ち状態のため実際に使えないから
確認は出来ていない状況です

今後のML業界の標準言語に置き換わって行くのか?
これからの開発を待ちたいと思います


それでは
 

Twitter社のソースコードが公開されたので
早速覗いてみました

解説動画はこちら


 
Twitter社のソースコードが
Githubにオープンソースとして公開されましたね

Twitterのgithub

今回公開されたのは
レコメンドアルゴリズム
だそうです

自分もフリーランスで
レコメンドエンジンを開発したりしていますが
非常に興味深いものです

今回は彼らの技術ブログの内容も併せて
解説していきたいと思います
Twitterの技術ブログ



レコメンドアルゴリズム

公式ブログによれば
「おすすめ」タイムラインに表示されるツイートは
次の3段階のプロセスを経て決定されているようです

system-diagram

1.Fetch the best Tweets from different recommendation sources in a process called candidate sourcing.

2.Rank each Tweet using a machine learning model.

3.Apply heuristics and filters, such as filtering out Tweets from users you’ve blocked, NSFW content, and Tweets you’ve already seen.

1.`candidate sourcing`と呼ばれる機能で
様々な基準から個人に対して
最適なツイート候補を抽出する

2.機械学習モデルによって
それぞれのツイート候補をランク付けする

3.有害なツイートを除外したりする
フィルタリングを行なって出力候補を決める


この辺りは一般的なレコメンドエンジンにも
適用出来る内容であるかなと思います



それぞれの詳細を見ていきましょう



1.ツイート候補の抽出

Twitter自体はすごいユーザー数がいます
その中からユーザーにとって最適なツイートを
表示させるのは大変です

そこでまず初めにツイート全体から
各個人への候補を絞り込みが行われています


この機能では数億のツイートから
1500ツイートが抽出されているようです

・フォローしているユーザー(ネットワーク内)から50%
・フォローしてないユーザー(ネットワーク外)から50%

ネットワーク内のソースは
Real Graph(リアルグラフ)と呼ばれる
ユーザー間のエンゲージメントを予測するモデルで
計算されているようです

このReal Graph が高いほど
より多くツイートが候補に含まれるようです


次にネットワーク外のソースは
Social Graph(ソーシャルグラフ)と
Embedding Spaces(埋め込みスペース)
と呼ばれるアプローチ方法を採用しているようです


Social Graph(ソーシャルグラフ)は
フォローしている人々が最近エンゲージしたツイート
似たツイートを気に入った人は誰か、というような
計算されたツイート候補を生成しています(15%)


Embedding Spaces(埋め込みスペース)

ユーザーの関心とツイートコンテンツの
類似性を計算したものです


SimClusters:
行列分解アルゴリズム
(custom matrix factorization algorithm)

ユーザーとツイートをコミュニティ空間で表現し
ユーザーは複数のコミュニティに属する
各コミュニティでのツイートの
現在の人気度を調べて結果を埋め込むようです

これらのアルゴリズムを用いて
ツイート候補を絞り込みするのが第一段階です



2.機械学習モデルのランク付け

HEAVY RANKER と呼ばれる
ニューラルネットワークで構成された
スコア計算機を使っています

前段から抽出したデータを基にした特徴量や
重み付の設定からツイートのスコアを計算しています

現在の重み付けとしては
scored_tweets_model_weight_fav: 0.5
scored_tweets_model_weight_retweet: 1.0
scored_tweets_model_weight_reply: 13.5
scored_tweets_model_weight_good_profile_click: 12.0
scored_tweets_model_weight_video_playback50: 0.005
scored_tweets_model_weight_reply_engaged_by_author: 75.0
scored_tweets_model_weight_good_click: 11.0
scored_tweets_model_weight_good_click_v2: 10.0
scored_tweets_model_weight_negative_feedback_v2: -74.0
scored_tweets_model_weight_report: -369.0

「いいね」される:0.5
ツイートをリツイートされる:1.0
ツイートを開き、リプライまたは「いいね」される:13.5
プロフィールを確認し、ツイートにまたは「いいね」される:12
リプライに対し、投稿者によって返信または「いいね」またはリツイートされる:75
「このツイートに興味がない」ブロックまたはミュートされる:-74
「ツイートを報告」される:-369

という形で指定されている様です
この辺りも日々変わっているようでが
これらを加味して `0-1` のスコアを計算しています

3.フィルタリング


ツイート候補のスコア付を行ったら
最後にフィルタリングを行って
最終的な出力ツイートを選出します

home-mixer と呼ばれる
Scalaで書かれたシステムによって
最終候補が決定されています

次のようなフィルタリングが行われているっぽいです

Author Diversity
Content Balance (In network vs Out of Network)
Feedback fatigue
Deduplication / previously seen Tweets removal
Visibility Filtering (blocked, muted authors/tweets, NSFW settings)

著者の多様性
コンテンツ バランス
(ネットワーク内 vs ネットワーク外)
フィードバック疲労
重複除去 / 以前に見たツイートの削除
可視性フィルタリング
(ブロック、ミュートされた作成者/ツイート、NSFW 設定)


主に出力されるツイートのバランスを保ち
見たくないツイートの除外を行なっています



おすすめに載るポイント


ソースから見える、スコアリングの仕組みや
フィルタリングの仕組みから
おすすめに載るポイントとなる点を挙げてみました

この辺りも本日現在のものになり
日々更新されるものなので
最近版はソースを見て下さいね


・フォロー数とフォロワー数の比率

フォロワー数 < フォロー数 は
低く評価される仕組みの様です

フォロワーを増やすか
フォロー数を減らすしかないですね
ExtractTweepcred.scala
reduce pagerank for users with low followers compared to number of followings


・Twitter Blueへの加入

課金ユーザーはフォロワーの「おすすめ」タイムラインで 4倍
非フォロワーのタイムラインでは 2倍 のブーストされるようです

課金しろってことですね
HomeGlobalParams.scala

object BlueVerifiedAuthorInNetworkMultiplierParam
      extends FSBoundedParam[Double](
        name = "home_mixer_blue_verified_author_in_network_multiplier",
        default = 4.0,


object BlueVerifiedAuthorOutOfNetworkMultiplierParam
      extends FSBoundedParam[Double](
        name = "home_mixer_blue_verified_author_out_of_network_multiplier",
        default = 2.0,

・リプライされる

現在のスコア計算の重み付けより
リプライ の重み付けが高いです

リプライされる様なツイートしましょう


・画像や動画をつける

画像や動画などのメディアを含むツイートは
通常のツイートと比較して 2倍 のブースト

画像を付けると良いですね
RelevanceSearchUtil.scala

      tweetHasImageUrlBoost = 2.0,
      tweetHasVideoUrlBoost = 2.0,


・ツイートの評価は時間が経つと下がる仕組み

次の様なソースコードがあります
ranking.thrift

struct ThriftAgeDecayRankingParams {
  // the rate in which the score of older tweets decreases
  1: optional double slope = 0.003
  // the age, in minutes, where the age score of a tweet is half of the latest tweet
  2: optional double halflife = 360.0
  // the minimal age decay score a tweet will have
  3: optional double base = 0.6
}(persisted='true')

360分(6時間)経つとhalflife
ツイートの寿命のようなものが減る様です

なので常に呟いているのが
良いんじゃないかと思います

なお呟きすぎても
同じユーザーのツイートは
除外される仕組みでは有るので
程々にでしょうね


Twitterのような大企業の
ソースコードが垣間見えるのは
我々一般ユーザーにとっても
なかなか興味深いですね

読み込めばもっと
ツイッター攻略出来るかもしれません


今回はここまでです
それでは

このページのトップヘ