generated at
GiNZAを使って文章をベクトル化する
inajob
過去のTweetから何月に体調不良が多いか分析で体調不良のTweetを探り出すのにOpenAIEmbeddingを使った
これは若干だがお金がかかる
本当に数円だが、それでも試行錯誤を抑制する原因になっている気がした
ローカルで動く自然言語処理のライブラリを使うとこの部分を無料にできるのでは?と考えた
調べるとGiNZAというNLPライブラリが良さそう
気になるのはOpenAIのものとGiNZAを使った際に精度がどのくらい異なるのかということ

参考
公式
チュートリアル
ここには単語のベクトルしか記載されていないが
doc.vectorを使うと文章のベクトルが取れるっぽい
やりたいこと
inajobの過去のTweetの中から「体調」に関するTweetを抜き出す
そのために文章のベクトル表現の距離を使う
ソースコード
未整理なので後回し
結果
(順位、Twitterの発言ID、内容)
pre
0 142379357938270209 寒い 1 1057254738016620545 うーむ体調悪い 2 12378460844 外出 3 280602071093350400 だめだ 体調悪い 4 1558044303804764160 さて、今日からベビーベットをやめて床で川の字なのだが、おとなしく寝てくれるだろうか、、 #パパ育 5 4666474777 不健康な早起き達成 6 1204027235025309696 会社で同僚に相談したらRaspberryPi で組むのが良い気がしてきた。 7 1073009493368233985 喉が痛い 体調が悪いので一回休み 8 103965876000272384 朝から暑い 9 560398019896438785 今日も寒い 10 3787779878 早起きの習慣を 11 27332265581 発熱してないって素晴らしい! 健康一番 12 82584162070052864 電車暑い 13 10294292759 健康診断結果おかえり 14 8769993766 nemu- 15 523116186913886209 つまり有意義な夕食でした 16 37104617850548224 調子悪い むー

問題なさそう、体調不良っぽいものが抽出されている
処理速度はCPUのみで演算しているが1sで30Tweetくらいで、OpenAIの物より早い
48530Tweetを30分で処理できた

このデータで体調不良の月を分析(改)
計算間違えた気がしたけど、直したら直したでこれはまた違う傾向・・
計算ミスは、ベクトルのコサイン類似度の測定部分
GiNZAの文ベクトルは長さで正規化されていなかったようなので、ドット積ではコサイン距離にならないみたいだった
文の長さでベクトルの大きさが変わっているように見えた
ということでこの改はコサイン距離を正しく求めたもの
といっても自身がないので早くソースコードをきれいにしてそれと合わせてみてもらえれば間違いに気づいてもらえそう
参考: ChatGPTでやったほう
>
2月、4月、10月、11月の傾向が違う?

このデータで体調不良の月を分析
12月どうした・・
傾向は似ている
12月に発言しがちな何かが体調不良に関係するものと誤認されている?
Ginzaで体調不良、OpenAIで違う、と判定されるTweetを抜き出して観察すると原因がわかるかもnishio
参考: ChatGPTでやったほう
>
7月、8月、12月の傾向が違う
せっかくここまでやったので ja_ginza_electra のモデルでも試してみよう(今までは ja_ginza )
よく知らんけど精度が良いモデルらしい
と思ったけどこのモデルでは単語ベクトルが提供されていない

まとめ
GiNZAを使うとOpenAIを使わずに文章のベクトル検索を実装できた
精度についてしっかり検証していないが、体調不良の発言をなんとなく抜き出すくらいはできそう
過去のTweetから何月に体調不良が多いか分析に使うにはノイズが多すぎるのかもしれない
こういうのに悩むなら数円払ってOpenAIのを使った方が良いという一周した結論になりそうな・・inajob
OpenAIの側が正しいという保証は別にないnishio
今までも自然言語処理で色々やることはできたが、「その分析をすることが正しい理由は?」と言われがちて、正しい理由なんてなかった。
今は「正しい理由なんてない」ままなのに「ご存じChatGPTを出しているOpenAIのAPIを使って〜」というだけでそういう人たちが黙ってくれる。
それはそうinajob
2000件どうしの比較なので力技でなんでもできそう
GiNZAはインストールが簡単なのが良い

Next Action?
Ginzaで体調不良、OpenAIで違う、と判定されるTweetを抜き出して観察する
BERTでも試してみたい
沼っぽいのでこの辺でやめておくか

nishio
しっかり追いかけてないけど「単語をベクトル埋め込みする」と「文章をベクトル埋め込みする」は別物なことに注意
わかっていない気がするのでこの文書で変なことを書いてたら指摘くださいinajob
Transformerなので文章ベクトルの取得もできそうnishio
ja_ginza は単語ベクトル表現にchiVeを使っており、文ベクトルはこれの加重平均ということらしいinajob
てっきり一番いいやつを使ったんだと思ってたnishio