Awesome Open Source
Awesome Open Source

Takm yeleri

FIXY

Amacmz Trke NLP literatrndeki birok farkl sorunu bir arada zebilen, esiz yaklamlar ne sren ve literatrdeki almalarn eksiklerini gideren open source bir yazm destekleyicisi/denetleyicisi oluturmak. Kullanclarn yazdklar metinlerdeki yazm yanllarn derin renme yaklamyla zp ayn zamanda metinlerde anlamsal analizi de gerekletirerek bu balamda ortaya kan yanllar da fark edip dzeltebilmek.

Anlamsal yazm yanl dzeltme

Literatrde her ne kadar yazm yanllarn dzelten birok ktphane olsa da bunlarn hibiri anlamsal balamda meydana gelen hatalar dzeltme kapasitesine sahip deildi. Bu tarz hatalarn en nemlilerinden olan bala ve ek olan durumlarda ayr veya bitiik yazlmas gereken -da/-de, -ki, ve -mi rnek olarak verilebilir. almamz tamamyla esiz olup, literatrdeki btn rneklerinden ok daha iyi bir performans sergilemitir. Model olarak 1DCNN, GRU, LSTM RNN denenmi olup en iyi performans veren model olarak 2 layerl Bidirectional LSTM seilmitir, bayesian search optimization teknii ile parametreleri optimal deerlere ulatrlmtr.

Modelin performansnn hem resmi hem de resmi olmayan dilde gzel sonu vermesi ve genellemesi adna 3 farkl dataset birletirilmitir. Bunlar OPUS Subtitle veriseti, TSCORPUS Wikipedia veriseti ve TSCORPUS gazete verisetidir.

almamzda 85 milyondan fazla satrda veri ilenmitir. n ileme olarak bitiik olan ekler kelimelerden ayrlm ve X ile yer deitirilmitir. Ayr olan ekler de X ile yer deitirilmitir. Bu sayede modelin ayn cmlede birden fazla ek olmas durumunda da daha doru sonular vermesi amalanmtr. n ileme ileminin ardndan ayr olan ekleri ieren cmleler 0, bitiik olan ekleri ieren cmleler ise 1 ile etiketlenmitir. Ardndan modelin hatal renmesine kar 0 ve 1 labellarndan fazla sayda olanlar random undersampling ile azaltlmtr. Sonu olarak model hatalar deil eklerin nasl doru yazlmas gerektiini renmitir. Oluturulan verisetlerinin %20si test %10u da validation verisi olarak kullanlmtr. Tm verisetlerine csv formatnda data klasrnn ierisinden ya da aadaki balklar altnda bulunan drive linklerinden ulaabilirsiniz.

Modelleri pre_trained_weights klasrnde bulunan weightler ile dorudan ykleyip test edebilirsiniz. Ya da siz de kendi dzelticinizi kendi verilerinizle veya bizim paylatmz veriler ve kendi oluturduunuz modeller ile train notebooklarn kullanarak eitebilirsiniz.

Performans sonularn, karlatrmalarn, modeller tarafndan ayrt edilen cmle rneklerini ve verisetlerinin drive linklerini aadaki balklar altnda ayr ayr bulabilirsiniz.

Gereklilikler

Python 3.6+

Projeyi Yklemek in

git clone https://github.com/Fixy-TR/fixy.git

DEEPCHECKER KTPHANES

https://pypi.org/project/DeepChecker/

https://awesomeopensource.com/project/Fixy-TR/DeepChecker

DE-DA, K ve M dzeltmesi iin yaynlam olduumuz DeepChecker ktphanesini dorudan pip ile ykleyebilirsiniz.

ktphaneyi yklemek iin:

   pip install DeepChecker

Kullanabileceiniz fonksiyonlar ve kullanmlar:

Correct fonksiyonlar cmlenin doru halini dndrmektedir. Check fonksiyonlar ise cmlenin sigmoid fonksiyonundan gelen deeri ifade eder. 0'a yakn olmas ayr yazlmas gerektiini gstermektedir

from DeepChecker import correct_de, correct_ki, correct_mi, check_de, check_ki, check_mi 

