GiNZAを使って文章をベクトル化する
inajob.icon
これは若干だがお金がかかる
本当に数円だが、それでも試行錯誤を抑制する原因になっている気がした
ローカルで動く自然言語処理のライブラリを使うとこの部分を無料にできるのでは?と考えた
調べるとGiNZAというNLPライブラリが良さそう 気になるのはOpenAIのものとGiNZAを使った際に精度がどのくらい異なるのかということ
参考
公式
チュートリアル
ここには単語のベクトルしか記載されていないが
doc.vectorを使うと文章のベクトルが取れるっぽい
やりたいこと
inajob.iconの過去のTweetの中から「体調」に関するTweetを抜き出す
そのために文章のベクトル表現の距離を使う
ソースコード
未整理なので後回し
結果
(順位、Twitterの発言ID、内容)
code: 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分で処理できた
このデータで体調不良の月を分析(改)
https://gyazo.com/abb6ac64c89d0022fd3cd3603b750284
計算間違えた気がしたけど、直したら直したでこれはまた違う傾向・・
計算ミスは、ベクトルのコサイン類似度の測定部分
GiNZAの文ベクトルは長さで正規化されていなかったようなので、ドット積ではコサイン距離にならないみたいだった
文の長さでベクトルの大きさが変わっているように見えた
ということでこの改はコサイン距離を正しく求めたもの
といっても自身がないので早くソースコードをきれいにしてそれと合わせてみてもらえれば間違いに気づいてもらえそう
参考: ChatGPTでやったほう
https://gyazo.com/96903f29503f7212eeec794356ba6494
2月、4月、10月、11月の傾向が違う?
このデータで体調不良の月を分析
https://gyazo.com/2c80c2102da9b6bb08a0c17121e64052
12月どうした・・
傾向は似ている
12月に発言しがちな何かが体調不良に関係するものと誤認されている?
Ginzaで体調不良、OpenAIで違う、と判定されるTweetを抜き出して観察すると原因がわかるかもnishio.icon
参考: ChatGPTでやったほう
https://gyazo.com/96903f29503f7212eeec794356ba6494
7月、8月、12月の傾向が違う
せっかくここまでやったのでja_ginza_electraのモデルでも試してみよう(今まではja_ginza)
https://gyazo.com/8ea1d4084c01181a5ae42d3c3bd80646
よく知らんけど精度が良いモデルらしい
と思ったけどこのモデルでは単語ベクトルが提供されていない
まとめ
GiNZAを使うとOpenAIを使わずに文章のベクトル検索を実装できた 精度についてしっかり検証していないが、体調不良の発言をなんとなく抜き出すくらいはできそう
こういうのに悩むなら数円払ってOpenAIのを使った方が良いという一周した結論になりそうな・・inajob.icon
OpenAIの側が正しいという保証は別にないnishio.icon
今までも自然言語処理で色々やることはできたが、「その分析をすることが正しい理由は?」と言われがちて、正しい理由なんてなかった。
今は「正しい理由なんてない」ままなのに「ご存じChatGPTを出しているOpenAIのAPIを使って〜」というだけでそういう人たちが黙ってくれる。
それはそうinajob.icon
2000件どうしの比較なので力技でなんでもできそう
GiNZAはインストールが簡単なのが良い
Next Action?
Ginzaで体調不良、OpenAIで違う、と判定されるTweetを抜き出して観察する
BERTでも試してみたい
沼っぽいのでこの辺でやめておくか
nishio.icon
しっかり追いかけてないけど「単語をベクトル埋め込みする」と「文章をベクトル埋め込みする」は別物なことに注意
わかっていない気がするのでこの文書で変なことを書いてたら指摘くださいinajob.icon
Transformerなので文章ベクトルの取得もできそうnishio.icon
ja_ginzaは単語ベクトル表現にchiVeを使っており、文ベクトルはこれの加重平均ということらしいinajob.icon てっきり一番いいやつを使ったんだと思ってたnishio.icon