ChatGPTでinlineの関連ページを表示する
indexの手動更新
> code
$ python make_vecs_from_json/main.py
<<
- (全ページだと遅いので20ページに絞った)
- 全ページだと何分かかるか?
> code
python upload_vecs/main.py
<<
1分くらい
Twitterとinline
- inlineのあるページ辺をキーにしてTweetを得ることが出来た
- inlineのあるページは細かく刻まれており、そのどれか1つについてを扱っているがこれで良いのか?
- 複数のページ辺の内容を加味してほしいけどそういうのはできない?
- ベクトルの平均を使ってみた、まぁそれっぽいか
- 検索してどうする?という気持ちになったので一旦浮遊にした
- この後どうするか?
- inlineのページに関連Tweetを出すことはできるが、微妙な気がする
- 上位5件くらいなら出しても邪魔にならないしやっても良いかな
TweetもQdrantに突っ込んでみる
- まずはベクトル化してpickleに入れる
- 30分くらいかかりそう
- ベクトルをQdrantにアップロード
- 15分くらい
2023-08-17. Omoikane Embedの仕組みでTwitterのベクトルをQdrantに突っ込む indexを更新する仕組み
- Raspberry Piからcrontabで実行する
- Kubernetesクラスタでcronjobで実行する
- これでも良いか
- GitHub Actionsで実行する
- これが一番ベストな気がする
- もともとそういう風にできてたはずだしね
inlineの関連ページ取得プロキシ
- Flaskを使ってこれをAPIにする
- CORSも設定した
- Dockerでこれをコンテナにする
- alpineベースのPythonだとnumpyがコンパイルできなかった
- 1.13GBもあるのか・・
- inajob1/inline-qdrant
- arm版もビルドするようにする
- ビルドが超絶遅い
- {x} Kubernetesのマニフェストにする
- {x} inlineのフロントエンドから呼び出す
- instantSearchに出すでよさそう
Qdrantを使う
- ローカルでしか動かない
- 遅い
- リモートで動かし続けるのは色々考える事があるのでpickleからQdrantに突っ込むのが出来ると気軽そう
- 多分この機能はすでに実装されているので後半だけ実行すれば良さそう
- inlineは追加した、残りはTwitter
ブラウザで関連ページを表示する仕組み
- 一旦はstaticなベクトルデータベースで良い
- jsonにできれば処理をクライアントに移譲できそう
- 111MBになった・・pickleは52MBで本文も含んでいるのに・・
- コサイン距離を出すだけ
- データがないページはデータがないと表示すれば良い
- out of dateというのもあるだろう
ローカルで試した
- 面白い!
- 毎回ベクトルを計算しているので負荷はそこそこ
- 雑にデプロイして、iframeとかで埋め込めばよい?
Twitterのデータとinlineのデータを混ぜるのはどうか?
- 後回し、面白いものが出てくる気がしない
関連検索が面白い
あらかじめベクトル化しておけば関連検索はコサイン距離を求めるだけ、何ならstaticに焼き付けておいても良い
やはりChatGPTの方が賢い?
- GiNZAと関連ページを並べてみているが、やはりChatGPTの方が賢いように感じる
- ChatGPTの方も一度ベクトルを作ってしまえばあとは無料だ
- うーん評価が難しい、GiNZAもいい線言っているときもある気がする
Try4 ChatGPT 関連検索
- できた
- お金がかかるので注意
- 最大で$20でキャップしているし大丈夫だろう
- 1秒に1~2件処理できている
- 3375件
- 1時間15分くらいかかりそう
- 失敗している
- 空ボディの文書だった
- もったいないことをしてしまった・・
- エラーは流石に課金されてなさそう
- できた
- あきらかにGiNZAよりちゃんと検索出来ている
- とおもったらGiNZAの関連検索のコードに問題があった
- ベクトルの大きさが正規化されていない?
Try3 GiNZA 関連検索
- GiNZA でinlineのページのベクトルを作る - この作業はRaspberry Piには重荷そうだからメインPCでやりたいが、場所に縛られるのが煩わしいな
- APIを呼び出す方式でもよさそう、そこまで負荷はない
- これで行く
- 見出しで分割するのも手かもしれない
- 一旦なしで
- サクッとできたかな
- 30分くらいで終わりそう
- 差分更新もできそうだけど、今は考慮しない
- Exception: Tokenization error: Input is too long, it can't be more than 49149 bytes, was 455751
- でかいとダメなのか
- よくわからないけどこの値の1/3くらいで切り取るようにした(多分内部表現がutf8でしょ)
- {{calc 49149/3}}文字行ければだいたいの記事は入るでしょ
- 一応動かしたけど微妙な気がする
- 短文 vs 長文だからかな
- ランダムよりは面白い記事が上がってきている気がするのは気のせいかな?