print(correct_de("bu yaz bizimkiler de tatile gelecek")) # doru hali output olarak gelecek
print(check_de("bu yaz bizimkiler de tatile gelecek") # sigmoid deeri output olarak dnecek

DE/-DA N LTERATR KARILATIRMASI

Yaplan almalar Doruluk Oran
Fixy %87
Boazii %78
Google Docs %34
Microsoft Office %29
ITU %0
Libra Office %0

Boazii Universitesi tarafndan oluturulmu 100 zor cmle ile test edilmitir. lgili makale

Kullanlan metodoloji tamamiyle zgndr ve Literatrdeki dier almalardan farkl bir yaklama dayanmaktadr. Performans sonularndaki fark yaklamn doruluunu ispatlar niteliktedir.

DE-DA, K ve M in Gerekli Ktphaneler

from google.colab import drive
import pandas as pd
import keras
import pickle
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
import tensorflow as tf
from keras.layers import Dense, LSTM, Flatten, Embedding, Dropout , Activation, GRU, Flatten, Input, Bidirectional, GlobalMaxPool1D, Convolution1D, TimeDistributed, Bidirectional
from keras.layers.embeddings import Embedding
from keras.models import Model, Sequential
from keras import initializers, regularizers, constraints, optimizers, layers

DE-DA Dzeltici

Ktphaneleri kurduktan sonra modeli yklyoruz ve test ediyoruz.

model.load_weights("/content/Model_deda.h5")
pred = tokenizer.texts_to_sequences(["olsun demek x zor artk"])
maxlen = 7
padded_pred = pad_sequences(pred, maxlen=maxlen)
model.predict(padded_pred)
# 0' yakn kmas ekin ayr yazlmas gerektiini gsteriyor.
array([[0.04085088]], dtype=float32)
  • Accuracy on Test Data: 92.13%
  • ROC AUC on Test Data: 0.921

Confusion Matrix [336706 20522] [ 36227 327591]

class precision recall f1-score support
0 0.9049 0.9397 0.9219 357228
1 0.9384 0.9030 0.9204 363818

Data Oluturulan 3605229 satr veri ieren etiketli -ki veriseti linki: Data

K Dzeltici

Ktphaneleri kurduktan sonra modeli yklyoruz ve test ediyoruz.

model.load_weights("/content/Model_ki.h5")
pred = tokenizer.texts_to_sequences(["desem x byle byle oldu"])
maxlen = 7
padded_pred = pad_sequences(pred, maxlen=maxlen)
model.predict(padded_pred)

# 0' yakn kmas ekin ayr yazlmas gerektiini gsteriyor.
array([[0.00843348]], dtype=float32)
  • Accuracy on Test Data: 91.32%
  • ROC AUC on Test Data: 0.913

Confusion Matrix [27113 3311] [ 1968 28457]

class precision recall f1-score support
0 0.9323 0.8912 0.9113 30424
1 0.8958 0.9353 0.9151 30425

Oluturulan 304244 satr veri ieren etiketli -ki veriseti linki: Data

M-MI-MU-M Dzeltici

Ktphaneleri kurduktan sonra modeli yklyoruz ve test ediyoruz.

model.load_weights("/content/Model_mi.h5")
pred = tokenizer.texts_to_sequences(["olsun demek x zor artk"])
maxlen = 7
padded_pred = pad_sequences(pred, maxlen=maxlen)
model.predict(padded_pred)
# 0' yakn kmas ekin ayr yazlmas gerektiini gsteriyor.
array([[0.04085088]], dtype=float32)

Oluturulan 9507636 satr veri ieren etiketli -mi veriseti linki: Data

  • Accuracy on Test Data: 95.41%
  • ROC AUC on Test Data: 0.954

Confusion Matrix [910361 40403] [ 46972 903792]

class precision recall f1-score support
0 0.9509 0.9575 0.9542 950764
1 0.9572 0.9506 0.9539 950764

Literatrde ki ve mi ekleri zerine yaplm almaya rastlanamamas projenin zgnln arttrmaktadr.

Anlamsal Metin Analizi

Trke Sentiment Analizi

katmanl LSTM nral ayla oluturduumuz modeli yaklak 260000 tane pozitif ve negatif olarak etiketlenmi sentiment verisiyle eittik. Rastgele oluturduumuz kelime vektrleri ile birlikte embedding layeri nral amza ekledik. 10 Epoch ile eittiimiz modelden %94.57 accuracy(doruluk) skoru elde ettik.

Gerekli Ktphaneler

import numpy as np
import pandas as pd
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM,  Dropout
from tensorflow.python.keras.preprocessing.text import Tokenizer
from tensorflow.python.keras.preprocessing.sequence import pad_sequences

Ktphaneleri ykledikten sonra keras ile modeli yklyoruz.


from keras.models import load_model

model = load_model('hack_model.h5')  # modeli yklyoruz

Test inputlar oluturuyoruz.

#test yorumlar(inputlar)
text1 = "byle bir eyi kabul edemem"
text2 = "tasarm gzel ancak rn alm tavsiye etmem"
text3 = "bu iten ok skldm artk"
text4 = "kt yorumlar gzm korkutmutu ancak hibir sorun yaamadm teekkrler"
text5 = "yaptn ileri hi beenmiyorum"
text6 = "tam bir fiyat performans rn beendim"
text7 = "Bu rn beenmedim"
texts = [text1, text2,text3,text4,text5,text6,text7]

Test inputlar iin tokenize ve padding yapyoruz

#tokenize
tokens = turkish_tokenizer.texts_to_sequences(texts)
#padding
tokens_pad = pad_sequences(tokens, maxlen=max_tokens)

model bu inputlarn hangi duyguya yakn olduunu tahminliyor

for i in model.predict(tokens_pad):
    if i < 0.5:
        print("negatif")#negatif yorum yapm
    else
        print("pozitif")#pozitif yorum yapm
negative
negative
negative
positive
negative
positive
positive

Oluturulan 260000 satr veri ieren etiketli pozitif-negatif veriseti linki: Data

Trke Formal-Informal Metin Analizi

katmanl LSTM nral ayla oluturduumuz modeli twitter, newspaper ve wikipediadan aldmz verinin yaklak 2504900 tanesini formal(dzgn) ve informal(dzgn olmayan) olarak etiketledik ve nral amz eittik. Rastgele oluturduumuz kelime vektrleri ile birlikte embedding layeri nral amza ekledik. 10 Epoch ile eittiimiz modelden % 95.37 accuracy(doruluk) skoru elde ettik.

Gerekli Ktphaneler

import numpy as np
import pandas as pd
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM,  Dropout
from tensorflow.python.keras.preprocessing.text import Tokenizer
from tensorflow.python.keras.preprocessing.sequence import pad_sequences

Ktphaneleri ykledikten sonra keras ile modeli yklyoruz.


from keras.models import load_model

model = load_model('MODEL_FORMAL.h5')  # modeli yklyoruz

Test inputlar oluturuyoruz.

# test inputlar oluturuyoruz
text1 = "atatrk, bu grevi en uzun sre yrten kii olmutur."
text2="bdjfhdjfhdjkhj"
text3 = "hi resimde gsterildii gibi deil..."
text4 = "bir yirminci yzyl popler kltr ikonu haline gelen ressam, resimlerinin yan sra inili kl zel yaam ve politik grleri ile tannr. "
text5 = "fransz halk nceki dneme gre byk bir evrim geirmektedir. halk bilinlenmektedir ve sarayn, kraln, sekinlerin denetiminden kmaya balamtr. ehirlerde yaayan pek ok burjuva, byk bir atlm iindedir. kitaplar yaygnlamakta, aileler ocuklarn niversitelere gndererek salam bir gelecek kurma yolunu tutarak kltrel seviyeyi ykseltmektedir. bamsz yaynclarn kardklar gazete, bildiri ve brorler, kitlesel bilinlenmeye yol amaktadr. bu koullar da toplumsal deiim taleplerinin olgunlamasna yol amtr."
text6 = "bunu kardm sylediklerinden"
text7 = "Bu koullar da toplumsal deiim taleplerinin olgunlamasna yol amtr."
text8="bu ok sama yaa"
text9="bana byle bir yetki verilmedi."
text10="napcaz bu ii byle"
text11="ncelikle Mercedes-Benze olan ilgin iin teekkr ederiz."
text12="Ekibimizle alma istein iin teekkr ediyor, salkl gnler ve kariyerinde baarlar diliyoruz. Farkl etkinlik ve programlarda tekrar bir araya gelmek dileiyle."
text13="Ben de yle olduunu dnmyordum ama gittik yine de jzns"
texts = [text1, text2,text3,text4,text5,text6,text7,text8,text9,text10,text11,text12,text13]

Test inputlar iin tokenize ve padding yapyoruz

#tokenize
tokens = tokenizer.texts_to_sequences(texts)
#padding
tokens_pad = pad_sequences(tokens, maxlen=max_tokens)

model bu inputlarn hangi duyguya yakn olduunu tahminliyor

#test verisini tahminleme
for i in model.predict(tokens_pad):
  if i < 0.5:
    print("informal")
  else:
    print("formal")
formal
informal
informal
formal
formal
informal
formal
informal
informal
informal
formal
informal
informal

Oluturulan 1204900 satr veri ieren etiketli formal veriseti linki: Data Oluturulan 3934628 satr veri ieren etiketli informal veriseti linki: Data

Trke Emotion(Duygu) Metin Analizi

6 farkl duygu(Fear: Korku,Happy: Sevin,Sadness: znt,Disgust: renme-Bkknlk,Anger: fke,Suprise: aknlk) ile etiketli 27350 verinin bulunduu veriseti ile SVM linearSVC,MultinomialNB,LogisticRegression, RandomForestClassifier modellerini eittik. Modellemeden nce verideki kelimeleri vektrize etmek iin tfidf vektrizer ve trke stopword listesini kullandk. Bu modeller arasnda en ykse accuracy orann LinearSVC modeli ile elde ettik.

Model Accuracy Oranlarnn Karlatrlmas

Model Accuracy(Doruluk Oran)
LinearSVC 0.80
LogisticRegression 0.79
MultinomialNB 0.78
RandomForestClassifier 0.60

Gerekli Ktphaneler

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import LinearSVC
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

Ktphaneleri ykledikten sonra load_model ile modeli yklyoruz ve test ediyoruz.


# modeli ykleyip test ediyoruz
tfidf = TfidfVectorizer(sublinear_tf=True, min_df=5, norm='l2', encoding='latin-1', ngram_range=(1, 2), stop_words=myList)

loaded_model = pickle.load(open("emotion_model.pickle", 'rb'))
corpus = [
         "lerin ters gitmesinden endie ediyorum",
         "ok mutluyum",
         "sana ok kzgnm",
         "beni arttn",
        ]
tfidf.fit_transform(df.Entry).toarray()
features = tfidf.transform(corpus).toarray()
result = loaded_model.predict(features)
print(result)

['Fear' 'Happy' 'Anger' 'Suprise']

Bu model iin kullandmz verisetini TREMODATA adresinden istedik. Ayrca bu verisetinin bulunduu drive linki: Data

fixy_app(Flask API)

Virtual environment ortamnda oluturduunuz Flask API yardm ile modelleri bir arayzde gsterebilirsiniz. Bunun iin gerekli ktphaneler:

from flask_wtf import FlaskForm
from flask import Flask, request, render_template,redirect
import pickle
import re
from wtforms.validators import DataRequired
import pandas as pd
from os.path import join

app.py dosyasn altrarak modellerinizi n yze balayabilirsiniz.

alt text

alt text

Kural-Tabanl Dzeltici ve Daha Resmi(Formal) Yaklam

Backend ksmnda kural tabanl dzeltici iin Zemberek'in Normalization modln kullandk. Ayrca yine backend ksmnda metinlerin daha formal halini grebilmek iin Zemberek'in Informal Word Analysis modln kullandk.

Noisy-Kirli Veri retimi

Deep Learning Tabanl spell-checker modellerinin yazm yanln renmesi iin dzgn cmle-cmlenin hatal hali eklinde veri retmek gerekebiliyor. Trkede ska yaplan yazm yanllarn belirleyerek ve bunlar kullanarak dzgn kelimeyi bozan noisy fonksiyonlar oluturduk. Bylece modelleme iin kirli veri elde edebiliyoruz. Fonksiyonlar Noice_Adder_Functions.ipynb dosyasnda bulabilirsiniz.

Temizlenmi Wikipedi Veriseti

2364897 satrlk temizlenmi Trke Wikipedia verisetini herhangi bir Trke NLP almasnda kullanabilirsiniz:) Wikipedia Veriseti

Referanslar

Alternatives To Fixy
Select To Compare


Alternative Project Comparisons
Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Python (795,861
Deep Learning (35,987
Artificial Intelligence (18,753
Ai (18,753
Neural Network (15,414
Nlp (14,564
Natural Language Processing (14,564
Keras (10,424
Data Science (9,965
Bert (1,178
Acikhack2 (25