
横浜国立大学理工学部建築都市環境系学科卒
一級鉄筋技能士
最近、ネットニュースでAI関連のニュースは聞かない日はありませんね。
フジテレビのニュースなんてどうだっていいじゃないですか。
乳首を噛みちぎったとか噛みちぎってないとか、本当にどうだっていい。
どっちかというと、セブンイレブンのからあげ弁当詐欺の方が私たち職人にとっては大問題ですよね!
AI人材の皆さんに大事なのは「エンベディング」について本当に理解できているのかどうかです。
この記事では、LLMには欠かせないエンベディングについて詳しく解説します。
Azureで作るOpenAIチャットシステム開発はこちらからどうぞ!
目次
エンベディングってなに?
エンベディングはchatGPTをはじめとした大規模言語モデルには必須の技術です。
エンベディングを簡単に説明すると、文字データを小分けにして数値データ(ベクトルデータ)にする処理です。
文字を数値データにするとどんなメリットがあるのでしょうか?
図でわかりやすく理解しよう
実際に文字データを数値化するエンベディングを可視化したグラフがこのグラフです。
関連性のある文字データが同じような位置にプロットされていますね。
例えば、「カレー食べたい」、「カツカレー食べたい」、「うどん食べたい」という言葉は、ほとんど同じ位置にプロットされています。
私たちはこれらの言葉を読んだときに、直感的に似た意味を持つフレーズだと感じます。
これが人間の理解です。
一方で、コンピュータはこれらのテキストデータが関連性のあるものだと認識することが、従来の技術では難しかったのです。
しかし、エンベディングによって、コンピュータは言葉とその意味を数値で表現し、データとして処理することができるようになりました。
テキストデータを数値化して文章を表現することが出来れば、ユーザーが質問したときのテキストを数値上で判別し、検索することができる
近代の大規模言語モデルを用いたAIは、テキストデータを数値化することによって、言葉に関連のある文字を効率的に検索し、適切な回答を生成することができます。
エンベディング技術があるおかげで、AIは単なる言葉の羅列ではなく、言葉の背後にある意味を捉え、より精度高く処理することが可能になっています。
これはすごい技術ですよね。
近い将来では、テキストデータだけではなく、図面データを正確に数値化することもできるようになるのでしょうか?
そうしたら、鉄筋工事の積算作業はほとんどAIでもできることになります。
「X1通りの追い出し部材を教えて」とかの回答にスッと回答できれば、現場の施工にも役立つかもしれません。
実際にコードで動かしてみよう
では実際にテキストデータを数値に変換してみましょう。
テキストデータを数値データに変換しよう
必要なライブラリをインストールします。
1 2 3 4 5 6 7 8 |
import os from langchain_openai import ( AzureOpenAIEmbeddings, OpenAIEmbeddings ) from dotenv import load_dotenv load_dotenv('../.env') |
エンベディングのモデルを取得して、準備完了です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
## モデルの取得 # 3. OpenAIのembeddingモデル取得 embeddings = None if os.getenv('AZURE_OPENAI_API_KEY') != "": # Azureの場合 embeddings = AzureOpenAIEmbeddings( azure_deployment="embedding", # Azureのデプロイメント名 openai_api_version="2024-06-01" # OpenAIのAPIバージョン ) elif os.getenv('OPENAI_API_KEY') != "": # OpenAIの場合 embeddings = OpenAIEmbeddings(model="text-embedding-ada-002") else: print("APIKeyの設定を確認してください") |
「これはテスト用のドキュメントです。」というテキストデータを数値化してみます。
1 2 3 4 5 6 7 |
text = "これはテスト用のドキュメントです。" # 1つのみ query_result = embeddings.embed_query(text) print(f"サイズ:{len(query_result)}") print(f"5のみ確認") print(query_result[:5]) |
数値化した結果がこちらです。
最初の5つの数値のみ表示しています。
サイズが1536という事なので、「これはテスト用のドキュメントです。」のテキストデータは、このような配列データが1536個分で表現できるという事ですね。
1 2 3 |
サイズ:1536 5のみ確認 [-0.010643795132637024, 0.003480863058939576, -0.003078451147302985, -0.014956309460103512, 0.0026207074988633394] |
この技術を応用すれば、社内にたまっているデータを数値化して、チャット形式で簡単に取り出せるようになりますね!
まとめ
AI(人工知能)はもはや大企業だけの技術ではありません。
中小企業こそ、このAIを活用することで、業務の効率化や競争力の向上を図れるチャンスがあります。
「Azureで作るOpenAIチャットシステム開発」の講座ではもっと具体的にAIを活用する方法を解説していますので、ぜひご活用ください!