ーーを埋め込んで

初めましてaketamiです。最後の部分以外は驚異的にiGEMに関係のない話を書きます。

自語壱

東京科学大学生命理工学系bachelor1 に所属しています。iGEMではDryを担当していて去年度は幻のsoftware(非公認未確認ほぼ非公開)をやっていました。

アイドリングトーク

皆さんはchatGPTなどに代表される大規模言語モデル(LLM)をよく使いますか?または使ったことがありますか?私はそれはもうよく使います。昔から性分であらゆるものに対して自動化を図るのが好きでした。大抵は短縮した時間よりも自動化のシステムを構築するための時間のほうが長かったですがね。

ともかく、そのためのツールとしてchatGPTはこの上ない威力を発揮したというのが私がchatGPTが好きな理由の一つなのでしょう。そのため私はリリース当初からGPT系統のアプリケーションを使い倒しています。

今回の形式的な主題

ご存知かもしれませんがLLMは、膨大な量のテキストデータで学習されており、さまざまな質問や指示に応答することができます。しかし、LLMが学習していない領域に対する質問など、LLM単体では回答が困難な場合が多いです。

そこで、embedding(埋め込み)と呼ばれる手法を用いることで、LLMの回答精度を向上させることができます。LLMに質問をした後に、その質問に答えるために文書を検索し、その文書の情報をもとにしてLLMに回答を生成するという手法です。

ベクトル化

embedding を用いた質問への応答においては、まず、文書をベクトル化する必要があります。ベクトル化とは、テキストを数値の配列に変換する処理です。

例えばこの手法を使って、「王女」、「王」、「女」の関係を説明することができます。ここでは、これらの単語がベクトルとしてどのように表現されるかを簡単に説明します。

まず、各単語を独立したベクトルとして考えます。これらのベクトルは多次元空間、OpenAIのライラブリなら1024次元空間において点として位置付けられます。例えば、「王女」、「王」、「女」、「男」はそれぞれ異なるベクトル (\mathbf{v}{王女})、(\mathbf{v}{王})、(\mathbf{v}{女})、(\mathbf{v}{男}) として表されます。

ベクトル化の一つの特徴は、単語間の意味的な関係をベクトルの操作によって表現できることです。例えば、「王女」は「王」と「女」の概念を合わせて、「男」の概念を引いたものと考えることができます。これをベクトルの加算によって表現すると、以下のようになります。

(\mathbf{v}{王女} \approx \mathbf{v}{王} + \mathbf{v}{女} - \mathbf{v}{男})

この式は、「王女」という単語のベクトルが、「王」と「女」のベクトルの和に「男」のベクトルを引いたものに近いことを意味します。これにより、単語「王女」が持つ性質が表現されています。今回はこれを文章に行なって質問から回答に必要な文章を検索することを目指します。

実はこの技術を使った応用事例としてGoogleなどの検索エンジンが挙げられます。

Google検索では、embedding技術が主に2つの方法で応用されています。一つ目は、検索クエリの意図をより正確に理解すること。ユーザーが入力した言葉やフレーズが持つ意味を探ることで、より関連性の高い検索結果を提供することができます。たとえば、同じ単語でも異なる文脈で異なる意味を持つ場合、embeddingはそれらの微妙な違いを捉え、より適切な結果を返すことが可能です。

二つ目は、ウェブページやドキュメントの内容をベクトル化し、それらの意味的な類似性を基に検索結果をランキングすることです。これにより、単にキーワードが一致するページだけでなく、検索クエリの意図に合致する質の高いコンテンツを見つけ出すことができます。

これらの技術的進歩により、Google検索はただのキーワードマッチングツールから、ユーザーの意図を理解し、より関連性の高い情報を提供する高度な検索エンジンへと進化を遂げています。embedding技術は、言葉の表層的な一致を超えて、意味の深層を探ることで、検索体験を大きく改善しているのです。閑話休題

