t_wの輪郭

Feedlyでフォローするボタン
knownetベクトル検索
Cartesian Genetic Programmingで文章の類似度を学習あれあれあれあれあれあれあれあれあれあれajinkyaT/albert-japanese-v2-finetuned-nerはTensorFlow.jsで読み込める可能性があるあれあれajinkyaT/albert-japanese-v2-finetuned-nerからsentence embeddingっぽいものが取れたあれあれあれあれあれEmbeddingの計算とDynamoDBへの出し入れを分ける

何も分かってないけどajinkyaT/albert-japanese-v2-finetuned-nerでsentence embeddingっぽいものが取れて、大体良い感じの類似度が出る。

from transformers import (
    TFAutoModelForMaskedLM, AutoTokenizer, TFAutoModel
)
import tensorflow as tf
import tensorflowjs as tfjs
from tensorflow import keras
import numpy as np

tokenizer = AutoTokenizer.from_pretrained("ajinkyaT/albert-japanese-v2-finetuned-ner")
model = TFAutoModel.from_pretrained("ajinkyaT/albert-japanese-v2-finetuned-ner")
print(model.summary())

def embedding_calc(text):
    tokens = tokenizer(text, return_tensors="tf")
    return model.layers[0].get_input_embeddings().call(tokens["input_ids"])[0]
    
def cos_sim(v1, v2):
    return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))

embedding1 = tf.reduce_sum(embedding_calc("東京は日本の首都です"), 0)
embedding2 = tf.reduce_sum(embedding_calc("日本の首都は東京です"), 0)
embedding3 = tf.reduce_sum(embedding_calc("this is test sentence to test"), 0)
embedding4 = tf.reduce_sum(embedding_calc("japanese capital is Tokyo"), 0)

print(cos_sim(embedding1.numpy(), embedding2.numpy()))  # 0.9314501
print(cos_sim(embedding2.numpy(), embedding4.numpy()))  # 0.66796505
print(cos_sim(embedding2.numpy(), embedding3.numpy()))  # 0.44220626

あれ

2023/6/22 21:05:00

遺伝的プログラミングで文章の類似度を学習させるの、CPUで一から学習させるには計算量が全然足りない。GPGPUで学習させたいが、再起的な構造と処理によって文章を処理しているために、GPGPUとは相性が悪い。構造から手をつけるべきか。

Transformerを参考にすると良さそうだが、あれを理解するのに手間取っている。さらに言えばAttentionも理解できていない。あり物のモデルを使ったり学習させるだけなら理解は不要だが、遺伝的プログラミングに組み込もうとすると十分に理解する必要がある。

普通の言語モデルも一から学習させると相応に時間がかかるだろうし、一晩で学習が進まないのを嘆くのは気が早すぎるかもしれない。私の投稿を学習データ化した物でさえ、一晩でやっと一巡できる程度だ。Wikipediaも学習データに含み出すととんでもない時間がかかる。

あれ

2023/6/18 14:57:00

ボロボロの研究成果です

遺伝的プログラミング、精度出ねぇんだわ。

でも、モデルのサイズは小さいぞ!!
812KBや。
一般的な大規模言語モデルというかディイイイイイプラーニングはGBとかサクッと行く


食事の文章に関してはいい感じに類似判定されているのは、データ元の人格が出てますねぇ。

  1. Amplify functionでDynamoDBからデータ取り出し
  2. Dockerコンテナを搭載したLambda関数でEmbeddingを計算
    • 状態を持たないので開発環境・本番環境で使いまわせる
  3. Amplify functionでEmbeddingをDynamoDBに保存

あれ

2023/6/16 14:37:00

sugarme / transformerが54KBしかないので、うまくいけばLambdaに載せられるかもしれない

あれ

2023/6/14 13:45:00

PyTorch 2.0がAWS Lambdaで動かせるか試す


と思ったけど普通に容量大きすぎて無理そう

あれ

2023/6/14 3:42:00

転移学習が終わった。
試してみているけど結構いい感じになったと思う。転移学習前とも比較したい。

"明日はいい天気なので外出したい"と"週末は晴れるので散歩の気分だ"の類似度:0.8576
"明日はいい天気なので外出したい"と"来週の夕飯は味噌汁の予定"の類似度:0.3244
"知能増幅"と"デライト"の類似度:0.6163

あれ

2023/6/14 2:01:00

私の投稿(tzmtwtr/tw-posts-ja)から文章の類似度を学習させようとしているのだけど、1回の学習(epochs=1)に190時間かかるとか出てビビった。

ColaboratoryのランタイムをTPUからGPUに切り替えて学習データを間引いたら1時間程度になった。

ベクトル検索がしたかっただけなのになぜこんなことをしているのだろう。

あれ

2023/6/12 12:18:00

EnergeticAI Embeddingsで使われているuniversal-sentence-encoder-liteを転移学習すれば、日本語に対応できるだろうという能天気なことを考えていたが、以下のような難題が降りかかってきた

  1. universal-sentence-encoder-liteがTF1となっており、転移学習が難しい
  2. 転移学習後のモデルをEnergeticAI Embeddingsで読み込める形式に変換する必要がある(リポジトリを見ても全くわからない)
  3. Tokenizerを日本語に対応させる必要がある(EnergeticAI Embeddingsをがっつり書き換えないといけない予感がする)

1.に関しては、もはや転移学習を諦めて、一から学習させた方が早い。どうせ英語しか対応していないのだから、どちらも学習速度に大した違いはない。と思われる。
2.と3.に関しては、Issueを立てるしかない。

あれ

2023/6/11 23:41:00

AWS Amplifyでamplify pushするとエラーが起きる。

{The following resource(s) failed to create: [LambdaFunction]. K#/2019}というエラーが出ている

CloudWatchには{Resource handler returned message: "Unzipped size must be smaller than 262144000 bytes (Service: Lambda, Status Code: 400, Request ID: xyz)" (RequestToken: abcd, HandlerErrorCode: InvalidRequest) K#/9DA6}というエラーが出ている。

pushしているLambda関数が大きすぎるらしい。
262144000 bytes ということは、260MBまでとのこと

あれ

2023/6/11 13:56:00

nodeのモジュールも読み込めないし、amplify pushが失敗する。
「もうだめじゃ」になってきた。
投げ出して散歩行きたいけど雨。

やろうとしてることがあと1年は早い気がする

あれ

2023/6/10 13:33:00

pushしているLambda関数が大きすぎるらしい。
262144000 bytes ということは、26MBまでとのこと

node_modulesが324 MB ある
アホや
@tensorflowが317 MB ある。お前やーーーーー!!!!!

あれ

2023/5/31 21:59:00

knownetにベクトル検索を組み込みたいけど、週末にがっつり取り組まないと無理そう。

あれ

2023/5/30 7:57:00

knownetに自前で実装したベクトル検索を追加しようと思っていたが、OpenSearchにk-NNが入ってるので、いつかはわからないがそのうち@searchか何かを設定したらベクトル検索できるようになるだろう。さらにAmazon OpenSearch Serverlessで動くようになるだろう。