hanifekaptan's picture
Update src/app.py
c59fbd2 verified
import streamlit as st
import tensorflow as tf
import os
import numpy as np
from scipy.spatial.distance import cosine
from two_tower_model import TwoTowerModel
TWO_TOWER_MODEL_SAVE_PATH = os.path.join("src","two_tower_model.keras")
TWO_TOWER_VOCAB_PATH = os.path.join("src","two_tower_vocabulary.json")
TWO_TOWER_EMBEDDING_PATH = os.path.join("src","two_tower_all_embeddings.npy")
st.set_page_config(page_title="Kelime Benzerliği Uygulaması", layout="wide")
st.title("Kelime Benzerliği Arama")
st.write("Girdiğiniz kelimeye en yakın kelimeleri bulmak için modelleri kullanın.")
def load_vocabulary(vocab_path: str) -> list[str]:
import json
with open(vocab_path, 'r', encoding='utf-8') as f:
return json.load(f)
@st.cache_resource
def load_models_and_vocab():
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
two_tower_model_loaded = None
two_tower_vocab = []
all_vocab_embeddings = None
try:
two_tower_vocab = load_vocabulary(TWO_TOWER_VOCAB_PATH)
except Exception as e:
st.error(f"Two-Tower kelime dağarcığı yüklenirken hata oluştu: {e}.")
two_tower_vocab = []
try:
all_vocab_embeddings = np.load(TWO_TOWER_EMBEDDING_PATH)
except Exception as e:
st.error(f"Kelime embeddingleri yüklenirken hata oluştu: {e}.")
all_vocab_embeddings = None
try:
custom_objects = {"TwoTowerModel": TwoTowerModel}
two_tower_model_loaded = tf.keras.models.load_model(TWO_TOWER_MODEL_SAVE_PATH, custom_objects=custom_objects)
except Exception as e:
st.error(f"Two-Tower modeli yüklenirken hata oluştu: {e}.")
return two_tower_model_loaded, two_tower_vocab, all_vocab_embeddings
two_tower_model, vocabulary, all_vocab_embeddings = load_models_and_vocab()
def find_similar_words_two_tower(query_word, two_tower_model, vocabulary, all_vocab_embeddings, top_n=10):
if two_tower_model is None or not vocabulary or all_vocab_embeddings is None:
st.warning("Two-Tower modeli veya kelime dağarcığı/gömmeler yüklenemedi.")
return []
if query_word not in vocabulary:
st.warning(f"''{query_word}'' kelimesi kelime dağarcığında bulunmuyor. Benzerlikler doğru olmayabilir.")
query_embedding = two_tower_model.get_embedding(tf.constant([vocabulary[0]]))
else:
query_embedding = two_tower_model.get_embedding(tf.constant([query_word]))
similarities = []
for i, word_embedding in enumerate(all_vocab_embeddings):
similarity = 1 - cosine(query_embedding.numpy().flatten(), word_embedding.flatten())
similarities.append((vocabulary[i], similarity))
similarities = sorted(similarities, key=lambda x: x[1], reverse=True)
similarities = [s for s in similarities if s[0] != query_word]
return similarities[:top_n]
query_word_input = st.selectbox("Kelime Seçin", options=vocabulary)
if query_word_input:
st.subheader(f"''{query_word_input}'' kelimesi için Benzerlik Sonuçları")
st.markdown("#### Two-Tower Model Sonuçları")
two_tower_results = find_similar_words_two_tower(query_word_input, two_tower_model, vocabulary, all_vocab_embeddings)
if two_tower_results:
for word, score in two_tower_results:
st.write(f"{word}: {score:.4f}")
else:
st.write("Two-Tower modeli için benzer kelime bulunamadı veya model/kelime dağarcığı/embeddingler yüklenemedi.")