Bu repo, çeşitli doğal dil işleme (NLP) modellerinin eğitim süreçlerini ve bu modellerin API olarak sunulmasını içeren kodları barındırmaktadır. Projede yer alan her bir dosya, belirli bir NLP görevi için özel olarak hazırlanmış olup, bu görevlerin nasıl gerçekleştirileceğine dair kapsamlı örnekler sunmaktadır.
main.pyBu dosya, FastAPI kullanarak oluşturulmuş bir NLP (Doğal Dil İşleme) pipeline'ını içermektedir. Bu pipeline, Named Entity Recognition (NER), Aspect-Based Sentiment Analysis (ABSA) ve geleneksel duygu analizi modellerini birleştirerek kapsamlı bir metin analizi sunmaktadır.
Bu FastAPI uygulaması, aşağıdaki NLP görevlerini gerçekleştiren bir API sunmaktadır:
Uygulama, verilen bir metin içerisindeki varlıkları (entities) tespit eder, bu varlıklar için duygu analizi yapar ve sonuçları JSON formatında döndürür.
Proje için aşağıdaki kütüphaneler gerekmektedir:
Gerekli kütüphaneleri yükleyin:
pip install fastapi uvicorn torch transformers numpy pydantic
Projeyi klonlayın:
git clone [repo_url]
cd [repo_directory]
Uygulamayı çalıştırın:
python main.py
Uygulama varsayılan olarak http://0.0.0.0:8000 adresinde çalışacaktır.
import requests
url = "http://localhost:8000/predict"
data = {"text": "Spotify'da müzik dinlerken hiçbir problem yaşamıyorum, ancak SoundCloud üzerinden yayınları dinlemek bazen kesintiye uğruyor ve bu durum oldukça sinir bozucu."}
response = requests.post(url, json=data)
print(response.json())
notebooks/turkish-bert-ner-fine-tune.ipynbTurkish BERT NER Fine-Tuning
Bu notebook, Türkçe metinler üzerinde Named Entity Recognition (NER) görevi için bir BERT modelini fine-tune etmeyi amaçlamaktadır. Proje, Hugging Face'in Transformers kütüphanesini kullanarak gerçekleştirilmiştir. Türkçe NER görevi için bir BERT modelini fine-tune etmek için adım adım bir süreç sunmaktadır. Proje şu ana adımları içerir:
Proje için aşağıdaki kütüphaneler gerekmektedir:
Proje, turkish-wikiNER veri setini kullanmaktadır. Bu veri seti, Hugging Face Datasets kütüphanesi aracılığıyla yüklenmektedir.
Eğitim için dbmdz/bert-base-turkish-cased modeli temel alınmıştır. Eğitim parametreleri şu şekildedir:
Bu NER modeli, toplam 19 farklı varlık türünü tanıyabilmektedir. Varlıklar, BIO (Beginning, Inside, Outside) formatını kullanmaktadır. Etiketler şunlardır:
Tanınan varlık türleri:
Her bir varlık türü için B- ve I- önekleri bulunmaktadır (örneğin, B-PERSON ve I-PERSON).
Bu geniş etiket yelpazesi, modelin çeşitli alanlarda ve farklı türdeki metinlerde kullanılabilmesini sağlamaktadır.
Model performansı, F1 skoru kullanılarak değerlendirilmektedir. Değerlendirme için seqeval kütüphanesi kullanılmıştır.
Eğitilmiş model, Hugging Face Model Hub'a yüklenmiştir ve moarslan/bert-base-turkish-cased-ner adresinden erişilebilir.
notebooks/deberta-absa.ipynbDeBERTa (Decoding-enhanced BERT with Disentangled Attention) modeli, BERT'in geliştirilmiş bir versiyonudur. Bu model, iki temel yenilik sunar:
Ayrıştırılmış Dikkat Mekanizması (Disentangled Attention): Bu mekanizma, kelimelerin içerik ve pozisyon bilgilerini ayrı ayrı kodlar. Bu sayede model, kelimelerin anlamlarını ve cümle içindeki konumlarını daha iyi anlayabilir.
Geliştirilmiş Maske Kodlaması (Enhanced Mask Decoder): Bu özellik, modelin maskelenmiş kelimeleri tahmin ederken bağlamı daha iyi kullanmasını sağlar.
ABSA, bir metindeki belirli yönler (aspect) hakkındaki duygu durumunu analiz etmeye odaklanan bir NLP tekniğidir. Örneğin, bir restoran yorumunda yemek kalitesi, servis ve fiyat gibi farklı yönler için ayrı ayrı duygu analizi yapılabilir.
yangheng/deberta-v3-base-absa-v1.1 modeli, DeBERTa'nın güçlü özelliklerini ABSA görevine uyarlamıştır. Bu model:
DeBERTa ABSA modelinin tokenizer'ı, metni model için uygun girdi formatına dönüştürür. Bu tokenizer:
inputs = absa_tokenizer(f"[CLS] {sentence} [SEP] {aspect} [SEP]", return_tensors="pt")
Bu kullanımda:
[CLS]: Sınıflandırma tokeni, cümlenin başında bulunur.sentence: Analiz edilecek ana metin.[SEP]: Ayırıcı token, ana metin ile aspect arasında ve aspect'ten sonra kullanılır.aspect: Analiz edilecek spesifik yön.Bu yapı, modele hangi cümlenin hangi yön için analiz edileceğini açıkça belirtir.
Model, her bir duygu sınıfı (olumsuz, nötr, olumlu) için bir olasılık değeri üretir. En yüksek olasılığa sahip sınıf, o aspect için tahmin edilen duygu durumunu temsil eder.
Bu detaylı yaklaşım, metin analizinde daha hassas ve bağlama duyarlı sonuçlar elde etmeyi sağlar.
notebooks/classification-model.ipynbTürkçe Duygu Analizi Sınıflandırma Modeli
Bu notebook, Türkçe metinler üzerinde duygu analizi yapmak için BERT tabanlı bir sınıflandırma modelini içermektedir. Model, metinleri "Negatif", "Nötr" ve "Pozitif" olarak sınıflandırmaktadır.
Bu proje, dbmdz/bert-base-turkish-cased önce eğitilmiş modelini temel alarak Türkçe metinler için bir duygu analizi modeli geliştirmeyi amaçlamaktadır. Model, PyTorch ve Transformers kütüphaneleri kullanılarak eğitilmiştir.
Model eğitimi şu adımları içermektedir:
Eğitim parametreleri:
Model performansı, aşağıdaki metrikler kullanılarak değerlendirilmiştir:
Değerlendirme sonuçları için eval_root() fonksiyonu kullanılmıştır.
notebooks/llm-peft.ipynbProje sırasında uyguladığımız PEFT (Parameter-Efficient Fine-Tuning) yöntemiyle LLM (Language Model) modeline ince ayar yapmaya çalıştık. Ancak, donanım yetersizliği nedeniyle tam anlamıyla uygulayamadık.
Few-shot öğrenme sonucunda elde edilen sonuçlar beklentilerin altında kaldı; belki daha fazla veri kullanarak daha iyi sonuçlar elde edebilirdik. Bu, modelin performansını artırmak için gelecekte dikkate alınması gereken önemli bir faktör olabilir.
notebooks/llm-fine-tune.ipynbTrendyol/Trendyol-LLM-7b-chat-dpo-v1.0 modeli ile fine-tuning çalışmaları yapıldı, ancak beklenen sonuçlar elde edilemedi. Ayrıca, modelin inferans aşamasında farklı promptlarla denemeler yapıldı fakat sonuçlar tatmin edici değildi. Modelin mevcut konfigürasyonu ve veri seti ile uyumu yeterli düzeyde olmadığından, performans beklentilerimizi karşılamadı.
Ayrıca microsoft/Phi-3-mini-128k-instruct, TURKCELL/Turkcell-LLM-7b-v1 ve meta-llama/Meta-Llama-3.1-8B modellerini de prompt engineering ve örnek input-output çiftleriyle eğiterek test ettik. Fakat bu modellerden phi modeli çok küçük bir model olduğu için, turkcell ve llama-3 modelleri ise donanım yetersizlikleri nedeniyle istenilen sonuçları vermedi.
Cümle çıkarımı ve analiz denemelerimizde nltk ve spaCy kütüphanelerini kullanarak sentence ve entity belirlemeye çalıştık. Ancak, bu denemeler beklentilerimizi karşılamadı. İşte bu süreçte karşılaştığımız bazı zorluklar ve gözlemlerimiz:
Entiteleri belirlemek için kullandığımız modeller, özellikle Türkçe metinlerde sentence sınırlarını doğru bir şekilde tanımlamakta zorlandı. Sentence sınırlarının ve yapılarının karmaşıklığı nedeniyle, entiteler ile ilgili cümleleri doğru eşleştiremedik.
Metinleri cümlelere bölerek her bir sentence için entity tespiti yapmaya çalıştık. Ancak, sentence'ların doğru bir şekilde ayrıştırılması ve ilgili entitelerin tespiti, mevcut araçların dil ve yapısal karmaşıklığı nedeniyle yeterince hassas olmadı.
Kullanılan yöntemlerle, entitelerin yalnızca extraction üzerinde çalıştık. Sentence ve entity eşleştirmesi, elde edilen sonuçların beklenilen doğrulukta olmamasına neden oldu. Türkçe dil yapısının karmaşıklığı, bu süreçte karşılaştığımız en büyük zorluklardan biri olarak öne çıktı.
Bu denemeler, entity ve sentence tespiti konusundaki sınırlamaları ortaya koydu. Türkçe metinlerde daha iyi performans gösterebilecek özel eğitimli modellere veya daha ileri seviye dil işleme araçlarına ihtiyaç olduğunu fark ettik. Kullandığımız araçlar, sentence extraction ve entity tespiti için yeterince güçlü sonuçlar veremedi.
Bu proje, MIT Lisansı altında lisanslanmıştır. Detaylı bilgi için LICENSE dosyasını inceleyebilirsiniz.
Bu proje, Türkçe metinler üzerinde çeşitli NLP görevlerini gerçekleştirmek isteyenler için kapsamlı bir kaynak sunmaktadır. Modellerin eğitim süreçlerinden API servisi haline getirilmesine kadar tüm adımlar ayrıntılı olarak dokümante edilmiştir.
3 commits
Jupyter Notebook
99.1%
Bu repo, çeşitli doğal dil işleme (NLP) modellerinin eğitim süreçlerini ve bu modellerin API olarak sunulmasını içeren kodları barındırmaktadır. Projede yer alan her bir dosya, belirli bir NLP görevi için özel olarak hazırlanmış olup, bu görevlerin nasıl gerçekleştirileceğine dair kapsamlı örnekler sunmaktadır.
main.pyBu dosya, FastAPI kullanarak oluşturulmuş bir NLP (Doğal Dil İşleme) pipeline'ını içermektedir. Bu pipeline, Named Entity Recognition (NER), Aspect-Based Sentiment Analysis (ABSA) ve geleneksel duygu analizi modellerini birleştirerek kapsamlı bir metin analizi sunmaktadır.
Bu FastAPI uygulaması, aşağıdaki NLP görevlerini gerçekleştiren bir API sunmaktadır:
Uygulama, verilen bir metin içerisindeki varlıkları (entities) tespit eder, bu varlıklar için duygu analizi yapar ve sonuçları JSON formatında döndürür.
Proje için aşağıdaki kütüphaneler gerekmektedir:
Gerekli kütüphaneleri yükleyin:
pip install fastapi uvicorn torch transformers numpy pydantic
Projeyi klonlayın:
git clone [repo_url]
cd [repo_directory]
Uygulamayı çalıştırın:
python main.py
Uygulama varsayılan olarak http://0.0.0.0:8000 adresinde çalışacaktır.
import requests
url = "http://localhost:8000/predict"
data = {"text": "Spotify'da müzik dinlerken hiçbir problem yaşamıyorum, ancak SoundCloud üzerinden yayınları dinlemek bazen kesintiye uğruyor ve bu durum oldukça sinir bozucu."}
response = requests.post(url, json=data)
print(response.json())
notebooks/turkish-bert-ner-fine-tune.ipynbTurkish BERT NER Fine-Tuning
Bu notebook, Türkçe metinler üzerinde Named Entity Recognition (NER) görevi için bir BERT modelini fine-tune etmeyi amaçlamaktadır. Proje, Hugging Face'in Transformers kütüphanesini kullanarak gerçekleştirilmiştir. Türkçe NER görevi için bir BERT modelini fine-tune etmek için adım adım bir süreç sunmaktadır. Proje şu ana adımları içerir:
Proje için aşağıdaki kütüphaneler gerekmektedir:
Proje, turkish-wikiNER veri setini kullanmaktadır. Bu veri seti, Hugging Face Datasets kütüphanesi aracılığıyla yüklenmektedir.
Eğitim için dbmdz/bert-base-turkish-cased modeli temel alınmıştır. Eğitim parametreleri şu şekildedir:
Bu NER modeli, toplam 19 farklı varlık türünü tanıyabilmektedir. Varlıklar, BIO (Beginning, Inside, Outside) formatını kullanmaktadır. Etiketler şunlardır:
Tanınan varlık türleri:
Her bir varlık türü için B- ve I- önekleri bulunmaktadır (örneğin, B-PERSON ve I-PERSON).
Bu geniş etiket yelpazesi, modelin çeşitli alanlarda ve farklı türdeki metinlerde kullanılabilmesini sağlamaktadır.
Model performansı, F1 skoru kullanılarak değerlendirilmektedir. Değerlendirme için seqeval kütüphanesi kullanılmıştır.
Eğitilmiş model, Hugging Face Model Hub'a yüklenmiştir ve moarslan/bert-base-turkish-cased-ner adresinden erişilebilir.
notebooks/deberta-absa.ipynbDeBERTa (Decoding-enhanced BERT with Disentangled Attention) modeli, BERT'in geliştirilmiş bir versiyonudur. Bu model, iki temel yenilik sunar:
Ayrıştırılmış Dikkat Mekanizması (Disentangled Attention): Bu mekanizma, kelimelerin içerik ve pozisyon bilgilerini ayrı ayrı kodlar. Bu sayede model, kelimelerin anlamlarını ve cümle içindeki konumlarını daha iyi anlayabilir.
Geliştirilmiş Maske Kodlaması (Enhanced Mask Decoder): Bu özellik, modelin maskelenmiş kelimeleri tahmin ederken bağlamı daha iyi kullanmasını sağlar.
ABSA, bir metindeki belirli yönler (aspect) hakkındaki duygu durumunu analiz etmeye odaklanan bir NLP tekniğidir. Örneğin, bir restoran yorumunda yemek kalitesi, servis ve fiyat gibi farklı yönler için ayrı ayrı duygu analizi yapılabilir.
yangheng/deberta-v3-base-absa-v1.1 modeli, DeBERTa'nın güçlü özelliklerini ABSA görevine uyarlamıştır. Bu model:
DeBERTa ABSA modelinin tokenizer'ı, metni model için uygun girdi formatına dönüştürür. Bu tokenizer:
inputs = absa_tokenizer(f"[CLS] {sentence} [SEP] {aspect} [SEP]", return_tensors="pt")
Bu kullanımda:
[CLS]: Sınıflandırma tokeni, cümlenin başında bulunur.sentence: Analiz edilecek ana metin.[SEP]: Ayırıcı token, ana metin ile aspect arasında ve aspect'ten sonra kullanılır.aspect: Analiz edilecek spesifik yön.Bu yapı, modele hangi cümlenin hangi yön için analiz edileceğini açıkça belirtir.
Model, her bir duygu sınıfı (olumsuz, nötr, olumlu) için bir olasılık değeri üretir. En yüksek olasılığa sahip sınıf, o aspect için tahmin edilen duygu durumunu temsil eder.
Bu detaylı yaklaşım, metin analizinde daha hassas ve bağlama duyarlı sonuçlar elde etmeyi sağlar.
notebooks/classification-model.ipynbTürkçe Duygu Analizi Sınıflandırma Modeli
Bu notebook, Türkçe metinler üzerinde duygu analizi yapmak için BERT tabanlı bir sınıflandırma modelini içermektedir. Model, metinleri "Negatif", "Nötr" ve "Pozitif" olarak sınıflandırmaktadır.
Bu proje, dbmdz/bert-base-turkish-cased önce eğitilmiş modelini temel alarak Türkçe metinler için bir duygu analizi modeli geliştirmeyi amaçlamaktadır. Model, PyTorch ve Transformers kütüphaneleri kullanılarak eğitilmiştir.
Model eğitimi şu adımları içermektedir:
Eğitim parametreleri:
Model performansı, aşağıdaki metrikler kullanılarak değerlendirilmiştir:
Değerlendirme sonuçları için eval_root() fonksiyonu kullanılmıştır.
notebooks/llm-peft.ipynbProje sırasında uyguladığımız PEFT (Parameter-Efficient Fine-Tuning) yöntemiyle LLM (Language Model) modeline ince ayar yapmaya çalıştık. Ancak, donanım yetersizliği nedeniyle tam anlamıyla uygulayamadık.
Few-shot öğrenme sonucunda elde edilen sonuçlar beklentilerin altında kaldı; belki daha fazla veri kullanarak daha iyi sonuçlar elde edebilirdik. Bu, modelin performansını artırmak için gelecekte dikkate alınması gereken önemli bir faktör olabilir.
notebooks/llm-fine-tune.ipynbTrendyol/Trendyol-LLM-7b-chat-dpo-v1.0 modeli ile fine-tuning çalışmaları yapıldı, ancak beklenen sonuçlar elde edilemedi. Ayrıca, modelin inferans aşamasında farklı promptlarla denemeler yapıldı fakat sonuçlar tatmin edici değildi. Modelin mevcut konfigürasyonu ve veri seti ile uyumu yeterli düzeyde olmadığından, performans beklentilerimizi karşılamadı.
Ayrıca microsoft/Phi-3-mini-128k-instruct, TURKCELL/Turkcell-LLM-7b-v1 ve meta-llama/Meta-Llama-3.1-8B modellerini de prompt engineering ve örnek input-output çiftleriyle eğiterek test ettik. Fakat bu modellerden phi modeli çok küçük bir model olduğu için, turkcell ve llama-3 modelleri ise donanım yetersizlikleri nedeniyle istenilen sonuçları vermedi.
Cümle çıkarımı ve analiz denemelerimizde nltk ve spaCy kütüphanelerini kullanarak sentence ve entity belirlemeye çalıştık. Ancak, bu denemeler beklentilerimizi karşılamadı. İşte bu süreçte karşılaştığımız bazı zorluklar ve gözlemlerimiz:
Entiteleri belirlemek için kullandığımız modeller, özellikle Türkçe metinlerde sentence sınırlarını doğru bir şekilde tanımlamakta zorlandı. Sentence sınırlarının ve yapılarının karmaşıklığı nedeniyle, entiteler ile ilgili cümleleri doğru eşleştiremedik.
Metinleri cümlelere bölerek her bir sentence için entity tespiti yapmaya çalıştık. Ancak, sentence'ların doğru bir şekilde ayrıştırılması ve ilgili entitelerin tespiti, mevcut araçların dil ve yapısal karmaşıklığı nedeniyle yeterince hassas olmadı.
Kullanılan yöntemlerle, entitelerin yalnızca extraction üzerinde çalıştık. Sentence ve entity eşleştirmesi, elde edilen sonuçların beklenilen doğrulukta olmamasına neden oldu. Türkçe dil yapısının karmaşıklığı, bu süreçte karşılaştığımız en büyük zorluklardan biri olarak öne çıktı.
Bu denemeler, entity ve sentence tespiti konusundaki sınırlamaları ortaya koydu. Türkçe metinlerde daha iyi performans gösterebilecek özel eğitimli modellere veya daha ileri seviye dil işleme araçlarına ihtiyaç olduğunu fark ettik. Kullandığımız araçlar, sentence extraction ve entity tespiti için yeterince güçlü sonuçlar veremedi.
Bu proje, MIT Lisansı altında lisanslanmıştır. Detaylı bilgi için LICENSE dosyasını inceleyebilirsiniz.
Bu proje, Türkçe metinler üzerinde çeşitli NLP görevlerini gerçekleştirmek isteyenler için kapsamlı bir kaynak sunmaktadır. Modellerin eğitim süreçlerinden API servisi haline getirilmesine kadar tüm adımlar ayrıntılı olarak dokümante edilmiştir.
3 commits
Jupyter Notebook
99.1%