GiNZAを使って文章をベクトル化する
これは若干だがお金がかかる
本当に数円だが、それでも試行錯誤を抑制する原因になっている気がした
ローカルで動く自然言語処理のライブラリを使うとこの部分を無料にできるのでは?と考えた
調べると
GiNZAというNLPライブラリが良さそう
気になるのはOpenAIのものとGiNZAを使った際に精度がどのくらい異なるのかということ
参考
公式
チュートリアル
ここには単語のベクトルしか記載されていないが
doc.vectorを使うと文章のベクトルが取れるっぽい
やりたいこと

の過去のTweetの中から「体調」に関するTweetを抜き出す
そのために文章のベクトル表現の距離を使う
ソースコード
未整理なので後回し
結果
(順位、Twitterの発言ID、内容)
pre0 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を抜き出して観察すると原因がわかるかも

参考: ChatGPTでやったほう
> 
7月、8月、12月の傾向が違う
せっかくここまでやったので ja_ginza_electra
のモデルでも試してみよう(今までは ja_ginza
)
よく知らんけど精度が良いモデルらしい
と思ったけどこのモデルでは単語ベクトルが提供されていない
まとめ
GiNZAを使うとOpenAIを使わずに文章のベクトル検索を実装できた
精度についてしっかり検証していないが、体調不良の発言をなんとなく抜き出すくらいはできそう
こういうのに悩むなら数円払ってOpenAIのを使った方が良いという一周した結論になりそうな・・

OpenAIの側が正しいという保証は別にない

今までも自然言語処理で色々やることはできたが、「その分析をすることが正しい理由は?」と言われがちて、正しい理由なんてなかった。
今は「正しい理由なんてない」ままなのに「ご存じChatGPTを出しているOpenAIのAPIを使って〜」というだけでそういう人たちが黙ってくれる。
それはそう

2000件どうしの比較なので力技でなんでもできそう
GiNZAはインストールが簡単なのが良い
Next Action?
Ginzaで体調不良、OpenAIで違う、と判定されるTweetを抜き出して観察する
BERTでも試してみたい
沼っぽいのでこの辺でやめておくか
しっかり追いかけてないけど「単語をベクトル埋め込みする」と「文章をベクトル埋め込みする」は別物なことに注意
わかっていない気がするのでこの文書で変なことを書いてたら指摘ください

Transformerなので文章ベクトルの取得もできそう

ja_ginza
は単語ベクトル表現に
chiVeを使っており、文ベクトルはこれの加重平均ということらしい

てっきり一番いいやつを使ったんだと思ってた
