ファイルをベクトル化してDBへ保存

ファイルをベクトル化してDBへ保存

if st.sidebar.button("インデックス作成"):
    for file in uploaded_files:
        text = load_word_document(file)
        chunks = split_text(text)
        for i, chunk in enumerate(chunks):
            embed = ollama_embed(chunk)
            st.session_state.collection.add(
                documents=[chunk],
                embeddings=,
                ids=[f"{file.name}_{i}"]
            )
    st.sidebar.success("インデックス作成完了")

によって
ボタンを押したら処理が完了する

if st.sidebar.button("インデックス作成"):

はボタンを押したら、という意味

uploaded_files:

は自作のメソッドで、ファイルアップロードしたときの結果が入っているので

for file in uploaded_files:

でfor ループで file へ代入していく

# ワードファイルのアップロード
uploaded_files = st.sidebar.file_uploader(
    "Wordファイルをアップロード(.docx)",
    type=["docx"],
    accept_multiple_files=True
)

がそのメソッド

# Wordファイルを読み込む関数
def load_word_document(file):
    return "\n".join(para.text for para in Document(file).paragraphs)

も自作のメソッドで

 text = load_word_document(file)

によってアップされたwordファイルの中身を textへ代入

テキストの分割は

# テキスト分割関数
def split_text(text):
    chunk_size = 200
    overlap = 50
    chunks = []
    start = 0
    while start < len(text):
        end = start + chunk_size
        chunks.append(text[start:end])
        start += chunk_size - overlap
    return chunks

で行っているので

chunks = split_text(text)

でチャンクに分割したものを chunks へ格納

for i, chunk in enumerate(chunks):

でインデックスと一緒に代入していく

そして自作したベクトル化関数

# Ollamaからインストールしたモデルを使ったベクトル化関数
def ollama_embed(text):
    r = requests.post(
        "http://localhost:12000/api/embeddings",
        json={"model": "nomic-embed-text", "prompt": text}
    )
    data = r.json()
    return data["embedding"]

これを使い

embed = ollama_embed(chunk)

でベクトル化したものを変数に格納

            st.session_state.collection.add(
                documents=[chunk],
                embeddings=,
                ids=[f"{file.name}_{i}"]
            )


documents=[chunk],は元々の文章
embeddings=,はベクトル化したもの
ids=[f”{file.name}_{i}”]はアップロードしたファイル名とインデックス番号
となる

これでアップしたword ファイルの内容をベクトル化しDBへ保存する仕組みができた

次はインプットした情報をベクトル変換し
そのベクトルと近い情報をDBから撮ってきて回答を得る仕組みを作る

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です