text_similarity_comparison
Public
Created
Aug 5, 2025
Bu proje, iki farklı Transformer modeli kullanarak metinler arasındaki anlamsal benzerliği hesaplayan bir Python betiği içerir. Metinler önce vektör temsillerine (embedding) dönüştürülür ve ardından bu vektörler arasındaki benzerlik **Kosinüs Benzerliği (Cosine Similarity)** metriği ile ölçülür. ✨
1
Stars
0
Forks
1
Watchers
0
Issues
Repository Details
Primary Language
Python
Repository Size
0 MB
Default Branch
main
Created
August 5, 2025
Last Update
August 19, 2025
README.md
Elbette, aşağıda `README.md` dosyasının içeriğini bulabilirsiniz. Bu içeriği kopyalayıp projenizin ana dizininde `README.md` adıyla bir dosyaya yapıştırabilirsiniz.
````markdown
# Metin Benzerliği Hesaplayıcı (Text Similarity Calculator)
Bu proje, iki farklı Transformer modeli kullanarak metinler arasındaki anlamsal benzerliği hesaplayan bir Python betiği içerir. Metinler önce vektör temsillerine (embedding) dönüştürülür ve ardından bu vektörler arasındaki benzerlik **Kosinüs Benzerliği (Cosine Similarity)** metriği ile ölçülür.
✨ Proje, hem önceden tanımlanmış metinlerle bir demo sunar hem de kullanıcıların kendi metinlerini girebilecekleri interaktif bir mod içerir.
---
## 🚀 Özellikler
- **İki Farklı Model:** Metin gömme işlemleri için iki popüler model kullanır:
1. `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`
2. `dbmdz/bert-base-turkish-cased`
- **Kosinüs Benzerliği:** Vektörler arasındaki anlamsal yakınlığı `-1` ile `1` arasında bir skorla hesaplar.
- **Demo Modu:** Betiğin nasıl çalıştığını gösteren örnek metinlerle hızlı bir başlangıç sunar.
- **İnteraktif Mod:** Kullanıcıların kendi metin çiftlerini veya listelerini karşılaştırmasına olanak tanır.
- **GPU Desteği:** Eğer sistemde uyumlu bir GPU varsa (`CUDA` destekli), hesaplamaları hızlandırmak için otomatik olarak onu kullanır.
---
## 🔧 Kurulum
Projeyi yerel makinenizde çalıştırmak için aşağıdaki adımları izleyin.
1. **Projeyi Klonlayın:**
```bash
git clone [https://github.com/kullanici-adiniz/proje-adiniz.git](https://github.com/kullanici-adiniz/proje-adiniz.git)
cd proje-adiniz
```
2. **Sanal Ortam Oluşturun (Önerilir):**
```bash
python -m venv venv
```
* **Windows:**
```powershell
.\venv\Scripts\Activate.ps1
```
* **macOS / Linux:**
```bash
source venv/bin/activate
```
3. **Gerekli Kütüphaneleri Yükleyin:**
Proje için gerekli olan kütüphaneler `requirements.txt` dosyasında listelenmiştir.
```bash
pip install -r requirements.txt
```
`requirements.txt` dosyanızın içeriği aşağıdaki gibi olmalıdır:
```txt
numpy
torch
sentence-transformers
transformers
scikit-learn
```
---
## 💻 Kullanım
Kurulum tamamlandıktan sonra betiği komut satırından çalıştırabilirsiniz.
```bash
python main.py
````
*(Betiğinizin adının `main.py` olduğunu varsayarak)*
Betiği çalıştırdığınızda:
1. Önce `main()` fonksiyonu çalışır ve önceden tanımlanmış test metinleri için her iki modelin benzerlik skorlarını hesaplayıp ekrana yazdırır.
2. Demo tamamlandıktan sonra, interaktif moda geçmek isteyip istemediğiniz sorulur. `y` veya `evet` yazarak devam edebilirsiniz.
### İnteraktif Mod
İnteraktif modda iki seçeneğiniz vardır:
1. **Metin çiftini karşılaştır:** İki adet metin girerek aralarındaki benzerlik skorunu doğrudan öğrenirsiniz.
2. **Metin listesini analiz et:** İkiden fazla metin girerek bu metinlerin kendi aralarındaki tüm kombinasyonlarının benzerlik skorlarını içeren bir matris elde edersiniz.
-----
## 📝 Örnek Çıktı (Demo Modu)
Betiği ilk çalıştırdığınızda alacağınız demo çıktısı aşağıdaki gibi olacaktır:
```
Metin Embedding ve Cosine Similarity Hesaplama
============================================================
Models loading...
Loading Sentence Transformer model...
✓ Sentence Transformer model loaded
Loading BERT model...
✓ BERT model loaded
✓ Device: cpu
--------------------------------------------------
Sentence Transformer ile embedding hesaplanıyor...
✓ Sentence Transformer tamamlandı
BERT ile embedding hesaplanıyor...
✓ BERT tamamlandı
Sentence Transformer (Multilingual MiniLM) - Cosine Similarity Sonuçları:
============================================================
Metin 1 - Metin 2: 0.9388
'Merhaba, nasılsın? Bugün hava çok güzel.'...
'Selam, nasıl gidiyor? Bugün hava gerçekten harika.'...
----------------------------------------
Metin 3 - Metin 4: 0.9501
'Yapay zeka teknolojileri hızla gelişiyor ve hayatı...'
'AI teknolojileri çok hızlı gelişiyor ve yaşamımızı...'
----------------------------------------
Metin 5 - Metin 6: 0.9392
'Spor yapmak sağlık için çok önemlidir.'...
'Düzenli egzersiz sağlığımız için gereklidir.'...
----------------------------------------
... (diğer kombinasyonlar) ...
BERT (Turkish Cased) - Cosine Similarity Sonuçları:
============================================================
Metin 1 - Metin 2: 0.9859
'Merhaba, nasılsın? Bugün hava çok güzel.'...
'Selam, nasıl gidiyor? Bugün hava gerçekten harika.'...
----------------------------------------
Metin 3 - Metin 4: 0.9822
'Yapay zeka teknolojileri hızla gelişiyor ve hayatı...'
'AI teknolojileri çok hızlı gelişiyor ve yaşamımızı...'
----------------------------------------
Metin 5 - Metin 6: 0.9866
'Spor yapmak sağlık için çok önemlidir.'...
'Düzenli egzersiz sağlığımız için gereklidir.'...
----------------------------------------
... (diğer kombinasyonlar) ...
Embedding Bilgileri:
==============================
Sentence Transformer embedding boyutu: (6, 384)
BERT embedding boyutu: (6, 768)
İnteraktif modu başlatmak ister misiniz? (y/n):
```
-----
## 🧠 Kodun Açıklaması
### `TextEmbeddingCalculator` Sınıfı
Bu sınıf, tüm ana mantığı içerir:
- **`__init__()`**: Gerekli olan `SentenceTransformer` ve `BERT` modellerini Hugging Face'den indirir ve belleğe yükler.
- **`get_sentence_transformer_embeddings()`**: `sentence-transformers` kütüphanesinin optimize edilmiş `encode()` metodunu kullanarak metin listesinden embedding vektörleri oluşturur. Bu model, cümle düzeyinde anlamsal benzerlik için özel olarak eğitilmiştir.
- **`get_bert_embeddings()`**: Standart bir BERT modeli kullanarak embedding vektörleri oluşturur. Her cümlenin başına eklenen özel `[CLS]` token'ının çıktı vektörünü cümlenin temsili olarak kullanır. Bu genel amaçlı bir yöntemdir.
- **`calculate_cosine_similarity()`**: `scikit-learn` kütüphanesini kullanarak verilen embedding vektör setleri arasında kosinüs benzerliği matrisini hesaplar.
- **`compare_texts()`**: Ana iş akışını yönetir; metinleri alır, seçilen modele göre embedding'leri hesaplar ve benzerlik skorlarını döndürür.
### Modeller Hakkında
- **`paraphrase-multilingual-MiniLM-L12-v2`**: Farklı dillerdeki cümleleri anlamsal olarak karşılaştırmak için tasarlanmış, hızlı ve etkili bir modeldir. Embedding boyutu `384`'tür.
- **`bert-base-turkish-cased`**: Türkçe metinler üzerinde eğitilmiş, genel amaçlı bir BERT modelidir. Metin sınıflandırma, soru-cevap gibi birçok görev için kullanılabilir. Bu betikte cümle temsili için kullanılmıştır. Embedding boyutu `768`'dir.
```
```
Elbette, aşağıda `README.md` dosyasının içeriğini bulabilirsiniz. Bu içeriği kopyalayıp projenizin ana dizininde `README.md` adıyla bir dosyaya yapıştırabilirsiniz.
````markdown
# Metin Benzerliği Hesaplayıcı (Text Similarity Calculator)
Bu proje, iki farklı Transformer modeli kullanarak metinler arasındaki anlamsal benzerliği hesaplayan bir Python betiği içerir. Metinler önce vektör temsillerine (embedding) dönüştürülür ve ardından bu vektörler arasındaki benzerlik **Kosinüs Benzerliği (Cosine Similarity)** metriği ile ölçülür.
✨ Proje, hem önceden tanımlanmış metinlerle bir demo sunar hem de kullanıcıların kendi metinlerini girebilecekleri interaktif bir mod içerir.
---
## 🚀 Özellikler
- **İki Farklı Model:** Metin gömme işlemleri için iki popüler model kullanır:
1. `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`
2. `dbmdz/bert-base-turkish-cased`
- **Kosinüs Benzerliği:** Vektörler arasındaki anlamsal yakınlığı `-1` ile `1` arasında bir skorla hesaplar.
- **Demo Modu:** Betiğin nasıl çalıştığını gösteren örnek metinlerle hızlı bir başlangıç sunar.
- **İnteraktif Mod:** Kullanıcıların kendi metin çiftlerini veya listelerini karşılaştırmasına olanak tanır.
- **GPU Desteği:** Eğer sistemde uyumlu bir GPU varsa (`CUDA` destekli), hesaplamaları hızlandırmak için otomatik olarak onu kullanır.
---
## 🔧 Kurulum
Projeyi yerel makinenizde çalıştırmak için aşağıdaki adımları izleyin.
1. **Projeyi Klonlayın:**
```bash
git clone [https://github.com/kullanici-adiniz/proje-adiniz.git](https://github.com/kullanici-adiniz/proje-adiniz.git)
cd proje-adiniz
```
2. **Sanal Ortam Oluşturun (Önerilir):**
```bash
python -m venv venv
```
* **Windows:**
```powershell
.\venv\Scripts\Activate.ps1
```
* **macOS / Linux:**
```bash
source venv/bin/activate
```
3. **Gerekli Kütüphaneleri Yükleyin:**
Proje için gerekli olan kütüphaneler `requirements.txt` dosyasında listelenmiştir.
```bash
pip install -r requirements.txt
```
`requirements.txt` dosyanızın içeriği aşağıdaki gibi olmalıdır:
```txt
numpy
torch
sentence-transformers
transformers
scikit-learn
```
---
## 💻 Kullanım
Kurulum tamamlandıktan sonra betiği komut satırından çalıştırabilirsiniz.
```bash
python main.py
````
*(Betiğinizin adının `main.py` olduğunu varsayarak)*
Betiği çalıştırdığınızda:
1. Önce `main()` fonksiyonu çalışır ve önceden tanımlanmış test metinleri için her iki modelin benzerlik skorlarını hesaplayıp ekrana yazdırır.
2. Demo tamamlandıktan sonra, interaktif moda geçmek isteyip istemediğiniz sorulur. `y` veya `evet` yazarak devam edebilirsiniz.
### İnteraktif Mod
İnteraktif modda iki seçeneğiniz vardır:
1. **Metin çiftini karşılaştır:** İki adet metin girerek aralarındaki benzerlik skorunu doğrudan öğrenirsiniz.
2. **Metin listesini analiz et:** İkiden fazla metin girerek bu metinlerin kendi aralarındaki tüm kombinasyonlarının benzerlik skorlarını içeren bir matris elde edersiniz.
-----
## 📝 Örnek Çıktı (Demo Modu)
Betiği ilk çalıştırdığınızda alacağınız demo çıktısı aşağıdaki gibi olacaktır:
```
Metin Embedding ve Cosine Similarity Hesaplama
============================================================
Models loading...
Loading Sentence Transformer model...
✓ Sentence Transformer model loaded
Loading BERT model...
✓ BERT model loaded
✓ Device: cpu
--------------------------------------------------
Sentence Transformer ile embedding hesaplanıyor...
✓ Sentence Transformer tamamlandı
BERT ile embedding hesaplanıyor...
✓ BERT tamamlandı
Sentence Transformer (Multilingual MiniLM) - Cosine Similarity Sonuçları:
============================================================
Metin 1 - Metin 2: 0.9388
'Merhaba, nasılsın? Bugün hava çok güzel.'...
'Selam, nasıl gidiyor? Bugün hava gerçekten harika.'...
----------------------------------------
Metin 3 - Metin 4: 0.9501
'Yapay zeka teknolojileri hızla gelişiyor ve hayatı...'
'AI teknolojileri çok hızlı gelişiyor ve yaşamımızı...'
----------------------------------------
Metin 5 - Metin 6: 0.9392
'Spor yapmak sağlık için çok önemlidir.'...
'Düzenli egzersiz sağlığımız için gereklidir.'...
----------------------------------------
... (diğer kombinasyonlar) ...
BERT (Turkish Cased) - Cosine Similarity Sonuçları:
============================================================
Metin 1 - Metin 2: 0.9859
'Merhaba, nasılsın? Bugün hava çok güzel.'...
'Selam, nasıl gidiyor? Bugün hava gerçekten harika.'...
----------------------------------------
Metin 3 - Metin 4: 0.9822
'Yapay zeka teknolojileri hızla gelişiyor ve hayatı...'
'AI teknolojileri çok hızlı gelişiyor ve yaşamımızı...'
----------------------------------------
Metin 5 - Metin 6: 0.9866
'Spor yapmak sağlık için çok önemlidir.'...
'Düzenli egzersiz sağlığımız için gereklidir.'...
----------------------------------------
... (diğer kombinasyonlar) ...
Embedding Bilgileri:
==============================
Sentence Transformer embedding boyutu: (6, 384)
BERT embedding boyutu: (6, 768)
İnteraktif modu başlatmak ister misiniz? (y/n):
```
-----
## 🧠 Kodun Açıklaması
### `TextEmbeddingCalculator` Sınıfı
Bu sınıf, tüm ana mantığı içerir:
- **`__init__()`**: Gerekli olan `SentenceTransformer` ve `BERT` modellerini Hugging Face'den indirir ve belleğe yükler.
- **`get_sentence_transformer_embeddings()`**: `sentence-transformers` kütüphanesinin optimize edilmiş `encode()` metodunu kullanarak metin listesinden embedding vektörleri oluşturur. Bu model, cümle düzeyinde anlamsal benzerlik için özel olarak eğitilmiştir.
- **`get_bert_embeddings()`**: Standart bir BERT modeli kullanarak embedding vektörleri oluşturur. Her cümlenin başına eklenen özel `[CLS]` token'ının çıktı vektörünü cümlenin temsili olarak kullanır. Bu genel amaçlı bir yöntemdir.
- **`calculate_cosine_similarity()`**: `scikit-learn` kütüphanesini kullanarak verilen embedding vektör setleri arasında kosinüs benzerliği matrisini hesaplar.
- **`compare_texts()`**: Ana iş akışını yönetir; metinleri alır, seçilen modele göre embedding'leri hesaplar ve benzerlik skorlarını döndürür.
### Modeller Hakkında
- **`paraphrase-multilingual-MiniLM-L12-v2`**: Farklı dillerdeki cümleleri anlamsal olarak karşılaştırmak için tasarlanmış, hızlı ve etkili bir modeldir. Embedding boyutu `384`'tür.
- **`bert-base-turkish-cased`**: Türkçe metinler üzerinde eğitilmiş, genel amaçlı bir BERT modelidir. Metin sınıflandırma, soru-cevap gibi birçok görev için kullanılabilir. Bu betikte cümle temsili için kullanılmıştır. Embedding boyutu `768`'dir.
<!-- end list -->
```
```
Quick Setup & Commands
Clone Repository
HTTPS
git clone https://github.com/canuzlas/text_similarity_comparison.git
SSH
git clone git@github.com:canuzlas/text_similarity_comparison.git
Essential Commands
Navigate to project
cd text_similarity_comparison
Install
dependencies
pip install -r requirements.txt
Run application
python main.py