mirror of
https://github.com/wassname/stampy-chat.git
synced 2026-09-23 13:50:27 +08:00
163 lines
5.5 KiB
Python
163 lines
5.5 KiB
Python
import openai
|
|
"""
|
|
import config
|
|
from assistant.semantic_search import AlignmentSearch
|
|
from dataset.create_dataset import Dataset
|
|
|
|
openai.api_key = config.OPENAI_API_KEY
|
|
|
|
from settings import PATH_TO_RAW_DATA, PATH_TO_DATASET, EMBEDDING_MODEL, LEN_EMBEDDINGS
|
|
"""
|
|
from tenacity import (
|
|
retry,
|
|
stop_after_attempt,
|
|
wait_random_exponential,
|
|
)
|
|
|
|
import numpy as np
|
|
|
|
import sys
|
|
import pickle
|
|
from pathlib import Path
|
|
import random
|
|
|
|
src_path = Path(__file__).resolve().parent
|
|
if str(src_path) not in sys.path:
|
|
sys.path.append(str(src_path))
|
|
|
|
from dataset import create_dataset
|
|
#from assistant import semantic_search
|
|
from settings import EMBEDDING_MODEL, PATH_TO_DATASET_DICT_PKL
|
|
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
|
def load_rawdata_into_pkl():
|
|
"""with open(PATH_TO_DATASET, 'rb') as f:
|
|
dataset = pickle.load(f)
|
|
AS = AlignmentSearch(dataset=dataset)
|
|
prompt = "What would be an idea to solve the Alignment Problem? Name the Lesswrong post by Quintin Pope that discusses this idea."
|
|
answer = AS.search_and_answer(prompt, 3, HyDE=False)
|
|
print(answer)
|
|
"""
|
|
# List of possible sources:
|
|
all_sources = ["https://aipulse.org", "ebook", "https://qualiacomputing.com", "alignment forum", "lesswrong", "manual", "arxiv", "https://deepmindsafetyresearch.medium.com", "waitbutwhy.com", "GitHub", "https://aiimpacts.org", "arbital.com", "carado.moe", "nonarxiv_papers", "https://vkrakovna.wordpress.com", "https://jsteinhardt.wordpress.com", "audio-transcripts", "https://intelligence.org", "youtube", "reports", "https://aisafety.camp", "curriculum", "https://www.yudkowsky.net", "distill",
|
|
"Cold Takes", "printouts", "gwern.net", "generative.ink", "greaterwrong.com"] # These last do not have a source field in the .jsonl file
|
|
|
|
# List of sources we are using for the test run:
|
|
custom_sources = [
|
|
"https://aipulse.org",
|
|
"ebook",
|
|
"https://qualiacomputing.com",
|
|
"alignment forum",
|
|
"lesswrong",
|
|
"manual",
|
|
"arxiv",
|
|
"https://deepmindsafetyresearch.medium.com/",
|
|
"waitbutwhy.com",
|
|
"GitHub",
|
|
"https://aiimpacts.org",
|
|
"arbital.com",
|
|
"carado.moe",
|
|
"nonarxiv_papers",
|
|
"https://vkrakovna.wordpress.com",
|
|
"https://jsteinhardt.wordpress.com",
|
|
"audio-transcripts",
|
|
"https://intelligence.org",
|
|
"youtube",
|
|
"reports",
|
|
"https://aisafety.camp",
|
|
"curriculum",
|
|
"https://www.yudkowsky.net",
|
|
"distill",
|
|
"Cold Takes",
|
|
"printouts",
|
|
"gwern.net",
|
|
"generative.ink",
|
|
"greaterwrong.com"
|
|
]
|
|
|
|
dataset = create_dataset.Dataset(
|
|
custom_sources=custom_sources,
|
|
rate_limit_per_minute=3500,
|
|
min_tokens_per_block=200, max_tokens_per_block=300,
|
|
# fraction_of_articles_to_use=1/150,
|
|
)
|
|
dataset.get_alignment_texts()
|
|
|
|
print(len(dataset.embedding_strings))
|
|
print(dataset.total_word_count)
|
|
print(dataset.total_block_count)
|
|
print(dataset.articles_count)
|
|
|
|
dataset.get_embeddings()
|
|
dataset.save_data()
|
|
|
|
@retry(wait=wait_random_exponential(min=1, max=20), stop=stop_after_attempt(4))
|
|
def get_embedding(text: str) -> np.ndarray:
|
|
result = openai.Embedding.create(model=EMBEDDING_MODEL, input=text)
|
|
return np.array(result["data"][0]["embedding"])
|
|
|
|
def print_out_dataset_stuff():
|
|
with open(PATH_TO_DATASET_PKL, 'rb') as f:
|
|
dataset = pickle.load(f)
|
|
|
|
embeddings_len = len(dataset.embedding_strings)
|
|
i1 = random.randint(0,embeddings_len-1)
|
|
#i2 = random.randint(0,embeddings_len-1)
|
|
#print(len(dataset.embeddings))
|
|
#print(len(dataset.embedding_strings))
|
|
#embedding_test = get_embedding(dataset.embedding_strings[i])
|
|
#print(np.dot(embedding_test,dataset.embeddings[i]))
|
|
|
|
metadata_i1 = dataset.embeddings_metadata_index[i1]
|
|
print("metadata:",dataset.metadata[metadata_i1])
|
|
print("embedding_string:",dataset.embedding_strings[i1])
|
|
#print("embedding_vector:",dataset.embeddings[i1])
|
|
embedding_of_string1 = get_embedding(dataset.embedding_strings[i1])
|
|
|
|
#metadata_i2 = dataset.embeddings_metadata_index[i2]
|
|
#print("metadata:",dataset.metadata[metadata_i2])
|
|
#print("embedding_string:",dataset.embedding_strings[i2])
|
|
#print("embedding_vector:",dataset.embeddings[i1])
|
|
#embedding_of_string2 = get_embedding(dataset.embedding_strings[i2])
|
|
#embedding_of_string2 = get_embedding("000000000000000000000000000000000000000000000000000000000000000000000000000000000")
|
|
|
|
#print(len(embedding_of_string1))
|
|
vector = dataset.embeddings[i1]
|
|
plot_likelihood(vector)
|
|
#plot_likelihood(get_embedding("tst"))
|
|
print(max(vector), min(vector))
|
|
print(sum([x**2 for x in vector]))
|
|
|
|
|
|
|
|
|
|
#print(np.dot(embedding_of_string1, embedding_of_string2))
|
|
|
|
def plot_likelihood(embeddings, num_buckets=200):
|
|
# Calculate the histogram
|
|
histogram, bin_edges = np.histogram(embeddings.flatten(), bins=num_buckets, range=(embeddings.min(), embeddings.max()))
|
|
|
|
# Normalize the histogram to get likelihoods
|
|
likelihoods = histogram / embeddings.flatten().size
|
|
|
|
# Plot the likelihoods
|
|
plt.bar(bin_edges[:-1], likelihoods, width=(bin_edges[1] - bin_edges[0]), edgecolor="k", alpha=0.7)
|
|
plt.xlabel("Value")
|
|
plt.ylabel("Likelihood")
|
|
plt.title("Likelihood of Floats in the Vector Embedding")
|
|
plt.savefig("bla.png")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# load_rawdata_into_pkl()
|
|
# print_out_dataset_stuff()
|
|
|
|
with open(PATH_TO_DATASET_DICT_PKL, 'rb') as f:
|
|
dataset = pickle.load(f) |