embeddingによる回答生成

LLMに使われるembeddingにおいては前述の応用と同じである程度の文の塊に対して行われます。

具体的には次のとおり

  1. 参考にする文書を事前に分割してベクトル化を行います。
  2. LLMに質問された文書をベクトル化します。
  3. LLMの質問に対して、ベクトルにおいて距離の近い文書を検索します。
  4. 見つかった文書とUserの質問文を組み合わせることで正確な回答を生成します。

具体的なコード

具体的なコードでも書いてやろうと思ったのですが現在、既に締め切りをすぎており登校しながら書いております。ほぼ同じ作業は半年前に行なっているのでフォルダを漁ればコードはてでくるのですが、OpenAIの破壊的アップデートによりそのコード見つけてもまぁまぁ修正があるのですよね。

プログラミングいらんという話

実は11月7日のアップデートでembeddingをweb版で行うアップデートが行われています。Creat a GPTという機能でほとんどん同じことができ、knowlegeに参考としたいpdfを入れると自動的にembeddingが行われると考えられています。

試しに2023年度のjudge handbookを入れて質問してみましょう。

https://angry-vanadium-ceb.notion.site/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F488ae9e4-91fb-44da-b02a-428688e6feaa%2F6cb0b1d5-114b-47ad-b248-f66756971178%2F%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588_2023-12-19_19.06.41.png?table=block&id=56cf972d-f1a1-46f3-8041-8652db772ae2&spaceId=488ae9e4-91fb-44da-b02a-428688e6feaa&width=2000&userId=&cache=v2

このようにほぼhandbookを英訳した文を出してくれました。

参考にしたページ数などを聞いてもうまく回答できないなどの不満点などはありますがじきに改善されるでしょうね。

このようにしてLLMに対してprivate sourceから回答を引き出すことができました。

欠点 :

ベクトル化された文章や単語を利用する手法には、いくつかの制約があります。特に、質問文から直接的に答えを導出できないケースでは、この方法では効果的な回答を生成することが困難です。これは、ベクトル化手法が主に既存の文書や単語の関係性に基づいているため、新規の質問や独自のコンテキストに対応しきれない場合があるからです。

この問題を解決するための一つの方法は、まず大規模言語モデル(LLM)を用いて質問に対する理解を深めることです。LLMは質問の意図や必要とされる情報を分析し、適切な知識を特定することができます。その後、この分析結果を基にして、関連する文書や情報源をベクトル化手法で検索します。

展望あるいは野望

私は現在このような技術を応用して、自然言語的、会話形式によるbiobricksの選択やプラスミドの設計について構想を練っています。どこに出すかは考え中ですね。

既にbiobricksでは数百partsをindexとするシステムは完成しております。肝心なpartsデータの質が悪く思った動きをしてくれませんでしたが…

このプロジェクトの動機としては単純に私の興味なのですが、副次効果としてあまり専門が分子生物学に寄っていない人でもiGEMに参加しやすくなることを可能にすると思っています。

それは生物を専門とする人のみでなくさまざまな人がiGEMのコミュニティに積極的に参加することによって合成生物学ひいては生物をリーチしていく、というiGEMの理念に沿ったものだと思います。

自語弐またはpoem

私は今年の表彰式を日本から映像で見ていたのですが、正直iGEM Tokyotechの名前が数時間に及ぶ表彰式において登場したのは最後のsilver発表の5秒程度のみでしょう。陳腐な感想かもしれませんがとても悔しかったです。

私は私なりに目的意識を持って大学受験を決意したと自負していますが、それでもふと自分が大学に居る意味ついて考えてしまいます。その意味の一つとして来年の今ごろ胸を張ってiGEMと添えられたらなんと幸せだろうと思いながら、そうなるよう明日の努力を誓って締めとさせていただきます。

最後になりますがこれからさらに寒くなりますがお体に気をつけ下さい。以上